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

Opengl 带圆锥体的gluLookAt未显示预期结果,opengl,graphics,glut,Opengl,Graphics,Glut,我试着看一个3D的圆锥体,我用gluLookAt。我在POS(250, 250, 0)的屏幕中间画一个圆锥体,然后用一个摄像机在原点上方观察它。输出是一个圆形,与我期望看到的圆锥体相反。看起来摄影机也在点(250250,0)处,但在gluLookAt中指定它应该在原点上方。我在这里俯瞰什么 void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVI

我试着看一个3D的圆锥体,我用gluLookAt。我在POS(250, 250, 0)的屏幕中间画一个圆锥体,然后用一个摄像机在原点上方观察它。输出是一个圆形,与我期望看到的圆锥体相反。看起来摄影机也在点(250250,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;
}
几个问题:

  • 设置相机矩阵,然后绘制。现在你的
    gluLookAt()
    没有任何用处
  • 默认的单位投影矩阵可能不是您想要的。使用
    glupperspective()
    glFrustum()
    设置真实透视变换
  • 你的
    gluLookAt()
    eye/center坐标有点不稳定;我已经把眼睛放在(50,50,50)并设置它看原点
总而言之:


#包括
#包括
作废显示(作废)
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GL_投影);
glLoadIdentity();
双w=glutGet(GLUT\U窗口\U宽度);
双h=glutGet(GLUT\U窗口\U高度);
gluPerspective(60.0,w/h,1.0,1000.0);
glMatrixMode(GLU模型视图);
glLoadIdentity();
gluLookAt(50,50,50,0,0,0,0,0,1);
线锥(10,30,20,20);
glutSwapBuffers();
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_深度);
glutInitWindowSize(500500);
玻璃窗(“圆锥体”);
glutDisplayFunc(显示器);
glEnable(GLU深度试验);
glutMainLoop();
返回0;
}
#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;
}