关闭

OpenGL坐标系

标签: 图形matrix照片编程c
2616人阅读 评论(0) 收藏 举报
分类:

openGL坐标系- -

                                      

openGL使用右手坐标

从左到右,x递增
从下到上,y递增
从远到近,z递增


OPENGL坐标系可分为:世界坐标系和当前绘图坐标系。

世界坐标系以屏幕中心为原点(0, 0, 0)。你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。长度单位这样来定: 窗口范围按此单位恰好是(-1,-1)到(1,1)。

当前绘图坐标系是 绘制物体时的坐标系。程序刚初始化时,世界坐标系和当前绘图坐标系是重合的。当用glTranslatef(),glScalef(), glRotatef()对当前绘图坐标系进行平移、伸缩、旋转变换之后, 世界坐标系和当前绘图坐标系不再重合。改变以后,再用glVertex3f()等绘图函数绘图时,都是在当前绘图坐标系进行绘图,所有的函数参数也都是相 对当前绘图坐标系来讲的。

 

openGL坐标变换

                                      

坐标变换:OPENGL的每一种变换都是一个矩阵的运算。假设当前某顶点坐标为C,现在要做某种变换(设矩阵为M)得到新的坐标C1,那么运算过程就是C1=T×C。OpenGL应用左乘规则,坐标的变换就是用变换矩阵乘以坐标向量

OpenGL变换在编程的时候顺序是反过来的。想对目标 glutWireSphere(0.2, 10, 8);//draw earth 做R2,T,R1的变换,在写的时候就要:

         glRotatef(year, 0.0, 1.0,0.0);//旋转矩阵R1
         glTranslatef(2.0, 0.0, 0.0);//平移矩阵T
         glRotatef(day, 0.0, 1.0, 0.0);//旋转矩阵R2

         glutWireSphere(0.2, 10, 8);//draw earth


 

 三维观察原理类似于拍一张照片的过程。(类似于red book )

第一步是将照相机调整位置置于三角架上;
第二步是 将物体调整位置放在相机的视野当中。实际上,相机和三维物体是相对位置,相机移动位置也可以理解为物体反向移动位置,因此这两步可以理解为一步,即调整三 维物体和视点的位置,将世界坐标系下的物体变换到观察坐标系下。在计算机图形学中,定义模型矩阵(Modeling Matrix)实现了三维图形的几何变换,即平移、旋转和缩放。
第三步相机进行调焦以便看清楚物体,并按下快门将三维物体投影在二维胶片上;在计算机图形学中,定义相应的投影矩阵(ProjectionMatrix),进行投影变换,把三维物体从观察坐标系转换到投影坐标系中。
第四步是胶片的冲洗和裁剪。相应计算机图形学中,定义视口矩阵(ViewingMatrix),进行视口变换和裁剪,决定二维图象的大小。将物体从二维投影坐标系下转换到设备坐标系下。
这样,一个三维空间里的物体被投影到二维平面上了,也就能在二维的计算机屏幕上正确显示了。

屏幕坐标点 = 3D 模型点 * 几何变换栈矩阵(n...1) * 投影变换栈矩阵(n...1)
OpenGL 维护两个栈: 投影变换栈, 几何变换栈。
投影:glOrtho,gluPerspective--------------------glMatrixMOde(GL_PROJECTION);
几何变换:glTranslatef,glRotatef,glScalef--------glMatrixMOde(GL_MODELVIEW);

  http://my.sdlgame.com/content/view/336/6.html

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:120495次
    • 积分:2073
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:30篇
    • 译文:1篇
    • 评论:24条
    文章分类
    最新评论
    LINUX学习