OpenGL(5)——变换】的更多相关文章

OpenGL光照开启时,法向量用于决定特定顶点或面上接受到光照的多少.光照处理过程作用于观察坐标空间,因此,模型对象坐标系的法向量也需要使用GL_MODELVIEW矩阵变换到观察坐标系. 然而,法向量与顶点的变换方式不同.我们不能够简单将GL_MODELVIEW矩阵与法线相乘.设想顶点(0,0,0)的法向量(1,0,0).如果GL_MODELVIEW矩阵为沿Y轴移动2个单位,顶点坐标将为(0,2,0).不过,法线依旧为相同的(1,0,0),而不是(1,2,0). 为了理解法向量如何变换到观察空间…
视图变换在opengl中,视图变换的输入是:(1)眼睛位置(或者说相机位置)eys:(2)眼睛朝向的中心center,(就是眼睛朝哪里看);(3)头的方向up.任何一点经过视图变换后都会转化到眼睛坐标系下.具体地说,眼睛坐标系的三个轴分别是:(1)z轴: F=center-eye;(要归一化)(2)x轴: S=cross(F,up);(这里是叉乘,也要归一化)(3)y轴: U=cross(S,F).此时,eye的位置就是原点了.那么对于任意一点P(px,py,pz),在新坐标下的三个点分别是:p…
笔者接触OpenGL最大的困难是: 经常调试一份代码时, 屏幕漆黑一片, 也不知道结果对不对,不知道如何是好! 这其实就是关于OpenGL"变换"的基础概念没有掌握好, 以至于对"将三维体正确的显示在屏幕上指定位置"这样的操作都无法完成. OpenGL变换包括计算机图形学中最基本的三维变换,即几何变换.投影变换.裁剪变换.视口变换,以及针对OpenGL的特殊变换概念理解和用法,如相机模拟.矩阵堆栈等,这些基础是开始真正走进三维世界无法绕过的基础. 所以笔者在前面花了…
关于OpenGL中判断一个点是否可见,可以分成两种情况讨论:点在2D空间中和3D空间中的时候.并且"在2D空间中"可以看作"在3D空间中"的特殊情况. 温馨提示: 1. 以下讨论以现代OpenGL为基础,如果您只会旧OpenGL,请先学习一些与本文相关的现代OpenGL知识. 2. 文中除vertex shader以外的代码可以认为是GLSL. 2D空间 如果是2D空间,就很好判断了.这里再分成几种情况. 1. 已知原始顶点坐标,没有矩阵变换 设有如下vertex…
我们先引入关于"矩阵堆栈"的官方说法: OpenGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域.实际上,在创建.装入.相乘模型变换和投影变换矩阵时,都已用到堆栈操作.一般说来,矩阵堆栈常用于构造具有继承性的模型,即由一些简单目标构成的复杂模型.例如,一辆自行车就是由两个轮子.一个三角架及其它一些零部件构成的.它的继承性表现在当自行车往前走时,首先是前轮旋转,然后整个车身向前平移,接着是后轮旋转,然后整个车身向前平移,如此进行下去,这样自行车就往前走了.矩阵堆栈对复杂模型…
OpenGL ES 构建的三维空间,其中的三维实体由许多的三角形拼接构成.如下图左侧所示的三维实体圆锥,其由许多三角形按照一定规律拼接构成.而组成圆锥的每一个三角形,其任意一个顶点由三维空间中 x.y.z 三个坐标分量来定义. 对于我们日常使用的移动手持设备,手机屏幕窗口由不连续的有限的二维像素小格子构成的,每一个像素格子有x.y两个分量来定义. 因此在OpenGL ES绘制流程中,其主要工作是将三维空间中的坐标点(x,y,z)构成的三维图形,转化为手机屏幕上的二维像素点. 这个转化过程主要分为…
概述 OpenGL变换矩阵 实例:GL_MODELVIEW矩阵 实例:GL_PROJECTION矩阵 概述 OpenGL管线中,在光栅化操作之前,包括顶点位置与法线向量的几何数据经顶点操作与图元装配操作进行变换. 模型坐标 它是模型对象的局部坐标系,同时也是任何变换之前模型对象的初始位置与朝向.为了变换模型对象,可以使用glRotatef().glTranslatef().glScalef(). 观察坐标 它由模型坐标乘以GL_MODELVIEW矩阵产生.在OpenGL中,可以使用GL_MODE…
l 前提: 0x01. 假设绘制顶点的语句为Draw Array,变换的语句(旋转.平移.缩放)为M,而 M0; M1; M2; Draw Array; 则称对Array先进行M2再进行M1.M0 0x02. 本文基于SharpGL版本的OpenGL(C#版本) l 预备知识: 0x01. gl.Rotate是按照右手系来计算的,即设旋转轴为大拇指方向,则从指跟到指尖的方希为正方向. 0x02. gl.Scale 会改变法向量的值,从而会对颜色有影响.通过gl.Enable(OpenGL.GL_…
本节是OpenGL学习的第九个课时,下面将详细介绍OpenGL的多种3D变换和如何操作矩阵堆栈.     (1)3D变换: OpenGL中绘制3D世界的空间变换包括:模型变换.视图变换.投影变换和视口变换. 现实世界是一个3维空间,如果我们要观察一个物体,我们可以: .从不同的位置去观察它.(视图变换) .移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它.(模型变换) .如果把物体画下来,我们可以选择:是否需要一种“近大远小”的透视效果.另外,我们可能只希望看到物体的一…
前面两节内容已经说完了所有的三种变换.也就是说我们现在程序里面既不需要glLookAt(),也不需要gluPerspective(),这些矩阵我们都可以自己写.然后,再用glMultMatrix()来调用这些矩阵,注意一点就是OpenGL是左乘,前面给出的矩阵都是右乘矩阵,所以调用的时候需要转置,摆放的位置也要注意.当然,如果用shader的话,这些函数也就用不到了,矩阵顺序也可以自己定义.这里所有的变换都是作用在顶点(Vertex)上的,但是还有一类数据需要进行变换,那就是顶点法线.我们在计算…