2012-02-10 2 views
3

우리는 가상 3D 지구본을 통해 지형 시각화 소프트웨어로 작업하는 개발자 팀입니다. 이 프로젝트는 주로 태블릿과 휴대 전화 인 안드로이드를 실행하는 휴대 기기를 대상으로합니다. 우리는 여러 가지 장치에서 이것을 테스트 해 보았습니다. 휴대 전화는 응용 프로그램을 잘 실행하는 것처럼 보이지만 (어떤 항목에서도 문제를 발견하지 못했음) 일부 태블릿에서는 화면에서 텍스처를 그릴 때 문제가있는 것으로 보입니다.일부 안드로이드 장치에서 Opengl 텍스처가 깜박임

단어를 설명하기가 다소 어려우므로 명확한 설명을 위해 문제를 표시하는 비디오를 첨부하십시오. 이 예제는 200 개의 섹터로 나뉘어 진 구체를 보여줍니다. 각각의 섹터는 서로 다른 질감을가집니다. 당신이 볼 수 있듯이이 같은 시간에 같은 부문에서 두 개의 서로 다른 질감을 끌기 위해 노력하고있다처럼

Texture problem video

는 때때로 보인다.

우리는 이러한 장치에서 검사를하지 : (확인)

  • HTC 디자 이어 (확인)
  • 구석 전자 책 리더 (확인)
  • 삼성 갤럭시 탭 10.1

    • 삼성 갤럭시 S SLC (propperly 나던 작업)
    • 소니 태블릿 S (중 나던 작업)
    • 삼성 갤럭시 탭 7.0 (확인)

    여기에 관련된 중요한 코드를 게시하고 있습니다. 텍스처를 그리는 데 사용되는 첫 번째 조각 쉐이더 :

    varying mediump vec2 TextureCoordOut; 
    uniform sampler2D Sampler; 
    .... 
    gl_FragColor = texture2D (Sampler, TextureCoordOut); 
    

    다음, 코드가 몇 가지 큰 기능에서 절약되기 때문에 메신저, OpenGL을 실행하는 중요한 지침을 게시을 :

    GLES20.glGenTextures(num, idTextures, 1); //declare 200 textures 
    ... 
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, idTextures[texture]); //texture binding 
    ... 
    GLES20.glVertexAttribPointer(Attributes.Position, size, GLES20.GL_FLOAT, false, stride, fb); 
    ... 
    GLES20.glVertexAttribPointer(Attributes.TextureCoord, size, GLES20.GL_FLOAT, false, stride, fb); 
    ... 
    GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, first, count); 
    

    임 더 자세한 정보를 제공하지 못해 죄송합니다. 그러나 몇 주간의 디버깅을 마친 후에 우리는이 문제의 원인이 될 수있는 어떤 단서도 없습니다. 우리가 지금 완전히 잃어 버렸기 때문에 어떤 단서가 오기를 바라고있는 너를 돌이켜 보아라. 미리 감사드립니다.

  • +0

    모든 렌더링주기마다''glFlush'' 또는''glFinish''를 추가하면 렌더링 상태가 지속적으로 크게 변경되는 것처럼 보일 수도 있습니다. – harism

    +0

    제안에 감사하지만 불행히도 그것은 작동하지 않았다. –

    답변

    2

    나는 어려움을 초래하는 원인을 알고있을 것입니다. Tegra 2 장치가 작동하지 않는 유일한 장치입니다. 필자는 최근 Tegra 2 장치로 작업하기 시작하고 특정 차이점을 발견했습니다. 다른 장치와 비교하여 엔비디아는 어떤 것들이 다른 GPU와 다르게 동작 할 수있는 특정 종류의 반올림 오류를 도입 한 것 같습니다. 극한의 길이로 이동하여 복잡한 쉐이더로 원하는 방식으로 작동하도록 임시 해결책을 사용해야했습니다.

    그리고 비디오에서 볼 수있는 것은 z 버퍼에 충분한 해상도가 없어서 z- 파이팅이 발생하는 것 같습니다. http://en.wikipedia.org/wiki/Z-fighting. 아주 가까이에있는 삼각형을 그리는 경우 z- 버퍼에서 이러한 종류의 동작을 일으킬 수 있으므로 코드/설명에서 실제로 볼 수 없기 때문에 확실하지 않습니다.

    그러나 어쩌면 꼭지점 (x, y, z)을 약간 위나 아래로 조절하여 깜박임 현상을 확인할 수 있습니다. 변경되면 아마도 그와 관련이 있습니다. 그렇지 않은 경우 문제가 또 다른 이유가있을 수 있지만 조금 더 코드가 좋을 것입니다.

    문제가 발생한 곳에서 전체 구형을 그리지 않고 하나 또는 두 개의 삼각형을 그리면서 여전히 좁혀 지도록 시도하는 것이 흥미로울 것입니다.

    추신 : 더 긴 비디오는 더 좋았을 것이고, 짧은 클립은 vimeo를 빨아 들일 것입니다.

    +0

    답장을 보내 주셔서 감사합니다. 아직 아무것도 확인하지 못했지만 제공된 정보 중 일부는 유망 해 보입니다. 가능한 한 빨리 피드백을 드리겠습니다. 또한 아픈 코드를 게시하려고합니다 (코드가 굉장히 컸기 때문에) 그리고 더 긴 비디오를 게시하십시오. –

    +0

    나는 몇 가지 검사를했다. 이 경우 z-buffer에는 문제가 없습니다. 우리는 구의 뒷면을 제거했으며 0에서 80 사이의 섹터 만 표시됩니다. 즉, 대부분의 컬러 픽셀에는 삼각형 만 투영되므로 z 버퍼가 없습니다. 모든 섹터는 16x16 꼭지점 (256 삼각형)으로 구성되며 그 사이에 겹치지 않습니다. 예, Tegra2와 관련된 몇 가지 문제가 있어야하지만 아직 무엇인지 모릅니다. –

    +0

    조사 할 가치가있는 것 : 특정 삼각형/사각형에서만 깜박 거릴 것입니까, 아니면 모두에서 발생합니까? 텍스처링을 변경하면 (모든 텍스처를 1 개만 사용) 발생합니까? 테스트 목적으로 opengl을 1.1로 변경할 수 있습니까, 아니면 2.0이어야합니까? 얼마나 많은 텍스처 메모리를 사용합니까? 당신이 실제로하고있는 것에 대해 게시하지 않은 많은 것들이 있습니다. 그래서 제가 말할 수있는 것은 불행히도 순수한 추측입니다. 난 정말 당신이 단지 한 삼각형을 표시하고 무슨 일이 일어 나는지 천천히 그 숫자를 증가 것이 좋습니다 것이 좋습니다. – HardCoder

    관련 문제