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)的,其实不是,点是画在原点,然后通过平移,最后旋转的顺序出现的,因为需要将点通过矩阵变换,才能得到最终的二维坐标点,我们所看到的都是二维的图形,即使是三维的图形,其实也是看起来三维,但是投影到屏幕依然是二维图形。
误区二:我们的所说的裁剪图形,是平移旋转之后裁剪的,而不是画出来,裁剪了再平移旋转。