OpenGL は、グラフィックスとハードウェア間のインターフェイスです。他のグラフィックス プログラム開発ツールと比較して、多数のグラフィックス機能を提供します。直感的なプログラミング環境により、3 次元グラフィックスの描画プロセスが簡素化されます。OpenGL を使用して 3 次元シーンを構築すると、インタラクションが可能になります。入力デバイスを介したオブジェクトの操作、シーン内のオブジェクトの相互作用。
デラックスシングルルーム
構成環境:vs22+freeglutライブラリ
1. 閉空間となるように壁を描き、閉空間内のシーンのレイアウトを完成させます
//空间基本架构
void drawWall()
{
glColor3f(0.47, 0.54, 0.60);//rgb颜色可调
GLfloat matWall[] = {
0.37, 0.83, 0.98};
GLfloat matBlack[] = {
0, 0, 0, 1 };
GLfloat matWhite[] = {
1, 1, 1, 1 };
GLfloat matShininess[] = {
40 };
glMaterialfv(GL_FRONT, GL_AMBIENT, matWall);
glMaterialfv(GL_FRONT, GL_DIFFUSE, matWall);
glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
// 左边
drawQuads(-10, 10, -20,
-10, 10, 0,
-10, -10, 0,
-10, -10, -20);
// 右边
drawQuads(10, -10, -20,
10, -10, 0,
10, 10, 0,
10, 10, -20);
// back
drawQuads(10, 10, -20,
-10, 10, -20,
-10, -10, -20,
10, -10, -20);
// 天花板
drawQuads(10, 10, -20,
10, 10, 0,
-10, 10, 0,
-10, 10, -20);
// 地板
glColor3f(0.75, 0.75, 0.75);
drawQuads(-10, -10, -20,
-10, -10, 0,
10, -10, 0,
10, -10, -20);
}
glMaterialfv () 関数は、照明モデルのマテリアル パラメータを指定します。
2. ベッドを描いて隅に置きます(左)
void drawBed()
{
glColor3f(1, 0.8, 0.5);
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrown);
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrown);
glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
// 床头
glPushMatrix();
glTranslatef(-9.5, -6, -16);
glScalef(1, 8, 8);
glutSolidCube(1);
glPopMatrix();
// 床尾
glPushMatrix();
glTranslatef(4.5, -8.5, -16);
glScalef(1, 3, 8);
glutSolidCube(1);
glPopMatrix();
//床板
glPushMatrix();
glTranslatef(-2, -7, -16);
glScalef(14, 1, 8);
glutSolidCube(1);
glPopMatrix();
//床垫
glColor3f(0.6, 0.97, 0.6);
glMaterialfv(GL_FRONT, GL_AMBIENT, matGreen);
glMaterialfv(GL_FRONT, GL_DIFFUSE, matGreen);
glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
glPushMatrix();
glTranslatef(-2, -6, -16);
glScalef(14, 1, 8);
glutSolidCube(1);
glPopMatrix();
}
レンダリングは次のとおりです。
3. 部屋のいくつかの基本構成
void drawDesk()
{
glColor3f(1, 0.8, 0.5);
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrown);
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrown);
glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
//书桌
glPushMatrix();
glTranslatef(9, -4, -10);
glScalef(4, 0.5, 20);
glutSolidCube(1);
glPopMatrix();
glPushMatrix();
glTranslatef(9.75, -7, -10);
glScalef(0.5, 6, 20);
glutSolidCube(1);
glPopMatrix();
//床头柜
glPushMatrix();
glTranslatef(-8, -8, -10);
glScalef(4, 4, 4);
glutSolidCube(1);
glPopMatrix();
}
このテーブルを物理ブッシュに変換し
、ティーポットブッシュを購入することをお勧めします。
void drawTeapot()
{
glColor3f(0.80,0.71,0.34);
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrown);
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrown);
glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
glPushMatrix();
glTranslatef(-8, -5.5, -10);
glRotatef(-100, 0, 1, 0);
glutSolidTeapot(0.8);
glPopMatrix();
}
まずここにシーンを書きましょう。他のアイテムを好きなように追加できます。次の記事は Android エルフの描画についてです。
完全なソース コードを入手するには、私をフォローしてコメント エリアにメールを残してください。