带有锥体的 gluLookAt 未显示预期结果

Posted

技术标签:

【中文标题】带有锥体的 gluLookAt 未显示预期结果【英文标题】:gluLookAt with cone not showing expected result 【发布时间】:2019-03-22 13:36:08 【问题描述】:

我正在尝试查看 3D 中的锥体,为此我使用了 gluLookAt。我在屏幕中间的 pos (250, 250, 0) 处画了一个圆锥体,然后用位于原点上方的相机观察中间位置。输出是一个圆圈,与我期望看到的圆锥相反。似乎相机也位于点 (250,250,0),但它在 gluLookAt 中指定,它应该在原点上方。我在这里俯瞰什么?

void display(void)

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glTranslatef(250, 250, 0);
    glutSolidCone(30, 10, 20, 20);
    glTranslatef(-250, -250, 0);

    gluLookAt(0, 0, 100, 250, 250, 0, 0, 0, 1);

    glFlush();
    glutSwapBuffers();




int main(int argc, char **argv)

    float x, y;
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500, 500);
    glutCreateWindow("Cone");
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutKeyboardFunc(keyboard);
    glutMotionFunc(drag);
    glutMouseFunc(click);
    glutSpecialFunc(catchKey);



    glEnable(GL_DEPTH_TEST);

    glutMainLoop();         //calls do_one_simulation_step, keyboard, display, drag, reshape
    return 0;

【问题讨论】:

【参考方案1】:

几个问题:

设置您的相机矩阵,然后绘制。你现在的gluLookAt() 没有任何用处。 默认的单位投影矩阵可能不是您想要的。使用gluPerspective()glFrustum() 设置真实的透视变换。 您的gluLookAt() 眼睛/中心坐标有点不稳定;我已将眼睛放在 (50, 50, 50) 并将其设置为查看原点。

大家一起:

#include <GL/glut.h>
#include <GL/GLU.h>

void display( void )

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    double w = glutGet( GLUT_WINDOW_WIDTH );
    double h = glutGet( GLUT_WINDOW_HEIGHT );
    gluPerspective( 60.0, w / h, 1.0, 1000.0 );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    gluLookAt( 50, 50, 50, 0, 0, 0, 0, 0, 1 );

    glutWireCone( 10, 30, 20, 20 );

    glutSwapBuffers();


int main( int argc, char **argv )

    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
    glutInitWindowSize( 500, 500 );
    glutCreateWindow( "Cone" );
    glutDisplayFunc( display );
    glEnable( GL_DEPTH_TEST );
    glutMainLoop();
    return 0;

【讨论】:

以上是关于带有锥体的 gluLookAt 未显示预期结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 MAX() 选择未显示预期结果

MongoDB diacriticInSensitive 搜索未按预期显示所有重音(带有变音符号的单词)行,反之亦然

长期分支的 Sonarqube 分支结果未按预期显示

React Material-Ui(0.20.0) 对话框未显示预期结果?

阅读电子邮件的 html 模板未按预期显示

带有 resultClass 参数的 NamedQuery 未返回查询结果的预期“类型”