2012-01-10 3 views
3

OpenGL을 사용하여 잔디 필드에 3D 공을 렌더링하는 Android 애플리케이션을 개발 중입니다. 사용자는 볼과 상호 작용할 수 있습니다 (터치하여 회전).Android OpenGL ES 왜곡 된 이미지

문제는 다음과 같습니다. 모든 것이 내 삼성 Galaxy S2에서 잘 작동하지만 다른 장치 (HTC 놀라운 S, HTC 센세이션 ...)에서 시도하면 여러 개의 자른 뷰포트가있는 왜곡 된 이미지가 화면 (attached image 참조).

내가 생각할 수있는 모든 것을 시도했습니다. 텍스처 사용 중지, 조명 해제 등 ... 아무것도 작동하지 않습니다.

실제 코드가 없으면 도움이 어렵다는 것을 알고 있지만 코드의 어느 부분이이 문제의 원인인지는 알 수 없습니다. 그래서 누군가가이 문제의 원인이 될 수있는 아이디어가 있는지 물어볼 것입니다.

내 생각 엔

은 첨부 된 이미지에서 봐, 그리고 당신이 문제가 무엇인지 알고 있다면 알려주세요 ... GLSurfaceView 또는 렌더러 서브 클래스 또는 해당 객체의 생성 순서와 관련된 무언가이다.

enter image description here

편집 : onSurfaceCreated 코드 :

@Override 
public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); 
    gl.glShadeModel(GL10.GL_SMOOTH); 
    gl.glClearDepthf(1.0f); 
    gl.glEnable(GL10.GL_DEPTH_TEST); 
    gl.glDepthFunc(GL10.GL_LEQUAL); 
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 
    gl.glEnable(GL10.GL_TEXTURE_2D); 
    gl.glEnable(GL10.GL_NORMALIZE); 
} 
+0

어떤 갤럭시 S2 버전을 사용하고 있습니까? 위키 피 디아에는 다른 GPU를 사용하는 여러 모델이 있습니다. –

+0

모델 번호 : GT-I9100 하지만 갤럭시 노트에서 테스트 한 결과 잘 작동합니다. –

답변

4

내 친구. 나는 과거에 같은 문제를 겪어 왔고 그것은 gpu가 지원하는 깊이있는 비트 수 때문이었습니다. 예를 들어 내 은하계에서는 24 비트 깊이 버퍼를 지원했지만 tegra2 디바이스에서는 16 개만 기억합니다. 어쨌든, sokution은 egl config 선택 기능을 수행하는 동안 그것을 적절하게 구성해야합니다.

eg egl 코드의 코드를 게시하여 사용자를 괴롭힐 수 있습니다.

p.s. 배를 타고 오신 것을 환영합니다 :)

+0

OK ... 찾았습니다 !! 나는 이것에 1 주를 낭비했다. 고마워요. 당신은 방금 제 목숨을 구했습니다. –

+0

도움이 된 것을 기쁘게 생각합니다. 미안 해요 오식하지만 어제 밤에 잠드는 동안 내 핸드 헬드 장치에서 초기 응답을 썼습니다 :) –

2

가 마우리 치오의 대답에 추가하려면, 당신은 당신의 GLSurfaceView에 EGL의 설정을 설정할 수 있습니다

mGLSurfaceView.setEGLConfigChooser(redSize, greenSize, blueSize, alphaSize, depthSize, stencilSize); 
mGLSurfaceView.getHolder().setFormat(PixelFormat); 

당신은 here 좀 더 읽을 수 있습니다. 당신이 경험했기 때문에 이것은 다른 그래픽 칩에 아주 나쁜 영향을 줄 수 있습니다. 왜곡 된 이미지에서 뚜렷한 이유없이 매우 낮은 성능까지.

+0

정확히 내가 한 짓을하고 지금은 잘 작동하고 있습니다. 감사! –