【问题标题】:Drawing pixels from buffer and position (glDrawPixels)从缓冲区和位置绘制像素 (glDrawPixels)
【发布时间】:2013-12-29 15:23:54
【问题描述】:

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

重要的代码在这里:

// 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 定位该窗口,则该窗口将从场景中完全消失...有任何线索吗?

【问题讨论】:

  • 新职位是否可能被剔除?这会导致上述症状
  • @user3125280:我正在为 glRaster 尝试许多不同的值。甚至 glRaster(0,0,0) 隐藏了那个窗口 =/
  • glRasterPos3f(1.0, 0.5, 0.0, 1.0);最后一个坐标不是 3 参数调用中的除数吗?编辑:不,在三个参数调用中第三个参数是 z,而不是 w
  • 你的意思是glRasterPos3f(1.0, 0.5, 1.0); (3 个输入)?反正试过了,没有出现。 (不能用 4 个参数编译)
  • @link:你真的需要使用glDrawPixels()吗?除了它已被弃用之外,它也一直是一条非常低效的路径。对我来说,这看起来更像是你想要不同于视口和/或渲染到纹理。

标签: c opengl gldrawpixels


【解决方案1】:

一个可能的这个问题的原因是一个无效的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");

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

【讨论】:

  • 你的意思是我需要使用 void glGetBooleanv 吗?它不会编译您的代码(也请注意我使用的是 C)
  • 好的,我试过你的代码。当我使用 glRaster (具有任何值)时,我得到了错误。当我注释掉 glRaster 时,我没有收到错误
  • 注意 - 错误是错误处理代码的占位符 - 只需 printf("Invalid Raster Position\");什么的
  • @llnk x,y 和 z 必须是场景中的可见点 - 试试 (0.5,0.5,0.5)
  • 嗯是的,这就是问题所在。但此时我怎么知道我可以使用哪个 glRaster 位置? (尝试使用 .5、.5、.5 - 不工作)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多