現在地: メニュー >> 実践編12
INDEX:実践編11 << 実践編12 >> 実践編13

SkyBox


手順は以下の通り
  1. 画像(6方向分)を用意
  2. テクスチャを作成
  3. 立方体の各面にテクスチャをはる
  4. 立方体の中に視点を置く

【例】
簡略化のため画像読み込みはOpenCVのC++インターフェイスを用いている
const char *filename[]={"posx.jpg","negx.jpg","posy.jpg","negy.jpg","posz.jpg","negz.jpg"};
enum{POSX,NEGX,POSY,NEGY,POSZ,NEGZ};

//テクスチャID
unsigned int texId[6];//6方向分
... ...
void LoadTexture()
{
	glGenTextures( 6, &texId[0] );//6枚のテクスチャ
	cv::Ptr<IplImage> imgA;//OpenCVの新しいC++インターフェイス
	for(int loop = 0;loop < 6;++loop)
	{		
		imgA = cvLoadImage(filename[loop],CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
		if(imgA.empty())
		{
			std::cerr << filename[loop] << " : Can't Load Image\n";
			exit(EXIT_FAILURE);
		}
		cvFlip(imgA,imgA);//上下反転
		glBindTexture( GL_TEXTURE_2D, texId[loop] );
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);//色は置き換えてマッピング
		
		glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,imgA->width,imgA->height, 0,GL_BGR,GL_UNSIGNED_BYTE,imgA->imageData);
		std::cout <<  filename[loop] << " : Loaded .\n";

		imgA.release();
	}
}
... ...

//--------- 描画 ----------//
... ...
DrawSkyBox()
... ...

【メモ】
補完フィルタは「GL_NEAREST」を指定する。
もし「GL_LINEAR」を指定すると、画像のつなぎ目が見える。

サンプルコード

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます