Draw a Triangle using OpenGL
Description
The following code shows how to Draw a Triangle using OpenGL.
Example
Main Activity Java code
package com.java2s.myapplication4.app;
//from www. j a v a 2 s . co m
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.opengles.GL10;
class Triangle {
private FloatBuffer vertexBuffer;
private float vertices[] = {
100.0f, 150.0f, 0.0f, // V1 - first vertex (x,y,z)
219.0f, 150.0f, 0.0f, // V2 - second vertex
160.0f, 279.0f, 0.0f // V3 - third vertex
};
public Triangle() {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * 3 * 4);
byteBuffer.order(ByteOrder.nativeOrder());
vertexBuffer = byteBuffer.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.flip();
}
public void draw(GL10 gl) {
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, vertices.length / 3);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
}
public class MainActivity extends Activity {
private GLSurfaceView glView;
private Triangle triangle;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
glView = new GLSurfaceView(this);
glView.setRenderer(new MyOpenGLRenderer());
setContentView(glView);
}
class MyOpenGLRenderer implements Renderer {
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
Log.d("MyOpenGLRenderer", "Surface changed. Width=" + width + " Height=" + height);
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, 320, 0, 480, 1, -1);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
Log.d("MyOpenGLRenderer", "Surface created");
triangle = new Triangle();
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClearColor(0.0f, 0.5f, 0.0f, 1f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
triangle.draw(gl);
}
}
}