2011-06-22 24 views
0

我创建了一个带有opengl功能的x11窗口,我需要在窗口大小大于图像的背景上加载一个图像(jpeg | png) ,没关系。我冲浪得到像使用魔鬼或免费图像reslets。我不知道使用哪一个。我使用a link to sample code中给出的示例代码设置了opengl窗口,并且我希望在void renderGL()中编写代码以使图像成为背景。你能告诉我要使用哪个图像库,并尽可能地提供代码。使用GLX(opengl和Xlib)设置图像(jpeg | png)背景

而且还要做什么来绘制opengl中的彩色像素。我需要一个函数来绘制一个窗口中的像素,为此我必须提供单独的x,y像素位置和rgb颜色(无符号整数).....

+0

我发现它自己 – HariHaraSudhan

回答

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