OpenGL에서 일반 버텍스 특성이 사용되지 않으므로 사용자 지정 특성 만 사용하여 버텍스 셰이더를 다시 작성하려고했습니다. 그리고 나는 나를 위해 일하지 않았다. 버텍스 쉐이더는 다음과 같습니다.OpenGL 및 OpenGL ES에서 사용자 정의 및 일반 버텍스 셰이더 특성 사용
attribute vec3 aPosition;
attribute vec3 aNormal;
varying vec4 vColor;
vec4 calculateLight(vec4 normal) {
// ...
}
void main(void) {
gl_Position = uProjectionMatrix * uWorldViewMatrix * vec4(aPosition, 1);
vec4 rotatedNormal = normalize(uWorldViewMatrix * vec4(aNormal, 0));
vColor = calculateLight(rotatedNormal);
}
이것은 OpenGL ES 2.0에서 완벽하게 작동합니다. 그러나 OpenGL과 함께 사용하려고하면 검은 색 화면이 나타납니다. 내가 aNormal
을 일반 gl_Normal
으로 변경하면 모든 것이 잘 작동합니다 (aPosition
은 두 가지 컨텍스트에서 모두 잘 작동하므로 gl_Vertex
을 사용할 필요가 없습니다).
내가 뭘 잘못하고 있니?
저는 RenderMonkey를 사용하여 쉐이더를 테스트했으며 적절한 속성 이름 (aPosition 및 aNormal)을 사용하여 스트림 매핑을 설정했습니다. 어쩌면 그것은 모두가 0
으로 설정 되었기 때문에 속성 색인과 관련이있을 것입니다. 또한, 여기 렌더 문서는 "흐름지도"에 이름을 사용자 정의 속성 설정에 대한 말씀입니다 :
"이름을 속성"필드에 해당 스트림을 참조 쉐이더 편집기에 사용 을 할 수있는 기본 이름을 표시합니다. OpenGL ES 효과에서 변경된 이름을 사용하여 스트림을 참조해야합니다. 그러나, 다이렉트 X 나 OpenGL을 적용, 새 이름이 더 궁금
가 렌더 또는 OpenGL을 자체에 대한 특정이 문제 쉐이더 편집기에 영향을주지 않습니다? 그리고 왜 aPosition
이 여전히 작동합니까?
유익한 답변에 감사드립니다. 예, 저는 별도의 색인과 더미 속성을 사용하려고했지만이 모든 것이 도움이되지 않습니다. RenderMonkey 대신 glBindAttribLocation을 실험 해보고 나중에 결과를 게시 할 것입니다. –