Android OpenGL ES 知识总览2——坐标系

坐标变换

在3D坐标空间中,用于表示图形的数据一定包含位置信息 ( x , y , z ) (x,y,z) (x,y,z),但是除此之外,还要有一个量用于标定用户视角与被观测物体的距离关系,用户视角由成为摄像机Camera,因此需要增加一个维度取名叫 w w w,那么着色器的坐标gl_Position就会多增加一个量成为一个四维向量 ( x , y , z , w ) (x,y,z,w) (x,y,z,w)。 这套OpenGL的坐标系统被称为归一化设备坐标。既然 w w w分量定义了视角关系,那么它相当于定义了一个距离空间,这个空间要求 ( x , y , z ) (x,y,z) (x,y,z)这三个分量的都要在 ( − w , w ) (-w,w) (w,w)的范围内取值,这个空间被称为剪裁空间

透视除法

由于 w w w用来表示点对摄像机的距离,那么对于一个正方体来说,这个正方体看起来就不那么“正”了,对于一个正方体来说,每个点的属性除了 ( x , y , z ) (x,y,z) (x,y,z)还增加了距离 w w w,并且在绘制时还增加了一个步骤,绘制最终位置时实际上做了一个操作 ( x w , y w , z w ) (\frac{x}{w},\frac{y}{w},\frac{z}{w}) (wx,wy,wz),使得最终点的位置是一个近大远小的透视化正方体。

一般一个正方体,在笛卡尔坐标轴上,正常的显示是一个这样的:

没有摄像机透视关系的正方体存在摄像机透视关系的正方体,看不出正方体前后两个面相对于摄像机的距离关系。

而增加了透视关系之后,则有了对于摄像机来说近大远小的关系,如下:

存在摄像机透视关系的正方体,能看的出正方体的两个面有着相当明显的距离存在摄像机透视关系的正方体,能看的出正方体的两个面有着相当明显的距离。
最终我们不会因为 z z z轴的数值多增加了一个相对的观测距离这个意义,而是让观测作为一个单独的位置分量,而不是让距离这个属性影响物体所在位置的 z z z坐标分量。

指定ViewPort参数

我们之前已经调用过了GL10.glViewport(0, 0, width, height),这个视口指定了OpenGL视口要绘制的起点坐标与宽高,最终绘制的坐标都只要接收 ( − 1 , 1 ) (-1,1) (1,1)范围内的坐标值,这样就可以统一限定与设备无关的坐标值。

视口坐标系

ViewPort视口坐标系从顶点着色器坐标点到透视图的渲染经历以下流程:

顶点着色器
裁剪坐标
透视分割
视口变换
光栅化窗口

裁剪过程将会把符合 { x ∣ − w ≤ x ≤ w } \{x|-w\leq x \leq w\} {xwxw}, { y ∣ − w ≤ y ≤ w } \{y|-w\leq y \leq w\} {ywyw}, { z ∣ − w ≤ z ≤ w } \{z|-w\leq z \leq w\} {zwzw} 条件的点集经过透视除法组成的空间绘制出来,不符合条件的不予绘制。

纹理坐标系

OpenGL可以由图像、或者某个数学算法生成的分型数据,每个二维纹理都有小的纹理元素(texel)组成,我们最常见的纹理就是从图片文件加载数据。每个二维纹理坐标范围都是 ( 0 , 1 ) (0,1) (0,1),因此坐标范围是从原点 ( 0 , 0 ) (0,0) (0,0)到右上角 ( 1 , 1 ) (1,1) (1,1)。在OpenGL ES 2.0中,纹理的每个维度必须是2的幂。纹理的维度用字母表示为 ( s , t , r ) (s,t,r) (s,t,r)
在这里插入图片描述
2D纹理可以用于存储2D图像的动画序列。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值