OpenGL学习(三):坐标变换
2016-10-16 15:17
246 查看
矩阵操作,单位矩阵
在进行平移,旋转,缩放变换时,所有的变换都是针对当前的矩阵(与当前矩阵相乘),如果需要将当前矩阵回复最初的无变换的矩阵,可以使用单位矩阵(无平移,缩放,旋转)。
在栈中保存当前矩阵和从栈中恢复所存矩阵,可以使用
和
在进行坐标变换的一个好习惯是在变换前使用glPushMatrix保存当前矩阵,完成坐标变换操作后,再调用glPopMatrix恢复原先的矩阵设置。
步骤一、在OpenGLGLRenderer的OnDrawFrame方法中
步骤二、log日志
步骤三、效果图
在进行平移,旋转,缩放变换时,所有的变换都是针对当前的矩阵(与当前矩阵相乘),如果需要将当前矩阵回复最初的无变换的矩阵,可以使用单位矩阵(无平移,缩放,旋转)。
public abstract void glLoadIdentity()。
在栈中保存当前矩阵和从栈中恢复所存矩阵,可以使用
public abstract void glPushMatrix()
和
public abstract void glPopMatrix()。
在进行坐标变换的一个好习惯是在变换前使用glPushMatrix保存当前矩阵,完成坐标变换操作后,再调用glPopMatrix恢复原先的矩阵设置。
步骤一、在OpenGLGLRenderer的OnDrawFrame方法中
添加 //3D坐标转换 ThrereDLocationConvert(gl); /** * 3D坐标转换 * * @param gl */ private void ThrereDLocationConvert(GL10 gl) { //清除屏幕和深度缓冲。 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); //重置投影矩阵 gl.glLoadIdentity(); /*******************第一个矩形 A **********************/ /** * 因为OpenGL ES从当前位置开始渲染,缺省坐标为(0,0,0),和View port 的坐标一样, * 相当于把画面放在眼前,对应这种情况OpenGL不会渲染离view Port很近的画面, * 因此我们需要将画面向后退一点距离: * * 此操作没有的话,Square不会显示 */ gl.glTranslatef(0, 0, -10); // 正方形 A 保存当前矩阵 gl.glPushMatrix(); //逆时针旋转正方形 Log.d("angle", "A--angle==>" + angle); gl.glRotatef(angle, 0, 0, 1); //画Square square.draw(gl); //******恢复过去的矩阵。***** gl.glPopMatrix(); /*******************第二个矩形 B**********************/ // 正方形 B 保存当前矩阵 gl.glPushMatrix(); //正方形A之前它旋转,使其旋转。 Log.d("angle", "B--angle==>" + angle); gl.glRotatef(-angle, 0, 0, 1); //移动正方形B gl.glTranslatef(2, 0, 0); //缩小为正方形A的50% gl.glScalef(0.5f, 0.5f, 0.5f); //画Square square.draw(gl); /**********************第三个矩形 C********************/ // 正方形 C 保存当前矩阵 gl.glPushMatrix(); // 正方形B之前它旋转,使其旋转。 Log.d("angle", "C--angle==>" + angle); gl.glRotatef(-angle, 0, 0, 1); //移动正方形C gl.glTranslatef(2, 0, 0); //缩小为正方形B的50% gl.glScalef(0.5f, 0.5f, 0.5f); //围绕它旋转的中心。 gl.glRotatef(angle * 10, 0, 0, 1); //画Square square.draw(gl); /************************************************/ /** * 在这里要注意,恢复矩阵位置。 */ //在正方形C之前恢复矩阵 gl.glPopMatrix(); //在正方形B之前恢复矩阵 gl.glPopMatrix(); angle++; }
步骤二、log日志
步骤三、效果图
相关文章推荐
- 《OpenGL游戏程序设计》学习笔记---第五章坐标变换和OpenGL矩阵
- OpenGl学习之坐标变换(上)
- OpenGL学习脚印: 坐标变换过程(vertex transformation)
- OpenGl学习之坐标变换(下)
- OpenGL学习脚印: 坐标和变换的数学基础(math-coordinates and transformations)
- 《OpenGL游戏程序设计》学习笔记---第五章坐标变换和OpenGL矩阵
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(9)----变换和坐标系统
- OpenGL学习:坐标变换(1)-模型变换(model transformation)
- OpenGL坐标变换
- 基于VC++的OpenGL编程讲座之坐标变换(2)
- OPENGL 变换_视图模型变换与部分透视变换_学习笔记
- openGL 坐标的基本变换
- opengl中的坐标变换
- OpenGl学习笔记3——屏幕坐标(2维)转化为世界坐标(3维)
- ArchieOpenGL基础教程第七课:坐标变换
- OpenGL坐标变换专题
- 【GPU编程】《The Cg Tutorial》学习之坐标变换(Transformation) .
- OPENGL 点击与选取的基础---坐标变换
- 【转载】OPENGL坐标变换
- OpenGL学习二——四种变换