Height Map(高さマップ)入門
「3D 入門者で、なぜか Height Map が欲しくて、OpenGLを使っていて、動作速度なんて気にしない」というニッチな市場に向けた Height Map 描画関数です。カメラやライトとかを設定すると、添付画像のようになります。もちろん、良いこの皆さんは、適当に改造して使ってくださいね。
/// height map 描画 void drawHeightMap( const float* array, size_t width, size_t height, float chipSize ) { glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); glEnable( GL_COLOR_MATERIAL ); glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT ); glColor3f( 0.5f, 0.5f, 0.5f ); // マテリアル色 for ( size_t i = 0; i < height; ++i ) { for ( size_t j = 0; j < width; ++j ) { glPushMatrix(); float h = array[ i * width + j ]; glTranslatef( chipSize * j, h * 0.5f, chipSize * i ); glScalef( chipSize, h, chipSize ); glutSolidCube( 1 ); glPopMatrix(); } } } static float heightMap_g[][ 10 ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 1, 2, 5, 6, 7, 8, 9, 10, 11, 3, 4, 3, 6, 7, 8, 9, 10, 11, 12, 4, 4, 4, 4, 8, 9, 10, 11, 12, 13, 5, 6, 7, 8, 15, 10, 11, 12, 13, 14, 6, 7, 8, 9, 15, 15, 12, 13, 14, 15, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }; // [ 使い方 ] // 事前に、ビュー行列とか設定してね。 float chipSize = 10; glTranslatef( -5 * chipSize, -20, -5 * chipSize ); drawHeightMap( heightMap_g[ 0 ], 10, 10, chipSize ); glPopMatrix();