从缓冲区和位置绘制像素(glDrawPixels)

时间:2013-12-29 15:23:54

标签: c opengl gldrawpixels

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

重要的代码在这里:

// 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被注释掉时,我在我的场景中绘制了一个漂亮的窗口:

enter image description here

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

1 个答案:

答案 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");

(第二次测试比绘制某些东西更好,但如果它无效则无法告诉你绘制的位置)