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

标签 c++ visual-c++ opengl glut

我正在尝试使用 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。

任何人都可以看到我的代码有什么问题吗?

最佳答案

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

关于c++ - 在 OpenGL 中的一个窗口上显示两个不同的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210312/

相关文章:

c++ - 为什么我的 C++ 程序的汇编输出充满了没有汇编代码的 .ascii?

c++ - 函数的未命名参数可以有默认值吗?

c++ - dll 的 new 和 delete 运算符重载

c# - 在带有 Visual Studio 的 Windows 上混合 C# 代码和非托管 C++ 代码

.net - 是否可以在 VC++/CLI 中重写 IEnumerable?

c++ - 在哪里定义编译时常量?

C++如何检测空格

c++ - OpenSceneGraph 中的世界到屏幕空间坐标

c++ - 在 openGL/GLUT 中绘制多个形状

c++ - Phong 着色器中不需要的透明度 - GLSL