2009-07-14 3 views
2

OpenGL ES 2.0에서, 당신은 분명히 모델 행렬을 설정하는View/Model/Projection 행렬을 OpenGL ES 2.0의 버텍스 쉐이더에 전달하려면 어떻게해야합니까?

glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

더 이상 할 수 없지만 GLSL spec는 버텍스 쉐이더에서 그들을 액세스하는 방법을 알려줍니다 이후,이 행렬은 여전히 ​​어떻게 든 내장되어 생각 .

// 
// Matrix state. p. 31, 32, 37, 39, 40. 
// 
uniform mat4 gl_ModelViewMatrix; 
uniform mat4 gl_ProjectionMatrix; 
uniform mat4 gl_ModelViewProjectionMatrix; 

어떻게 이러한 값을 내 쉐이더로 전달합니까? 어떻게 든 glUniformMatrix4fv을 사용합니까?

OpenGL ES 2.0 Programming Guide의 소스 코드는 쉐이더 부분에 도움이되었지만 모든 예제는 매트릭스 변환을 그대로두고 꼭지점이 -1.0과 1.0 사이인지 확인합니다.

UPDATE : 유일한 답은 아래에 링크 된 코드에서 수행으로 glGetUniformLocationglUniformMatrix4fv를 사용하여, 사용자 정의 모델/뷰/투영 행렬을 정의하는 것입니다, 그래서 분명히 OpenGL ES Shader Language하지 지원 gl_ModelViewMatrix 같은 미리 정의 된 항목을 수행 . OpenGL Shader Builder 을 지원하기 때문에 혼란 스러웠습니다.하지만 OpenGL ES가 아닌 일반 OpenGL입니다.

답변

1

그의 의견에 따르면, this link 그의 문제를 해결하기에 충분한 정보를 주었다.

+0

고정 기능 파이프 라인을 사용하고 싶지 않습니다. 원하는 경우 OpenGL ES 1.1을 계속 사용할 수는 있지만 꼭지점 및 조각 쉐이더를 실험하려고합니다. –

+0

죄송합니다. 도움이 될 수 없습니다. Apple에서 업데이트 된 샘플 코드를 찾을 수도 있습니다. 이 샘플 코드가 도움이 될지 모르겠습니다. http://mgrundmann.com/2009/06/24/simple-opengl-es-20-iphone-example/ – Mark

+0

링크를 제공해 주셔서 감사합니다! 그는 모델과 투영 행렬 (즉, 자신의 이름을 정의한 다음 glUniform을 사용하여 값을 업데이트)에 대한 자체 셰이더 변수를 정의하여 내장 된 값을 사용하지 않고이 문제를 해결합니다. 아마도 OpenGL ES 2.0의 iPhone 버전에는 내장되어 있지 않을 수도 있습니다. 어쨌든, 이것으로 해결할 수있는 몇 가지 코드를 작성할 수 있습니다. –

0

gl_ModelViewProjectionMatrix가 "OpenGL ES 쉐이딩 언어 버전 1.00"사양에없는 것으로 보입니다. 많은 쉐이딩 언어 스펙이있는 것처럼 보이므로 혼동의 원인 일 가능성이 큽니다. 내가 알기에, 당신은 매트릭스 스토리지를위한 당신의 유니폼을 정의한다.

관련 문제