glOrtho 和 glulookAt有顺序要求?
我交换这两个函数的顺序显示的效果不一样?
#include<gl/glut.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
using namespace std;
GLsizei winWidth = 600, winHeight = 600;//WIN窗口大小
//观察点参数,默认为(0,0,1, 0,0,0, 0,1,0)
GLfloat px0 = 1.0, py0 = 0.0, pz0 = 1.0;//观察点在世界坐标系的坐标
GLfloat xref = 0.0, yref = 0.0, zref = 0.0;//所观察的方向(所看的点)
GLfloat Vx = 0.0, Vy = 1.0, Vz = 0.0;//相机的正上向量(相机的正上方所对应的方向)
//二维裁剪窗口或者三维裁剪立体
GLfloat viewSize = 10.0;
GLfloat xwMin = -viewSize, xwMax = viewSize, ywMin = -viewSize,ywMax = viewSize;//透视投影近观察面"大小",相对于观察坐标系
GLfloat dnear = -viewSize, dfar = viewSize;//近观察面距离,远观察面距离,都是观察系坐标下,必须为正
void init()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
}
/* 生成球体 */
void displayFcn()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 1.0);//设置颜色
glPushMatrix();//输入矩阵
glTranslatef(1.0, 1.0, 0.0);//把放置的坐标移到世界坐标的某个点
glutWireSphere(7.5, 100, 60);//绘制球体,参数分别为,球半径,经纬网格数
glPopMatrix();//输出
glFlush();
}
/*重绘函数,防止窗口变化*/
void winReshapeFcn(GLint newWidth, GLint newHeight)
{
//glViewport(0, 0, newWidth, newHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// glOrtho,gluLookAt顺序为什么不能交换?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
glOrtho(xwMin, xwMax, ywMin, ywMax, dnear, dfar);
gluLookAt(px0, py0, pz0, xref, yref, zref, Vx, Vy, Vz);
/* 或者也可以用投影矩阵 */
//gluPerspective(fovy, (GLfloat)w / (GLfloat)h, 1.0, 20.0);
glClear(GL_COLOR_BUFFER_BIT);
}
int main(int argc, char ** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50, 50);
glutInitWindowSize(winWidth, winHeight);
glutCreateWindow("Computer Graphics!");
init();
glutDisplayFunc(displayFcn);
glutReshapeFunc(winReshapeFcn);
glutMainLoop();
}
glOrtho在前面能正常显示,如图:
glOrtho在后面则如下图:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)