带有锥体的 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 未显示预期结果的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB diacriticInSensitive 搜索未按预期显示所有重音(带有变音符号的单词)行,反之亦然