다음 코드는 GLSurfaceView와 대각선 프레임을 그리려고하지만 그 대신 큰 검은 색 화면이 표시됩니다. 직교 투영을 설정하고, 뷰포트 크기를 View 크기에 맞추고, glDrawArrays()로 프레임 선을 그리고 glDrawElements()로 대각선을 그려 봅니다. 문제의 원인을 찾지 못했습니다.OpenGL ES 1.0을 사용하는 Android의 선 그리기
public class MapView extends GLSurfaceView implements Renderer {
private int w, h;
private FloatBuffer frameVertices;
private ByteBuffer diagIndices;
public MapView(Context ctx) { this(ctx, null); }
public MapView(Context context, AttributeSet attrs) {
super(context, attrs);
setRenderer(this);
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, frameVertices);
gl.glColor4f(0f, 0f, 1f, 0.5f);
gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 4);
gl.glDrawElements(GL10.GL_LINES, 1, GL10.GL_UNSIGNED_BYTE, diagIndices);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
w = getWidth(); h = getHeight();
TRC.debug("w = " + w + ", h = " + h);
gl.glClearColor(0, 0, 0, 1);
gl.glViewport(0, 0, w, h);
gl.glDepthRangex(1, -1); // TODO remove
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthox(0, w, 0, h, 1, -1);
float[] frame = {
0, 0,
w-1, 0,
w-1, h-1,
0, h-1 };
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(frame.length * 4);
byteBuffer.order(ByteOrder.nativeOrder());
frameVertices = byteBuffer.asFloatBuffer();
frameVertices.put(frame);
frameVertices.flip();
frameVertices.position(0);
gl.glLineWidthx(10);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glDisable(GL10.GL_DEPTH_TEST);
diagIndices = ByteBuffer.allocateDirect(2);
diagIndices.order(ByteOrder.nativeOrder());
diagIndices.put(new byte[] {0, 2});
diagIndices.flip();
}
}
무엇이 문제 일 수 있습니까?
안녕하세요, 고맙습니다. 나는 다른 명확한 색깔을 시도하고 효과가있다. 나는 클리핑면을 0, 1로 변경했고 어떤 차이도 느끼지 못했다. 전체보기는 선명한 색으로 채워집니다 (좋음, 적어도 GL의 일부가 작동하는 것으로 알고 있음). – Endre
우선 화면 중앙으로 임의의 점으로 꼭지점 하드 코딩을 변경하십시오. 아무것도 보이지 않으면'int error = gl.glGetError(); if (error! = GL10.GL_NO_ERROR) {Log.e (error); OpenGL이 던지고있는 특정 오류가 있는지 확인하십시오. 귀하의 오류 int, 여기 [http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html]의 의미와 오류 코드에 대한 설명을 볼 수 있습니다. ] (http://www.opengl.org/wiki/GL_Error_Codes). 여기에 오류로 의견을 말하면 더 자세히 살펴볼 것입니다. –
glGetError()는 onDrawFrame() 메서드에서 GL 호출이 끝날 때마다 0으로 반환됩니다. 이제 내가 시도한 것은 다운로드 된 예제 소스에서 투영법을 원근법 기반으로 변경하는 것입니다. 수정 된 예제는 작동하지만 내 앱은 작동하지 않지만 두 앱 간의 까다로운 차이점을 파악할 수는 없습니다. – Endre