opengl中关于平移旋转坐标系问题

来源:互联网 发布:java自学需要什么基础 编辑:程序博客网 时间:2024/05/05 09:39

void test::resizeGL(int width,int height)
{
 glViewport(0,0,width,height);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glOrtho(-10,10,-10,10,-10,10);
 glMatrixMode(GL_MODELVIEW);
}


void test::draw()
{   
 int depth=-5;
 glMatrixMode(GL_MODELVIEW);
  
 glLoadIdentity();
 glRotatef(rotateY,0,1,0);
 glTranslatef(0,0,depth);
 
 glBegin(GL_LINES);
 glVertex3f(-10,0,0);
 glVertex3f(10,0,0);
 glVertex3f(0,-10,0);
 glVertex3f(0,10,0);
 glEnd();
}


这个是用vs2012+QTopengl写的两个函数,从中可以看出,我的点的变换是这么个步骤,


这里我原来这么一个误区:

误区一:画在原点-->平移-->旋转,而不是画在想画的点,想画的那个地方是平移过去的。

就是点是画在(x,y,depth)的,其实不是,点是画在原点,然后通过平移,最后旋转的顺序出现的,因为需要将点通过矩阵变换,才能得到最终的二维坐标点,我们所看到的都是二维的图形,即使是三维的图形,其实也是看起来三维,但是投影到屏幕依然是二维图形。

误区二:我们的所说的裁剪图形,是平移旋转之后裁剪的,而不是画出来,裁剪了再平移旋转。



0 0