基本上我正在做一些测试来模拟场景中的各种窗口。一切正常,直到我试图更好地定位我在场景中绘制的窗口。
重要的代码在这里:
// 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
定位该窗口,窗口将从场景中完全消失......有任何线索吗?
答案 0 :(得分:2)
一种可能的此问题的原因是无效的rasterpos。与任何其他像素一样,在转换x,y和z之后设置栅格pos。这包括裁剪阶段。
简单的测试是看看当你的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");
(第二次测试比绘制某些东西更好,但如果它无效则无法告诉你绘制的位置)