Height Map(高さマップ)入門

height map screen shot


「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();