在OpenGL中的一个窗口上显示两个不同的图像。

问题描述 投票:0回答:2

我正试图使用OpenGL在一个窗口上显示两个不同的图像。就像下图所示的那样。

第一张图片在窗口的左侧:img [nc x nr] 。

窗口右侧的第二张图片:img2 [nc x ns] 。

enter image description here形象

我写了下面的显示程序代码。

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。

有人能看出我的代码有什么问题吗?

c++ visual-c++ opengl glut
2个回答
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等在你的应用程序中的命名是不同的,但视口应该设置为屏幕的大小。Raster位置应该是图像的起始位置,DrawPixels的前两个参数应该是图像的宽度和高度。每个图像不需要自己的视口,因为当图像模型的数量增加时,这将是非常难以管理的(而且非常慢)。


0
投票

实际上你定义了两次视口。所以第一个视口的效果不再有效。只定义一个视口,视口的高度和宽度为屏幕的宽度。

© www.soinside.com 2019 - 2024. All rights reserved.