OpenGL截头体,透视
OpenGL frustum, perspective
我有下面的代码,它将快照带到帧缓冲区。我验证了帧缓冲区工作正常,并且相机正确面对对象。我过去常常正确地完成图片,但这是基于错误的代码,使用了错误的截头体。所以我决定(用截头台)重新开始。
对象以中间为中心,为32*32个块,每个块2*2,因此为64*64。
我的距离是100,我的视口是128x256。我的截头体是1比1000.0。
我对Opengl还比较陌生,所以我很难完全理解沮丧和视角的概念。
我一张照片都没有。
saveGLState();
const int nrPics = 360 / DEGREES_BETWEEN_PICTURES;
for (int i = 0; i < nrPics; i++) {
catchFbo->bind();
glViewport(0, 0, PICTURE_WIDTH, PICTURE_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float rat = PICTURE_WIDTH / PICTURE_HEIGHT;
glFrustum(- 1.0, + 1.0, - rat, + rat, 1.0, 1000.0);
gluPerspective(90.0f,rat,CAPT_FRUSTRUM_NEAR,CAPT_FRUSTRUM_FAR);
glColorMask(true, true, true, true);
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_MULTISAMPLE);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawScreenshot(i);
catchFbo->release();
QImage catchImage = catchFbo->toImage();
catchImage.save("object/test" + QString::number(i) + ".png");
}
glDisable(GL_MULTISAMPLE);
restoreGLState();
void VoxelEditor::saveGLState()
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
}
void VoxelEditor::restoreGLState()
{
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib();
}
编辑:我试着只使用glFrustum或glPerspective。运气不好。
您不应该同时使用glFrustum和gluProjection。它们都是设置投影矩阵的运算,如果你把它们一起使用,你会把它们相乘,得到一个奇怪的结果。一般来说,您只需在单位矩阵上应用glFrustum或gluProjection,而不是两者都应用。
如果这不能解决问题,那么NEAR、FAR、WIDTH和HEIGHT的值是多少?还要确保你没有对屏幕比例进行整数除法(一个常见的错误)。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 了解 GLM- openGL 中的相机转换
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- OpenGL大的3D纹理(>2GB)非常慢
- 在 OpenGL 中使用透视与正交投影时的光线投射(鼠标拾取)
- 透视视图的任何解决方案 openGL qt.
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- OpenGL 透视投影裁剪多边形与顶点在视锥体之外 = 错误的纹理映射?
- 现代Opengl:同时正投影和透视投影
- 绕Y轴旋转二维正方形,并使用DirectX或openGL以透视投影方式显示
- 透视投影 OPENGL 和计算着色器
- 在C++中的OpenGL中将坐标从三维透视投影映射到二维正投影
- OpenGL截头体,透视
- OpenGL透视投影来映射屏幕像素
- OpenGL透视矩阵不起作用
- OpenGL帮助透视中的坐标
- OpenGL透视矩阵到DirectX矩阵
- OpenGL透视和照明不工作
- 转换正交相机透视OpenGL