我正在尝试使用OpenGL在窗口上显示两个不同的图像。类似于下图所示的内容。
窗口左侧的第一张图片:img [nc x nr]
窗口右侧的第二张图片:img2 [nc x ns]
图像
我已经为显示例程编写了以下代码:
void display(void)
{
///////////////////First Image////////////////////////
glViewport( (GLsizei) 0, (GLsizei) 0, (GLsizei) nc, (GLsizei) nr );
glClear(GL_COLOR_BUFFER_BIT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glRasterPos2i(0, 0);
glDrawPixels(nc,nr, GL_RGB, GL_UNSIGNED_BYTE, img);
///////////////////Second Image////////////////////////
glViewport( (GLsizei) 0, (GLsizei) nc, (GLsizei) nc, (GLsizei) ns );
glClear(GL_COLOR_BUFFER_BIT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glRasterPos2i(0, nc);
glDrawPixels(nc,ns, GL_RGB, GL_UNSIGNED_BYTE, img2);
//////////////////////////////////////////////////////
glutSwapBuffers();
}
当我运行程序时,窗口什么也没显示;但是当我注释掉第二张图像的显示代码时,我可以看到窗口左侧的图像1。
任何人都可以看到我的代码出了什么问题吗?
答案 0 :(得分:2)
void display(void)
{
// Size the viewport to be big enough for two images
glViewport( (GLsizei) 0, (GLsizei) 0, (GLsizei) screen_width, (GLsizei) screen_height );
glClear(GL_COLOR_BUFFER_BIT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
// Position first image starting at 0, 0
glRasterPos2i(0, 0);
// Get the width and height of image as first two params
glDrawPixels(img.width,img.height, GL_RGB, GL_UNSIGNED_BYTE, img);
// Position second image starting after the width of the first image
glRasterPos2i(img.width, 0);
// get width and height of second image as first two params
glDrawPixels(img2.width,img2.height, GL_RGB, GL_UNSIGNED_BYTE, img2);
glutSwapBuffers();
}
这是一般的想法。显然,screen_height等在您的应用程序中的命名方式不同,但视口应设置为屏幕大小。光栅位置应该是图像的起始位置,而DrawPixels的前2个参数应该是图像的宽度和高度。每个图像都不需要自己的视口,因为当图像/模型的数量增加时,这将是非常难以管理的(并且非常慢)。
答案 1 :(得分:0)
实际上,您两次定义了视口。因此,第一个视口的效果不再有效。只能定义一个具有屏幕高度和宽度的视口。