티스토리 뷰
OpenGL ES 2.0 Practice 1 : Simple Triangle
OpenGL ES 2.0을 이용한 간단한 Triangle 그리는 예제 코드 입니다. (Android, Java)
GLES20.glUseProgram(mProgram);
// screen clear color
GLES20.glClearColor(0.3f, 0.8f, 0.3f, 1.0f);
// clear screen
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
int aPositionLoc = GLES20.glGetAttribLocation(mProgram, "aPosition");
GLES20.glVertexAttribPointer(aPositionLoc, 3, GLES20.GL_FLOAT, false, 0, mPosition);
// triangle color
GLES20.glUniform3f(GLES20.glGetUniformLocation(mProgram, "uColor"), 1.0f, 0.0f, 0.0f);
// enable attribute location
GLES20.glEnableVertexAttribArray(aPositionLoc);
// rendering
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 3);
// disable attribute location
GLES20.glDisableVertexAttribArray(aPositionLoc);
// starting gl command buffer, non-block
GLES20.glFlush();
GLES20.glUseProgram 에서 사용되는 Program 생성을 위한 코드 입니다.
private String vertexShaderSource =
"precision mediump float;\n" +
"attribute vec3 aPosition;\n" +
"void main() {\n" +
" gl_Position = vec4(aPosition, 1.0);\n" +
"}\n";
private String fragmentShaderSource =
"precision mediump float;\n" +
"uniform vec3 uColor;\n" +
"void main() {\n" +
" gl_FragColor = vec4(uColor, 1.0f);\n" +
"}\n";
protected int createProgram(int type)
{
int program = GLES20.glCreateProgram();
int vertexShader = getShader(GLES20.GL_VERTEX_SHADER, vertexShaderSource);
int fragmentShader = getShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderSource);
GLES20.glAttachShader(program, vertexShader);
GLES20.glAttachShader(program, fragmentShader);
GLES20.glLinkProgram(program);
return program;
}
private int getShader(int type, String shaderSource)
{
int shader = GLES20.glCreateShader(type);
GLES20.glShaderSource(shader, shaderSource);
GLES20.glCompileShader(shader);
int[] compiled = new int[1];
GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
if (compiled[0] == 0)
{
Log.e(TAG, "Could not compile shader");
Log.e(TAG, GLES20.glGetShaderInfoLog(shader));
Log.e(TAG, shaderSource);
}
else {
Log.d(TAG, "Shader = " + shader);
}
return shader;
}
그리고 Java 환경이어서 GL 함수에 입력될 float형 array를 FloatBuffer 로 사용해야하는데, 아래 코드 참조요..
protected FloatBuffer createFloatBuffer(float []values) {
FloatBuffer buffer = ByteBuffer.allocateDirect(values.length * Float.SIZE).
order(ByteOrder.nativeOrder()).asFloatBuffer();
buffer.put(values);
buffer.position(0);
return buffer;
}
결과 화면.... (Nexus 7 2nd, Android 6.0)
'Programming > OpenGL ES' 카테고리의 다른 글
OpenGL ES 2.0 Practice 5 : Simple Texture (0) | 2016.10.23 |
---|---|
OpenGL ES 2.0 Practice 4 : Simple Light (0) | 2016.10.20 |
OpenGL ES 2.0 Practice 3 : Simple Projection (0) | 2016.10.09 |
OpenGL ES 2.0 Practice 2 : Simple Matrix (0) | 2016.10.09 |
- Total
- Today
- Yesterday
- projection
- 스크럼
- OpenGL ES
- light
- texture
- 토크
- triangle
- process
- smapler2D
- Practice
- 툴
- OpenGL ES 2.0
- TOOL
- XP
- 애자일
- Android
- 프랙티스
- Scrum
- practices
- 실전
- OPENGLES
- 프로세스
- OpenGL
- aglie
- Matrix
- talk
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |