Установите фоновое изображение (jpeg | png), используя GLX (opengl и Xlib) - PullRequest
0 голосов
/ 22 июня 2011

Я создаю окно x11 с функциональностью opengl, мне нужно загрузить изображение (jpeg | png) на его фон, где размер окна больше, чем изображение, это не имеет значения.Я занимался серфингом, чтобы получить результаты, такие как использование DevIL или бесплатное изображение.Я не знаю, какой из них использовать.Я настроил окно opengl с примером кода, приведенным в , ссылкой на пример кода , и я хочу написать код в void renderGL (), чтобы сделать изображение фоновым.Можете ли вы сказать мне, какую библиотеку изображений использовать, и, если это возможно, выполнить код.

А также, что нужно сделать, чтобы построить цветные пиксели в opengl.Мне нужна функция для рисования пикселя в окне, для которого я должен указать только положение пикселя x, y и цвет rgb (без знака int) .....

1 Ответ

1 голос
/ 25 июня 2011

Я не большой программист 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();
...