gluPerspective函数和glOrtho函数的具体用法

我查了好多资料

按照书上的代码写的确实可以显示

自己去写代码就经常看不到画的图形了
还是搞不清楚glupetspective和glOrtho这两个函数的具体使用方法
怎样才能设置相应参数
使得所画的图形适当的显示出来

哪位牛人指点下

谢谢了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题需要使用OpenGL编写代码来实现。以下是一个简单的示例程序,用于绘制一个球体和一个圆锥体,并在观察时使用透视和正交变换。 ```C++ #include <GL/glut.h> #include <cmath> // 定义球体和圆锥体的半径和高度 const float sphereRadius = 0.5f; const float coneRadius = 0.5f; const float coneHeight = 1.0f; // 定义球体和圆锥体的位置 float sphereX = 0.0f; float sphereY = 0.0f; float sphereZ = -2.0f; float coneX = 0.0f; float coneY = 0.0f; float coneZ = -4.0f; // 定义透视变换和正交变换的参数 const float perspectiveFov = 60.0f; const float perspectiveNear = 0.1f; const float perspectiveFar = 100.0f; const float orthoLeft = -2.0f; const float orthoRight = 2.0f; const float orthoBottom = -2.0f; const float orthoTop = 2.0f; const float orthoNear = 0.1f; const float orthoFar = 100.0f; // 绘制球体的函数 void drawSphere() { glPushMatrix(); glTranslatef(sphereX, sphereY, sphereZ); glutSolidSphere(sphereRadius, 20, 20); glPopMatrix(); } // 绘制圆锥体的函数 void drawCone() { glPushMatrix(); glTranslatef(coneX, coneY, coneZ); glutSolidCone(coneRadius, coneHeight, 20, 20); glPopMatrix(); } // 绘制场景的函数 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // 设置透视变换 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(perspectiveFov, 1.0f, perspectiveNear, perspectiveFar); // 绘制球体和圆锥体 drawSphere(); drawCone(); // 设置正交变换 glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(orthoLeft, orthoRight, orthoBottom, orthoTop, orthoNear, orthoFar); // 绘制球体和圆锥体 drawSphere(); drawCone(); glutSwapBuffers(); } // 初始化OpenGL的函数 void init() { glEnable(GL_DEPTH_TEST); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); } // 处理键盘输入的函数 void keyboard(unsigned char key, int x, int y) { switch (key) { case 'w': sphereY += 0.1f; break; case 's': sphereY -= 0.1f; break; case 'a': sphereX -= 0.1f; break; case 'd': sphereX += 0.1f; break; case 'q': sphereZ += 0.1f; break; case 'e': sphereZ -= 0.1f; break; case 'i': coneY += 0.1f; break; case 'k': coneY -= 0.1f; break; case 'j': coneX -= 0.1f; break; case 'l': coneX += 0.1f; break; case 'u': coneZ += 0.1f; break; case 'o': coneZ -= 0.1f; break; } glutPostRedisplay(); } // 主函数 int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(640, 640); glutCreateWindow("OpenGL Demo"); glutDisplayFunc(display); glutKeyboardFunc(keyboard); init(); glutMainLoop(); return 0; } ``` 在这个示例程序中,我们定义了一个球体和一个圆锥体,并使用glutSolidSphere和glutSolidCone函数来绘制它们。我们还定义了球体和圆锥体的位置,并使用glTranslatef函数来将它们移动到正确的位置。然后,我们定义了透视变换和正交变换的参数,并在display函数中使用gluPerspectiveglOrtho函数来设置它们。最后,我们在键盘输入处理函数中处理键盘输入,并使用glutPostRedisplay函数来告诉OpenGL重新绘制场景。 要编译这个程序,需要使用OpenGL的库文件和头文件。在Linux中,可以使用以下命令来编译: ``` g++ main.cpp -o program -lglut -lGL -lGLU ``` 在Windows中,可以使用以下命令来编译: ``` g++ main.cpp -o program -lopengl32 -lglu32 -lglut32 ``` 这个程序将绘制两个球体和两个圆锥体,一个使用透视变换,一个使用正交变换。可以使用键盘输入来移动球体和圆锥体的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值