OpenGL中的坐标系

这篇博客主要介绍了OpenGL中的坐标系,包括世界坐标系、当前绘图坐标系以及眼坐标、设备坐标等六种坐标系的定义和转换。博主强调了在二维问题中坐标系的不同设定,并解释了OpenGL中的模型视图转换。文章旨在帮助读者理解OpenGL坐标系统的复杂性和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习OpenGL,但是书中的各种坐标系搞得我颇为痛苦,既不知道各种坐标系是做什么用的,也不知道各自是如何转换的,往往是看书看到吐。一番纠结之后,还是得自己去找资料解决,下面就把我个人学到的各种坐标系的知识分享出来,省的后来人跟我一样痛苦了。

首先声明一点,对于三维物体,openGL使用右手坐标,从左到右,x递增,从下到上,y递增,从远到近,z递增。

但是对于二维问题,在OpenGL中x轴与y轴的正方向分别是向右和向上,也就是说可以把屏幕左下角设为原点,这样屏幕中的点坐标都为正值。但是对于GLUT实用工具集来说,由于它经常与窗口进行交互,x轴与y轴的正方向分别是向右和向下,也就是说想使屏幕中点的坐标都为正值,我们需要把屏幕的左上角设为原点。所以编程时经常需要考虑两种坐标系,挺麻烦的。

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

  • 世界坐标系以屏幕中心为原点(0, 0, 0)。你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。长度单位这样来定: 窗口范围按此单位恰好是(-1,-1)到(1,1)。注意:世界坐标系是始终固定不变的。
  • 当前绘图坐标系是 绘制物体时的坐标系。程序刚初始化时,世界坐标系和当前绘图坐标系是重合的。当用glTranslatef()glScalef()glRotatef()对当前绘图坐标系进行平移、伸缩、旋转变换之后,世界坐标系和当前绘图坐标系不再重合。改变以后,再用glVertex3f()等绘图函数绘图时,都是在当前绘图坐标系进行绘图,所有的函数参数也都是相对当前绘图坐标系来讲的。

总的来说OpenGL中存在6种坐标系:

  1. Object or model coordinates
  2. World coordinates
  3. Eye (or Ca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值