Opengl 带圆锥体的gluLookAt未显示预期结果
我试着看一个3D的圆锥体,我用gluLookAt。我在POS(250, 250, 0)的屏幕中间画一个圆锥体,然后用一个摄像机在原点上方观察它。输出是一个圆形,与我期望看到的圆锥体相反。看起来摄影机也在点(250250,0)处,但在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
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()
- 你的
eye/center坐标有点不稳定;我已经把眼睛放在(50,50,50)并设置它看原点gluLookAt()
#包括
#包括
作废显示(作废)
{
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;
}