private FloatBuffer vertsBuffer;
private ShortBuffer indicesBuffer;
l = new OBJLoader(c);
l.load(R.raw.cu);
verts = l.vertexArray;
index = l.indexArray;
number = l.numVertices;
vertsBuffer = ByteBuffer.allocateDirect(verts.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
vertsBuffer.put(verts).position(0);
indicesBuffer = ByteBuffer.allocateDirect(index.length * 2).order(ByteOrder.nativeOrder()).asShortBuffer();
indicesBuffer.put(index).position(0);
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
final float eyeX = 0.0f;
final float eyeY = 0.0f;
final float eyeZ = 0.0f;
final float centerX = 0.0f;
final float centerY = 0.0f;
final float centerZ = -1.0f;
final float upX = 0.0f;
final float upY = 1.0f;
final float upZ = 0.0f;
Matrix.setLookAtM(viewMatrix, 0, eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);
Matrix.translateM(viewMatrix, 0, 0.0f, 0.0f, -4.0f);
vShader = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
GLES20.glShaderSource(vShader, vCode);
GLES20.glCompileShader(vShader);
fShader = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
GLES20.glShaderSource(fShader, fCode);
GLES20.glCompileShader(fShader);
sProgram = GLES20.glCreateProgram();
GLES20.glAttachShader(sProgram, vShader);
GLES20.glAttachShader(sProgram, fShader);
GLES20.glLinkProgram(sProgram);
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
GLES20.glViewport(0, 0, width, height);
final float ratio = (float)width/height;
final float left = -ratio;
final float right = ratio;
final float bottom = -1.0f;
final float top = 1.0f;
final float near = 1.0f;
final float far = 100.0f;
Matrix.frustumM(projMatrix, 0, left, right, bottom, top, near, far);
}
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glUseProgram(sProgram);
long time = SystemClock.uptimeMillis() % 10000L;
float angleInDegrees = (360.0f / 10000.0f) * ((int) time);
Matrix.setIdentityM(modelMatrix, 0);
Matrix.rotateM(modelMatrix, 0, angleInDegrees, 0.0f, 1.0f, 0.0f);
vertsBuffer.position(0);
GLES20.glEnableVertexAttribArray(GLES20.glGetAttribLocation(sProgram, "aPos"));
GLES20.glVertexAttribPointer(GLES20.glGetAttribLocation(sProgram, "aPos"), 3, GLES20.GL_FLOAT, false, 0, vertsBuffer);
GLES20.glVertexAttrib4f(GLES20.glGetAttribLocation(sProgram, "aCol"), 1.0f, 1.0f, 0.0f, 1.0f);
Matrix.multiplyMM(modViewProjMatrix, 0, viewMatrix, 0, modelMatrix, 0);
Matrix.multiplyMM(modViewProjMatrix, 0, projMatrix, 0, modViewProjMatrix, 0);
GLES20.glUniformMatrix4fv(GLES20.glGetUniformLocation(sProgram, "uMVPMat"), 1, false, modViewProjMatrix, 0);
//GLES20.glDrawArrays(GLES20.GL_LINE_LOOP, 0, number);
GLES20.glDrawElements(GLES20.GL_LINE_LOOP, number, GLES20.GL_UNSIGNED_SHORT, indicesBuffer);
private final String vCode =
"uniform mat4 uMVPMat; \n"
+"uniform mat4 uMVMat; \n"
+"attribute vec3 aPos; \n"
+"attribute vec4 aCol; \n"
+"varying vec4 vCol; \n"
+"void main(){ \n"
+" vCol = aCol; \n"
+" gl_Position = uMVPMat * vec4(aPos, 1.0); \n"
+"} \n";
private final String fCode =
"precision mediump float; \n"
+"varying vec4 vCol; \n"
+"void main(){ \n"
+"gl_FragColor = vCol; \n"
+"} \n";
}