解释 glFrustum() 与 gluLookAt() 的比较
explanation of glFrustum() compared to gluLookAt()
我正在调试一个代码,我想查看深度图像的扫描,但我的相机设置不允许我看到扫描。因此,我正在玩弄相机设置。我在(30,120,800)处创建了一个巨大的点,我可以使用gluLookAt看到它。glFrustum(左,右,底,上,近,远)的相应设置是什么?使用我的设置,该点应该正好位于中心,但我看不到它。
void onDisplay()
{
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glDisable(GL_CULL_FACE);
glPushMatrix();
glPointSize( 1111111116.0 );
glColor3f( 0.25f, 0.907, 0.731f );
glLoadIdentity();
// Set the camera
//gluLookAt( 30.f, 120.0f, 800.f, 30.f, 120.0f, 800.f, 0.0f, 1.f, 0.0f); //works
glFrustum( 28, 32, 118, 122, 798, 802);
glBegin( GL_POINTS );
glVertex3f( 30, 120, 800 ); //30,120,800
glEnd();
glPopMatrix();
//glFinish();
//glutSwapBuffers();
glutSwapBuffers();
glutPostRedisplay();
}
int main(int argc, char **argv)
{
// initialize GLUT
glutInitWindowSize(800, 800);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInit(&argc, argv);
glutCreateWindow("HeadPoseDemo");
glutKeyboardFunc (processSpecialKeys);
glutDisplayFunc(onDisplay);
glutMainLoop();
return 0;
}
细节决定成败:注意他们在文档中是如何说的
近瓦尔,远瓦尔
指定到近深度和远深度修剪平面的距离。两个距离都必须为正。
这与他们用于其他参数的措辞不同:
左、右
指定左右垂直修剪平面的坐标。
您应该知道的是,您正在沿着负 z 轴查看。所以我的猜测是,当你把它改成glVertex3f(30.f, 120.f, -800.f);
时,你会看到你的观点。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- std::设置自定义比较器
- 布尔比较运算符是如何在C++中工作的
- C++将目录中的所有文件与::filesystem进行比较
- shell排序中的交换和比较
- 如何在C++中比较两个char数组
- catch框架有没有办法比较流或文件
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 智能指针作为无序映射键,并通过引用进行比较
- 比较if语句中的数组值和int值
- 对于循环变体比较
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 解释 glFrustum() 与 gluLookAt() 的比较