OpenGL es2.0 配置自己的matrix
来源:互联网 发布:ape转mp3软件 编辑:程序博客网 时间:2024/06/05 08:48
</pre><pre name="code" class="java">package com.gzdxid.utils;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.nio.FloatBuffer;import android.opengl.Matrix;public class MatrixState { private static float[] mProjMatrix = new float[16];//4x4矩阵 投影用 private static float[] mVMatrix = new float[16];//摄像机位置朝向9参数矩阵 private static float[] currMatrix;//当前变换矩阵 public static float[] lightLocation=new float[]{0,0,0};//定位光光源位置 public static FloatBuffer cameraFB; public static FloatBuffer lightPositionFB; //保护变换矩阵的栈 static float[][] mStack=new float[10][16]; public static int stackTop=-1; public static void setInitStack()//获取不变换初始矩阵 { currMatrix=new float[16]; Matrix.setRotateM(currMatrix, 0, 0, 1, 0, 0); } public static void pushMatrix()//保护变换矩阵 { stackTop++; for(int i=0;i<16;i++) { mStack[stackTop][i]=currMatrix[i]; } } public static void popMatrix()//恢复变换矩阵 { for(int i=0;i<16;i++) { currMatrix[i]=mStack[stackTop][i]; } stackTop--; } public static void translate(float x,float y,float z)//设置沿xyz轴移动 { Matrix.translateM(currMatrix, 0, x, y, z); } public static void rotate(float angle,float x,float y,float z)//设置绕xyz轴移动 { Matrix.rotateM(currMatrix,0,angle,x,y,z); } public static void scale(float x,float y,float z) { Matrix.scaleM(currMatrix,0, x, y, z); } //插入自带矩阵 public static void matrix(float[] self) { float[] result=new float[16]; Matrix.multiplyMM(result,0,currMatrix,0,self,0); currMatrix=result; } //设置摄像机 static ByteBuffer llbb= ByteBuffer.allocateDirect(3*4); static float[] cameraLocation=new float[3];//摄像机位置 public static void setCamera ( float cx,//摄像机位置x float cy, //摄像机位置y float cz, //摄像机位置z float tx, //摄像机目标点x float ty, //摄像机目标点y float tz, //摄像机目标点z float upx, //摄像机UP向量X分量 float upy, //摄像机UP向量Y分量 float upz //摄像机UP向量Z分量 ) { Matrix.setLookAtM ( mVMatrix, 0, cx, cy, cz, tx, ty, tz, upx, upy, upz ); cameraLocation[0]=cx; cameraLocation[1]=cy; cameraLocation[2]=cz; llbb.clear(); llbb.order(ByteOrder.nativeOrder());//设置字节顺序 cameraFB=llbb.asFloatBuffer(); cameraFB.put(cameraLocation); cameraFB.position(0); } //设置透视投影参数 public static void setProjectFrustum ( float left,//near面的left float right, //near面的right float bottom, //near面的bottom float top, //near面的top float near,//near面距离 float far //far面距离 ) { Matrix.frustumM(mProjMatrix, 0, left, right, bottom, top, near, far); } //设置正交投影参数 public static void setProjectOrtho ( float left,//near面的left float right, //near面的right float bottom, //near面的bottom float top, //near面的top float near,//near面距离 float far //far面距离 ) { Matrix.orthoM(mProjMatrix, 0, left, right, bottom, top, near, far); } //用于一帧内的摄像机矩阵 private static float[] mVMatrixForSpecFrame = new float[16];//摄像机位置朝向9参数矩阵 public static void copyMVMatrix() {for(int i=0;i<16;i++) { mVMatrixForSpecFrame[i]=mVMatrix[i]; } } //获取具体物体的总变换矩阵 static float[] mMVPMatrix=new float[16]; public static float[] getFinalMatrix() { Matrix.multiplyMM(mMVPMatrix, 0, mVMatrixForSpecFrame, 0, currMatrix, 0); Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0); return mMVPMatrix; } //获取具体物体的变换矩阵 public static float[] getMMatrix() { return currMatrix; } //设置灯光位置的方法 static ByteBuffer llbbL = ByteBuffer.allocateDirect(3*4); public static void setLightLocation(float x,float y,float z) { llbbL.clear(); lightLocation[0]=x; lightLocation[1]=y; lightLocation[2]=z; llbbL.order(ByteOrder.nativeOrder());//设置字节顺序 lightPositionFB=llbbL.asFloatBuffer(); lightPositionFB.put(lightLocation); lightPositionFB.position(0); }}
0 0
- OpenGL es2.0 配置自己的matrix
- opengl es2.0之Matrix.setLookAtM解析
- OpenGL ES2.0教程:编写自己的shader(2)
- OpenGL ES2.0教程:编写自己的shader(2)
- OpenGL ES2.0教程:编写自己的shader
- Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)
- OpenGL ES2.0教程:编写自己的shader(2)
- Android openGL ES2.0 Matrix.frustumM和Matrix.setLookAtM解析
- Android openGL ES2.0 Matrix.frustumM和Matrix.setLookAtM解析
- Android openGL ES2.0 Matrix.frustumM和Matrix.setLookAtM解析
- 如何配置OpenGL ES的上下文(OpenGL ES2.0官方文档翻译)
- 如何配置OpenGL ES的上下文(OpenGL ES2.0官方文档翻译)
- 如何配置OpenGL ES的上下文(OpenGL ES2.0官方文档翻译)
- OpenGL ES2.0的IndexBuffer注意事项
- OpenGL ES2.0的一些总结
- 初识openGL ES2.0
- OpenGL ES2.0 初步
- OpenGL ES2.0基础
- 安装PredictionIO-0.9.1
- android-async-http详解
- C/C++编译的程序占用的内存
- (Hadoop datanode 问题)There are 0 datanode(s) running and no node(s) are excluded in this operation
- Android项目目录结构
- OpenGL es2.0 配置自己的matrix
- tomcat7安装以及环境变量配置
- java实现给图片添加水印
- 再学JavaScript-第一课
- MAC下secretCRT使用技巧(转)
- Well begun,half done
- parcelable和serializable 的区别。
- 较好的视频分辨率与码率组合,里面的码率写得偏高
- 简单计算器