0

opengl機能を使用してx11ウィンドウを作成します。ウィンドウのサイズが画像よりも大きい場合は、背景に画像(jpeg | png)をロードする必要があります。問題ありません。私はDevILや無料の画像を使用するようなリシルトを取得するためにサーフィンをしました。どちらを使うべきかわかりません。サンプルコードへのリンクで指定されたサンプルコードを使用してopenglウィンドウを設定し 、画像を背景として作成するためにvoid renderGL()でコードを記述したいと思います。使用する画像ライブラリを教えてください。可能であればコードを提供してください。

また、openglでカラーピクセルをプロットするために何をすべきか。ウィンドウにピクセルを描画する関数が必要です。そのために、x、yピクセルの位置とrgbの色だけを指定する必要があります(unsigned int)....。

4

1 に答える 1

1

私はopenglプログラマーではありませんが、どういうわけか私はこれとその働きをしました


 ilInit(); /* Initialization of DevIL */
ilGenImages(1, &texid); /* Generation of one image name */
ilBindImage(texid); /* Binding of image name */
success = ilLoadImage(backgroundimage); /* Loading of image "image.jpg" */
iWidth = ilGetInteger(IL_IMAGE_WIDTH);
iHeight = ilGetInteger(IL_IMAGE_HEIGHT);
if (success){ 
success = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE); // Convert every colour component into unsigned byte,replace IL_RGB with IL_RGBA  for alpha channel
}   

glGenTextures(1, &image); /* Texture name generation */
glBindTexture(GL_TEXTURE_2D, image); /* Binding of texture name */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),

ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
ilGetData()); /* Texture specification */

glRotatef(roll, 0.0f,0.0f, 10.0f);     
glOrtho(0.0, float(width), float(height), 0.0, 0.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();   // Reset The Modelview Matrix

glBindTexture(GL_TEXTURE_2D, image);    // Select The First Image Texture
glBegin(GL_QUADS);// Start Drawing A Textured Quad
glTexCoord2i(0, 0); glVertex2f(width/2-iWidth/2,height/2-iHeight/2);
glTexCoord2i(0, 1); glVertex2f(width/2-iWidth/2,height/2+iHeight/2);
glTexCoord2i(1, 1); glVertex2f(width/2+iWidth/2,height/2+iHeight/2);
glTexCoord2i(1, 0); glVertex2f(width/2+iWidth/2,height/2-iHeight/2);        
glEnd();
于 2011-06-25T06:47:38.427 に答える