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

C 从缓冲区和位置绘制像素(glDrawPixels),c,opengl,gldrawpixels,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); glDraw

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

重要代码如下:

// 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();  
//camFront=glReadPixels。。。
glMatrixMode(GLU模型视图);
glLoadIdentity();
//glRasterPos3f(1.0,0.5,0.0);//camFront是窗口的缓冲区
glutSwapBuffers();
基本上,当
glRasterPos3f
被注释掉时,我在场景中绘制了一个漂亮的窗口:

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

此问题的一个可能原因是rasterpos无效。光栅位置是在变换x、y和z后设置的,就像其他像素一样。这包括剪辑阶段

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

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

坐标必须是投影到屏幕上的可见点,成为二维坐标。尝试将代码放在modelview部件之前,可能坐标将在您期望的位置

由于使用glLoadIdentity重置矩阵,点(1.0、0.5、0.0)将位于屏幕的右边缘-可能被剪裁为太右或太靠近摄影机

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

(第二个测试比画一些东西要好,但如果不是无效的话,它不会告诉你画的位置)

新位置可能被剔除了吗?这将导致他说symptoms@user3125280:我正在为glRaster尝试许多不同的值。。即使是glRaster(0,0,0)也会隐藏该窗口=/glRasterPos3f(1.0,0.5,0.0,1.0);最后一个坐标不是3参数调用中的除数吗?编辑:不,在三个参数调用中,第三个参数是z,不是wDo,您的意思是glRasterPos3f(1.0,0.5,1.0);(3)投入?不管怎么说,它都没有出现。(不使用4个参数编译)@link:您真的需要使用
glDrawPixels()
吗。除了它被弃用之外,它也一直是一条非常不实用的道路。在我看来,这更像是您想要不同的视口和/或渲染到纹理。您的意思是我需要使用void
glGetBooleanv
?它不会编译你的代码(也请注意我使用的是C)好的,我试过你的代码。当我使用glRaster(带任何值)时,我得到了错误。当我注释掉glRaster时,我没有注意到错误-错误是错误处理代码的占位符-只是printf(“无效的光栅位置\”);或something@llnkx、y和z必须是场景中的可见点-尝试(0.5,0.5,0.5)Hm是的,这就是问题所在。但在这一点上,我如何知道我可以使用哪个位置?(使用.5、.5、.5尝试-不工作)