NSImageオブジェクトをOpenGLのテクスチャに指定する
NSImage+OpenGLによる描画のメモ書きです。
OpenGLに必要なNSImageの画像データは、以下のようにして取得します。
NSBitmapImageRep* imgRep = [NSBitmapImageRep imageRepWithData:[img TIFFRepresentation]]; int width = [imgRep pixelsWide]; int height = [imgRep pixelsHigh]; int bytesPerPixel = [imgRep samplesPerPixel]; void* data = [imgRep bitmapData];
必要な情報がそろったら、以下のようにしてOpenGL用のテクスチャを作成・指定します。
GLuint m_texture; // テクスチャ // テクスチャを作成 glGenTextures(1, &texture); // 作成したテクスチャをバインド glBindTexture(GL_TEXTURE_2D, texture); // 拡大縮小時の描画方法を指定 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 画像を作成したテクスチャに指定する gluBuild2DMipmaps( GL_TEXTURE_2D, static_cast<gluint>(bytesPerPixel), static_cast<gluint>(width), static_cast<gluint>(height), GL_RGB, GL_UNSIGNED_BYTE, data ); // 作成しておいたテクスチャをバインドして描画されるようにする glEnable(GL_TEXTURE_2D);
詳細の説明については割愛させていただきます。
肝となる部分はgluBuild2DMipmaps関数の呼び出しです。
ここでMSImageオブジェクトから取得した画像データの情報を指定しています。
テクスチャの指定自体はすんなりと出来ます。
上記はクラス化して使った方が良いでしょう。