0

基本上我正在做一些测试来模拟场景中的各种窗口。一切正常,直到我尝试更好地定位我在场景中绘制的窗口。

重要的代码在这里:

// camFront = glReadPixels ...

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
//glRasterPos3f(1.0, 0.5, 0.0);  // <-- commented out

// Zooming window
glPixelZoom(0.5, 0.5);      

glDrawPixels(500, 250, GL_RGB, GL_UNSIGNED_BYTE, camFront);  //> camFront is the buffer of the window
glutSwapBuffers();  

基本上,当glRasterPos3f被注释掉时,我在场景中绘制了漂亮的窗口:

在此处输入图像描述

现在,如果我尝试用 定位该窗口glRasterPos3f,则该窗口将从场景中完全消失...有任何线索吗?

4

1 回答 1

2

一种可能导致此问题的原因是无效的 rasterpos。光栅 pos 在转换 x、y 和 z 之后设置,就像任何其他像素一样。这包括剪辑阶段。

简单的测试是查看当在您的 x、y 和 z 处绘制一个亮点(或更明显的东西)时,它是否出现在屏幕上。

(1.0, 0.5, 0.0) 在你的屏幕上在哪里?是可见的吗?

坐标必须是投影到屏幕上的可见点,成为二维坐标。尝试将代码放在模型视图部分之前,也许坐标将在您期望的位置。

因为您使用 glLoadIdentity 重置矩阵,所以点 (1.0, 0.5, 0.0) 将位于屏幕的右边缘 - 可能被剪裁为太靠右或太靠近相机。

GLboolean valid;
glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid);
if(valid == GL_FALSE) 
    printf("Error");

(第二个测试比画东西要好,但如果它不是无效的,它不会帮助你告诉你它是在哪里画的)

于 2013-12-29T15:42:13.903 回答