2014-03-04 2 views
0

저는 BROTHALER, Kevin의 "OpenGL ES 2 for Android"서적으로 Android 용 OpenGL ES 2.0을 배우고 있습니다. 일부 다른 문헌에서 나는 OpenGL을 배울 수 있지만 내 방식에 대해서는 의심의 여지가 있습니다.OpenGL ES 2.0 안드로이드 어플리케이션 - 개념적 질문

첫 번째 질문

내가 OpenGL을 1.0 학습 때 위로이 기능 "GLU.glLookAT은"카메라의 뷰를 설정할 수 있었다. OpenGL 2.0과 비슷한 기능이 있습니까? 는 내가 "w"구성 요소, ortographic와 관점 프로젝션 알고 있어요,하지만 난 2.0 아무것도 같은이 있다면 궁금 해서요 내 학습에 "GLU.glLookAt" 그렇게 도움이되었다고합니다.

두 번째 질문 다양한 색상으로 처리 할 때, 나는 (요약) 아래의 코드를 가지고

:

vertexShaderCode = "attribute vec4 a_Position; " + 
        "attribute vec4 a_Color;  " + 
        "varying vec4 v_Color;  " + 

        "void main(){     " + 
        " v_Color = a_Color;  " + 
        " gl_Position = a_Position;" + 
        "}" 


fragmentShaderCode = "precision mediump float; " + 
        "varying vec4 v_Color;  " + 

        "void main(){    " + 
        " gl_FragColor = v_Color;" + 
        "}" 


... (some code) ... 

int a_Position = GLES20.glGetAttribLocation(myShaderProgram, "a_Position"); 
int a_Color = GLES20.glGetAttribLocation(myShaderProgram, "a_Color"); 

GLES20.glEnableVertexAttribArray(a_Position); 
GLES20.glEnableVertexAttribArray(a_Color); 

GLES20.glVertexAttribPointer(a_Position, etc) 
GLES20.glVertexAttribPointer(a_Color, etc) 

GLES20.glDrawArrays(GL_TRIANGLES, 0, 3); 

내가 만들려고 요점은이를 말하고 있다는 것입니다 속성 "a_Position"과 "a_color"는 어디서 어떻게 정보를 얻지 만, "v_Color"는 어떨까요?

다양한 "v_Color"가 거기에 생성되었으므로 조각 쉐이더가 정점 쉐이더로부터 정보를 받고 있다는 것을이 코드에서 알 수 있었지만 쉐이더간에 크로스 토크가 없다고 생각했습니다. 무대 뒤에서 무슨 일이 벌어지고 있니?

그리고 "a_Color"는 "중간"속성으로 존재합니다. ES2에서

GLES20.glVertexVaryinLocation(...) 

답변

0
  1. 은 당신이 당신의 자신의 행렬을 정의하고 쉐이더로 보내야합니다 : 같은 기능은 없습니다. LookAt와 같은 많은 메소드가 있습니다. 일반적으로 일부 매트릭스 도구의 일부로 찾을 수 있습니다. 그래서 일반적으로 당신이 찾고있는 것은 보통 번역, 회전, 오르 소, 절두체, lookAt를 포함하는 행렬을 조작하는 도구입니다 ...
  2. v_Colorgl_Position과 비슷합니다.이 두 개가 보간되어 조각 쉐이더로 전송됩니다. 버텍스 쉐이더가 작업을 완료 할 때 "크로스 토크 (cross talk)"가 아니라면, 프래그먼트 쉐이더는 버텍스 쉐이더로부터받은 데이터를 갖기 시작할 것입니다 (간략화 된 경우 this 시도하십시오). varying은 보간 된 데이터를 프래그먼트 셰이더로 보내는 데 사용됩니다. 이것은 예를 들어 첫 번째가 검은 색이고 두 번째가 흰색 인 경우 두 꼭지점으로 정의 된 선을 그리는 경우 그 사이의 모든 픽셀이 회색이되어 검정부터 흰색까지 부드러운 선형 그래디언트를 만듭니다. 더 유용한 경우 (그 다음 색) 텍스쳐 좌표와 법선을 똑같이 할 것이고 텍스쳐 좌표가 (.0, .0)에서 (1.0, 1.0)으로 쿼드를 그리는 것은 조각 셰이더에서 보간 좌표를 보낼 것입니다. 올바른 텍셀을 그리면서 텍스처에 직접 액세스 할 수 있습니다. 예를 들어 쿼드의 중간에서 좌표는 (.5, .5)입니다. 따라서 glVertexVaryinLocation은 버퍼 해상도와 같은 많은 데이터에 의존하기 때문에 의미가 없습니다. 4 픽셀 라인은 4 개의 고유 한 색상 값을 생성하고 5 픽셀 라인은 다른 5 픽셀 라인을 생성합니다.