- 138
- 0
- 约7.07千字
- 约 35页
- 2018-01-13 发布于天津
- 举报
第3章几何对象和变换 邹昆 cszoukun@ 例子 在二维空间中画3个点: 顶点数组: point2 points[] = { point2(0.0, 1.0); point2(-1.0, -1.0); point2(1.0, -1.0); } 如果要画出右图(b)中的样子该如何使用变换? OpenGL中通过矩阵相乘来修改当前矩阵,注意最右边的矩阵对应最先应用于顶点的变换。 mat4 modelView; //定义模视矩阵,初始为恒等矩阵 modelView = modelView * Translate(1.0, 3.0, 0.0); modelView = modelView * Rotate(-90.0, 0.0, 0.0, 1.0) /*将modelView传给顶点shader,在顶点shader中用modelView右乘顶点坐标即得到变换后的坐标*/ glDrawArrays(GL_POINTS, 0, 3); // 绘制三个点 模视变换后的顶点坐标为照相机坐标系下的坐标 为Shader中uniform矩阵变量传值 在Shader中mat4为按列存储的二维数组,而mat.h中的mat4为按行存储的,因此在传值时需要进行转置。 void?glUniformMatrix4fv(GLint ?location, // uniform矩阵变量索引?GLsizei ?count,? // 传递的矩阵个数GLboolean ?transpose, // 是否转置? const GLfloat *?value // 传递的矩阵 ); class MatrixStack { // 矩阵栈类 int _index; // 当前栈顶索引 int _size; // 矩阵栈能最多容纳的矩阵数 mat4* _matrices; // 存放栈内矩阵 public: MatrixStack( int numMatrices = 32 ):_index(0), _size(numMatrices) { _matrices = new mat4[numMatrices]; } ~MatrixStack() { delete[] _matrices; } void push( const mat4 m ) { // 压栈函数 assert( _index + 1 _size ); _matrices[_index++] = m; } mat4 pop( void ) { // 出栈函数,返回栈顶矩阵 assert( _index - 1 = 0 ); _index--; return _matrices[_index]; } }; 另一例子 练习:设画左图的函数为drawF()(顶点数组中坐标为左图中坐标,用glDrawArrays进行绘制),给出画右图的OpenGL指令。 从另一角度看组合变换 之前画3个点的例子中指定变换的代码: mat4 modelView; //定义模视矩阵,初始为恒等矩阵 modelView = modelView * Translate(1.0, 3.0, 0.0); modelView = modelView * Rotate(-90.0, 0.0, 0.0, 1.0) 变换与三个坐标系的关系 建模——三个点的坐标指定——使用建模坐标系(对象坐标系) 实例化——将对象以所希望的大小、位置和朝向放置到场景中(此时考虑问题采用世界坐标系) 如果直接绘制三个点,则以标准尺寸、朝向画在世界坐标系原点 显然应该对其做变换(实例化变换) 定位照相机——此时考虑问题采用照相机坐标系,且照相机位于原点,面朝负z轴。 如直接绘制场景,则照相机坐标系与世界坐标系重合,即照相机也位于世界坐标系原点。 要获取不同视角:对场景所有物体做变换,意味着该变换放置在所有物体绘制的前面。 从变换作用于坐标系的角度来看 mat4 modelView; //定义模视矩阵,初始为恒等矩阵 modelView = modelView * Translate(1.0, 3.0, 0.0); modelView = modelView * Rotate(-90.0, 0.0, 0.0, 1.0) 练习:从变换作用于坐标系的角度理解之前画两个三角形的代码。画出变换过程中局部坐标系的图示。 变换与三个坐标系的关系 按代码顺序: 首先工作在照相机坐标系:
您可能关注的文档
最近下载
- ZXM10 EISU(V1.0)增强智能型采集单元用户手册.pdf VIP
- 统编版(2024)一年级语文下册11浪花课件.pptx VIP
- 语文-江西省吉安市2025届高三上学期1月期末教学质量检测试题和答案.docx VIP
- 物理-江西省吉安市2025届高三上学期1月期末教学质量检测试题和答案.docx VIP
- 英语-江西省吉安市2025届高三上学期1月期末教学质量检测试题和答案.docx VIP
- 2022年度(江苏)高考数学真题(带答案).pdf VIP
- 浙江省温州市2025年七年级上学期期末数学试卷附答案.pdf VIP
- 大气降水的同位素水文学-第3讲-2011版本.pdf VIP
- 02J331_地沟及盖板图集.docx
- 政府机关物业管理服务保洁服务工作计划及操作规程服务方案.docx VIP
原创力文档

文档评论(0)