OpenGLES 1.x相比于OpenGLES 2.x和3.x,不用写着色器,方便许多,今天闲着没事,就写几个类
不过貌似有点问题,难道是我使用方式不对???
这个先留着当模板,寒假写个OpenGLES 3.x的
Camera.java
package com.Diamond.gl10try; import android.opengl.*; import android.renderscript.Float3; import android.opengl.Matrix; import android.opengl.GLES11; import android.renderscript.Matrix4f; import android.util.Log; public class Camera { private Float3 m_eye; private Float3 m_center; private Float3 m_up; public Camera() { m_eye = new Float3(); m_center = new Float3(0.0f,0.0f,-1.0f); m_up = new Float3(0.0f,1.0f,0.0f); } public Camera(Float3 eye,Float3 center,Float3 up) { m_eye = eye; m_center = center; m_up = up; } public Camera setEye(Float3 value) { m_eye = value; return this; } public Camera setCenter(Float3 value) { m_center = value; return this; } public Camera setUp(Float3 value) { m_up = value; return this; } public Float3 getEye() { return m_eye; } public Float3 getCenter() { return m_center; } public Float3 getUp() { return m_up; } public Camera forward(float l) { m_eye.z = m_eye.z + l; return this; } public Camera back(float l) { return forward(-l); } public Camera up(float l) { m_eye.y = m_eye.y + l; return this; } public Camera down(float l) { return up(-l); } public Camera left(float l) { m_eye.x = m_eye.x + l; return this; } public Camera right(float l) { return left(-l); } public static Matrix4f getProjection(float fovy,float aspect,float near,float far) { Matrix4f matrix = new Matrix4f(); matrix.loadIdentity(); matrix.loadPerspective(fovy,aspect,near,far); return matrix; } public Matrix4f getView() { float[] matrix = new float[16]; Matrix.setLookAtM(matrix,0,m_eye.x,m_eye.y,m_eye.z,m_center.x,m_center.y,m_center.z,m_up.x,m_up.y,m_up.z); return new Matrix4f(matrix); } public Camera updateCamera() { Matrix4f matrix = this.getProjection(120.0f,0.5f,0.1f,100.0f); matrix.multiply(getView()); GLES11.glMatrixMode(GLES11.GL_PROJECTION); GLES11.glLoadIdentity(); GLES11.glMultMatrixf(matrix.getArray(),0); return this; } }
Object.java
package com.Diamond.gl10try; import com.Diamond.gl10try.Vertex; import android.opengl.*; import android.renderscript.Float3; import android.renderscript.Matrix4f; import android.opengl.GLES11; import java.nio.FloatBuffer; import java.nio.ByteBuffer; import java.nio.ByteOrder; public class Object { private Float3 m_position; private Float3 m_rotate; private Float3 m_scale; private float[] m_vertices; private float[] m_color; public Object() { m_position = new Float3(); m_rotate = new Float3(); m_scale = new Float3(); m_vertices = null; m_color = null; } public Object(float[] ver) { m_position = new Float3(); m_rotate = new Float3(); m_scale = new Float3(); m_vertices = ver; m_color = null; } public Object(float[] ver,float[] col) { m_position = new Float3(); m_rotate = new Float3(); m_scale = new Float3(); m_vertices = ver; m_color = col; } public Object setVertices(float[] ver) { m_vertices = ver; return this; } public float[] getVertices() { return m_vertices; } public Object setColor(float[] col) { m_color = col; return this; } public float[] getColor() { return m_color; } public Object translate(Float3 value) { m_position = value; return this; } public Object rotate(Float3 value) { m_rotate = value; return this; } public Object scale(Float3 value) { m_scale = value; return this; } public Float3 getTranslate() { return m_position; } public Float3 getRotate() { return m_rotate; } public Float3 getScale() { return m_scale; } public Matrix4f getModelView() { Matrix4f modelview = new Matrix4f(); modelview.loadIdentity(); modelview.translate(m_position.x,m_position.y,m_position.z); modelview.rotate(m_rotate.x,1.0f,0.0f,0.0f); modelview.rotate(m_rotate.y,0.0f,1.0f,0.0f); modelview.rotate(m_rotate.z,0.0f,0.0f,1.0f); modelview.scale(m_scale.x,m_scale.y,m_scale.z); return modelview; } public Object setModelView() { GLES11.glMatrixMode(GLES11.GL_MODELVIEW); GLES11.glLoadIdentity(); GLES11.glMultMatrixf(getModelView().getArray(),0); return this; } public Object setModelView2() { GLES11.glMatrixMode(GLES11.GL_MODELVIEW); GLES11.glLoadIdentity(); GLES11.glTranslatef(m_position.x,m_position.y,m_position.z); GLES11.glRotatef(m_rotate.x,1.0f,0.0f,0.0f); GLES11.glRotatef(m_rotate.y,0.0f,1.0f,0.0f); GLES11.glRotatef(m_rotate.z,0.0f,0.0f,1.0f); GLES11.glScalef(m_scale.x,m_scale.y,m_scale.z); return this; } public static FloatBuffer getBuffer(float[] array) { ByteBuffer bb = ByteBuffer.allocateDirect(array.length * 4); bb.order(ByteOrder.nativeOrder()); FloatBuffer fb = bb.asFloatBuffer(); fb.put(array); fb.position(0); return fb; } public Object enableCilent() { GLES11.glEnableClientState(GLES11.GL_VERTEX_ARRAY); GLES11.glVertexPointer(3,GLES11.GL_FLOAT,0,this.getBuffer(m_vertices)); if(m_color != null) { GLES11.glEnableClientState(GLES11.GL_COLOR_ARRAY); GLES11.glColorPointer(4,GLES11.GL_FLOAT,0,this.getBuffer(m_color)); } return this; } public Object disableClient() { GLES11.glDisableClientState(GLES11.GL_VERTEX_ARRAY); GLES11.glDisableClientState(GLES11.GL_VERTEX_ARRAY); return this; } }
Vertex.java
package com.Diamond.gl10try; import android.renderscript.Float3; import android.renderscript.Float2; public class Vertex { public Float3 position; public Float3 normal; public Float2 texCoord; public Vertex() { position = new Float3(); normal = new Float3(); texCoord = new Float2(); } public Vertex(Float3 pos) { position = pos; normal = new Float3(); texCoord = new Float2(); } public Vertex(Float3 pos,Float3 nor) { position = pos; normal = nor; texCoord = new Float2(); } public Vertex(Float3 pos,Float2 tex) { position = pos; normal = new Float3(); texCoord = tex; } public Vertex(Float3 pos,Float3 nor,Float2 tex) { position = pos; normal = nor; texCoord = tex; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)