[CG実習 >  CG実習 課題(2021) >  飛行機の形状設計 ]

[課題12]: 飛行機の形状設計

課題

飛行機のように見える3次元物体を設計して, それを描画するプログラムを作成して下さい.
飛行機

もくじ

テンプレートファイル

次のテンプレートを利用して構いません. カメラと光源を適当に配置しています. またキーボードでカメラを動かす仕組みを入れてあります. マテリアルを簡便に設定するメソッドを定義しています. 詳しくはテンプレートで確認してみてください.

利用可能な図形オブジェクト

形状を設計するために利用可能な図形オブジェクトを紹介します.

GLUT図形オブジェクト

GLUTライブラリでは,以下のような図形オブジェクトが定義されています. これらを組み合わせたり,あるいは適宜スケーリングすることで, さらに複雑なオブジェクトを構築することもできます.

次に曲面オブジェクトに関するサンプルプログラムを示します.



  # トーラス
  # 中心=原点,z軸に垂直
  # inner   トーラス内部の円の直径(太さを決める)
  # outer   中心の空洞部の円の半径(大きさを決める)
  # sides   放射方向の分割数
  # stacks  放射方向と直交する方向の分割数
  GLUT.SolidTorus(inner,outer,sides,stacks)
  GLUT.WireTorus(inner,outer,sides,stacks)

  # 球
  # 中心=原点
  # radius 半径
  # slices 経線方向の分割数
  # stacks 緯線方向の分割数
  GLUT.SolidSphere(radius,slices,stacks)
  GLUT.WireSphere(radius,slices,stacks)

  # 円錐
  # 中心軸=z軸,底面:z=0,頂点=(0,0,height)
  # base   底面の半径
  # height 高さ
  # slices 経線方向の分割数
  # stacks 緯線方向の分割数
  GLUT.SolidCone(base,height,slices,stacks)
  GLUT.WireCone(base,height,slices,stacks)
  

  # 四面体
  # 原点中心
  GLUT.SolidTetrahedron()
  GLUT.WireTetrahedron()

  # 立方体
  # 原点中心
  # size: 大きさ
  GLUT.SolidCube(size)
  GLUT.WireCube(size)

  # 八面体
  # 原点中心
  GLUT.SolidOctahedron()
  GLUT.WireOctahedron()

  # 十二面体
  # 原点中心
  GLUT.SolidDodecahedron()
  GLUT.WireDodecahedron()

  # 二十面体
  # 原点中心
  GLUT.SolidIcosahedron()
  GLUT.WireIcosahedron()


GLU図形オブジェクト

GLUライブラリには,二次曲面(quadric surface)として定義されている図形オブジェクトが用意されています. 次にサンプルプログラムを示します(GLUT図形オブジェクトのサンプルと同じです).

二次曲面を利用する際には,二次曲面オブジェクトが必要となります. また予め二次曲面の描画スタイルなどを指定しておく必要があります.



  # 二次曲面オブジェクトの生成
  quadric = GLU.NewQuadric()
  
  # 二次曲面の描画スタイル
  # quadric 二次曲面オブジェクト
  # style   描画スタイル(GLU::POINT, GLU::LINE, GLU::FILL, GLU::SILHOUETTE)
  GLU.QuadricDrawStyle(quadric,style)

  # 二次曲面の法線処理モード
  # quadric 二次曲面オブジェクト
  # mode    法線モード(GLU::NONE, GLU::FLAT, GLU::SMOOTH)
  GLU.QuadricNormals(quadric,mode)

  # 二次曲面のテクスチャ処理モード
  # quadric 二次曲面オブジェクト
  # mode    テクスチャON/OFF (GL::TRUE, GL::FALSE)
  GLU.QuadricTexture(quadric,mode)


二次曲面オブジェクトは一つ用意すれば,それをすべてのGLU図形オブジェクトの描画のために何度でも使うことができます. つまり二次曲面ごとに二次曲面オブジェクトを個別に用意する必要はありません. 利用できる図形オブジェクトを以下に列挙します.



  # 球面
  # quadric 二次曲面オブジェクト
  # radius  半径
  # slices  経線方向の分割数
  # stacks  緯線方向の分割数
  GLU.Sphere(quadric,radius,slices,stacks)

  # 円柱面(中心軸=z軸,底面はz=0,上面はz=height)
  # quadric 二次曲面オブジェクト
  # base    底面側の半径
  # top     上面側の半径
  # height  高さ
  # slices  経線方向の分割数
  # stacks  緯線方向の分割数
  GLU.Cylinder(quadric,base,top,height,slices,stacks)

  # 円盤(孔あき;z軸に垂直)
  # quadric 二次曲面オブジェクト
  # inner   内側の半径(これが0なら孔はなくなる)
  # outer   外側の半径
  # slices  放射方向の分割数
  # rings   円盤を構成する同心円の数
  GLU.Disk(quadric,inner,outer,slices,rings)

  # 扇型(孔あき;z軸に垂直)
  # quadric 二次曲面オブジェクト
  # inner   内側の半径(これが0なら孔はなくなる)
  # outer   外側の半径
  # slices  放射方向の分割数
  # rings   円盤を構成する同心円の数
  # start   開始位置(度)
  # angle   中心角(度)
  GLU.PartialDisk(quadric,inner,outer,slices,rings,start,angle)


[CG実習 >  CG実習 課題(2021) >  飛行機の形状設計 ]