Ortho参数为left,right,bottom,top,near,far
根据三维坐标方向x轴向右y轴向上z轴垂直平面朝外,根据参数来说near>far
比如Ortho(-100,100,-100,100,100,-100)但是实际的效果确是Ortho(-100,100,-100,100,-100,100)即near<far
举个例子
#include <gl/glut.h>
void ChangeSize(GLsizei w,GLsizei h)
{
if(h==0)
h=1;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<h)
glOrtho(-100.0f,100.0f,-100.0f*h/w,100.0f*h/w,100.0f,-100.0f);
else
glOrtho(-100.0f*w/h,100.0f*w/h,-100.0f,100.0f,100.0f,-100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f,0.0f,0.0f,1.0f);
glEnable(GL_DEPTH_TEST);//深度测试
glBegin(GL_TRIANGLES);
glColor3ub(255,0,0); //红色
glVertex3f(-50.0f,0.0f,0.0f);
glVertex3f(50.0f,0.0f,0.0f);
glVertex3f(0.0f,80.0f,0.0f);
glColor3ub(0,255,0); //绿色
glVertex3f(-50.0f,0.0f,-10.0f);
glVertex3f(50.0f,0.0f,-10.0f);
glVertex3f(0.0f,80.0f,-10.0f);
glEnd();
glutSwapBuffers();
}
void main()
{
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("a");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(myDisplay);
glutMainLoop();
}
已经启动深度测试,所以不会出现后来画的覆盖先前画的
这个程序的结果是屏幕上出现一个绿色正方形
但是near和far的参数互换的话就是红色正方形了
按照参数的意思应该这个程序的结果是正方形,但是为什么near和far互换后才能得到正确的结果,这是为什么,难道参数有误吗