public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); GLSurfaceView view = new GLSurfaceView(this); view.setRenderer(new SquareRenderer(true)); setContentView(view); } //Square.javapublic class Square { private FloatBuffer mFVertexBuffer; private ByteBuffer mColorBuffer; private ByteBuffer mIndexBuffer; public Square() { float vertices[] = { -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f }; byte maxColor = (byte) 255; byte colors[] = { maxColor, maxColor, 0, maxColor, 0, maxColor, maxColor, maxColor, 0, 0, 0, maxColor, maxColor, 0, maxColor, maxColor }; byte indices[] = { 0, 3, 1, 0, 2, 3 }; ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); vbb.order(ByteOrder.nativeOrder()); mFVertexBuffer = vbb.asFloatBuffer(); mFVertexBuffer.put(vertices); mFVertexBuffer.position(0); mColorBuffer = ByteBuffer.allocateDirect(colors.length); mColorBuffer.put(colors); mColorBuffer.position(0); mIndexBuffer = ByteBuffer.allocateDirect(indices.length); mIndexBuffer.put(indices); mIndexBuffer.position(0); } public void draw(GL10 gl) { gl.glFrontFace(GL11.GL_CW); gl.glVertexPointer(2,GL11.GL_FLOAT,0,mFVertexBuffer); gl.glColorPointer(4,GL11.GL_UNSIGNED_BYTE,0,mColorBuffer); gl.glDrawElements(GL11.GL_TRIANGLES,6,GL11.GL_UNSIGNED_BYTE,mIndexBuffer); gl.glFrontFace(GL11.GL_CCW); } } class SquareRenderer implements GLSurfaceView.Renderer { private boolean mTranslucentBackground; private Square mSquare; private float mTransY; private float mAngle; public SquareRenderer(boolean useTranslucentBackground) { mTranslucentBackground = useTranslucentBackground; mSquare = new Square(); } public void onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); gl.glTranslatef(0.0f,(float)Math.sin(mTransY),-3.0f); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_COLOR_ARRAY); mSquare.draw(gl); mTransY += .075f; } public void onSurfaceChanged(GL10 gl,int width,int height) { gl.glViewport(0,0,width,height); float ratio = (float)width/height; gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glFrustumf(-ratio,ratio,-1,1,1,10); } public void onSurfaceCreated(GL10 gl, EGLConfig config) { gl.glDisable(GL10.GL_DITHER); gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST); if(mTranslucentBackground) gl.glClearColor(0,0,0,0); else gl.glClearColor(1,1,1,1); gl.glEnable(GL10.GL_CULL_FACE); gl.glShadeModel(GL10.GL_SMOOTH); gl.glEnable(GL10.GL_DEPTH_TEST); } }
opengles
最新推荐文章于 2022-02-10 15:27:57 发布