opengl的坐标指向问题,glmatrixmode(gl_modeview)对其有何影响?
画了一个三维坐标轴,带箭头,和一个正空间的立方体,我怎么觉得它好像z轴是指向屏幕里面的,源码如下:
//最初的疑惑即是来自于此程序,一个立方体x转-30,y转-30之后,有深度检测
//可以看到z是指向里面的
//#include <windows.h>
#include <gl/glut.h>
static float angle_x = 0, angle_y=-10,angle_z=0;
void zuobiao() //画出坐标线,正方向有箭头
{
glBegin(GL_LINES);
glColor3f(1.0,0.0,0.0);
glVertex3f(-0.25f,0.0f,0.0f); //x 红
glVertex3f(0.8f,0.0f,0.0f);
glColor3f(0.8f,0.5f,0.9f);
glVertex3f(0.0f,-0.25f,0.0f); //y
glVertex3f(0.0f,0.8f,0.0f);
glColor3f(1.0,1.0,1.0);
glVertex3f(0.0f,0.0f,-0.5f); //z 白
glVertex3f(0.0f,0.0f,0.8f);
glEnd();
glBegin(GL_TRIANGLES);
glVertex3f(-0.1,-0.1,0.8);//z
glVertex3f(0.1,0.1,0.8);
glVertex3f(0.0,0.0,1.0);
glColor3f(1.0,0.0,0.0);//x
glVertex3f(0.8,0.1,0.1);
glVertex3f(0.8,-0.1,-0.1);
glVertex3f(1.0,0.0,0.0);
glColor3f(0.8f,0.5f,0.9f);//y
glVertex3f(-0.1,0.8,0.1);
glVertex3f(0.1,0.8,-0.1);
glVertex3f(0.0,1.0,0.0);
glEnd();
}
void myplay() //6面都有的立方体
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
/* gluPerspective(60.0f,1,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0,0,-2);
*/
glRotatef(-30,0,1,0); // 面朝y的正方向,绕y轴逆时针旋转 -30
glRotatef(-30,1,0,0);//面朝x的正方向,绕x轴逆时针旋转 -30
zuobiao(); //自己定义的一个画出3根坐标线的函数,在正方向有箭头
glBegin(GL_POLYGON); //
glColor3f(1.0,0.0,0.0);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,0.5f,0.0f);
glVertex3f(0.5f,0.5f,0.0f);
glVertex3f(0.5f,0.0f,0.0f);
glEnd();
glBegin(GL_POLYGON);
glColor3f(1.0f,1.0,0.0);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,0.5f,0.0f);
glVertex3f(0.0f,0.5f,0.5f);
glVertex3f(0.0f,0.0f,0.5f);
glEnd();
glBegin(GL_POLYGON);
glColor3f(1.0,0.0,1.0);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,0.5f);
glColor3f(1.0,0.0,0.0);
glVertex3f(0.5f,0.0f,0.5f);
glColor3f(0.0,1.0,0.0);
glVertex3f(0.5f,0.0f,0.0f);
glEnd();
glBegin(GL_POLYGON);
glColor3f(0.0,1.0,0.0);
glVertex3f(0.0f,0.5f,0.0f);
glVertex3f(0.5f,0.5f,0.0f);
glVertex3f(0.5f,0.5f,0.5f);
glVertex3f(0.0f,0.5f,0.5f);
glEnd();
glBegin(GL_POLYGON);
glColor3f(0.0,1.0,1.0);
glVertex3f(0.5f,0.5f,0.0f);
glVertex3f(0.5f,0.5f,0.5f);
glVertex3f(0.5f,0.0f,0.5f);
glVertex3f(0.5f,0.0f,0.0f);
glEnd();
glBegin(GL_POLYGON);
glColor3f(0.4,1.0,0.6);
glVertex3f(0.5f,0.5f,0.5f);
glVertex3f(0.5f,0.0f,0.5f);
glVertex3f(0.0f,0.0f,0.5f);
glVertex3f(0.0f,0.5f,0.5f);
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(300,200);
glutInitWindowSize(400,400);
glutCreateWindow("立方体");
glutDisplayFunc(&myplay);
glutMainLoop();
return 0;
}
如果加上myplay()中的注释掉的代码,就可以实现投影空间,也就是有近大远小的效果,可是这时候我发现旋转的角度又不对了,不再是绕轴逆时钟旋转了,难道此时旋转的是看物体的眼睛而不再是物体了?
望各位赐教,祝各位牛年大吉!