2011-08-26 3 views
1

나는 이것에 대한 대답을 잠시 동안 찾았지만, 나는별로 행운이 없다. 내가하려는 것은 정상 데이터를 버텍스 쉐이더에 전달하는 것입니다. 위치가 제대로 전달되고 있지만 셰이더를로드하려고 할 때 "정상적인 특성을 찾을 수 없습니다"라는 오류가 발생합니다.OpenGL ES 2.0 - 버텍스 쉐이더에서 애트리뷰트를 찾을 수 없다.

내 ATTRIB 값은 enum입니다.

Iphone 개발을 위해 OpenGL ES 2.0에서 큐브를 만들었습니다.

내 Shader.vsh은 다음과 같습니다

attribute vec4 normal; 
attribute vec4 position; 

varying vec4 colorVarying; 

uniform mat4 mvp_matrix; 

void main() 
{ 
    //Trasform the vertex 
    gl_Position = mvp_matrix * position; 

    colorVarying = vec4(1.0, 1.0, 0.0, 0.0); 
} 

drawframe은 다음과 같습니다에 내가 속성 값을 업데이트 부분 :

// Update attribute values. 
glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, cubeVerticesStrip); 
glEnableVertexAttribArray(ATTRIB_VERTEX); 
glVertexAttribPointer(ATTRIB_NORMAL, 3, GL_FLOAT, 0, 0, cubeNormalsStrip); 
glEnableVertexAttribArray(ATTRIB_NORMAL); 

그리고 일부 내 LoadShader 이러한 결합 곳 함수는 다음과 같습니다.

glBindAttribLocation(program, ATTRIB_VERTEX, "position"); 
glBindAttribLocation(program, ATTRIB_NORMAL, "normal"); 

다시 위치가 작동합니다. 그러나 "정상적인"것은 발견 될 수 없다. 어떤 아이디어?

+1

링크하기 전에이'glBindAttribLocation' 호출을 만들어 주시길 바랍니다. 그렇지 않으면 효과가 없습니다. –

답변

10

normal GLSL 컴파일러가 스마트했기 때문에 찾을 수 없습니다. 그것은 실제로 당신이 normal과 함께으로 처리하지 않았 음을 보았습니다. 따라서 리소스를 저장하기 위해 존재하지 않는 것처럼 보입니다.

또한 3 개의 값만 전달하기 때문에 정상 및 위치는 vec3이어야합니다. 이것은 꼭 필요한 것은 아니지만 입력 내용과 속성을 일치시키는 것이 더 좋습니다.

+0

제안 사항에 따라 쉐이더를 변경했지만 여전히 오류가 발생합니다. 내 color 변수 중 하나 인 normal.x를 사용하고 있습니다. 프로그램이 연결하지 못했습니다. – Ben

+1

@Ben : _linker_ 오류라고 결코 말하지 않았습니다. 당신은 방금 "정상적인"것을 발견 할 수 없다고 말했습니다. 정확히 오류가 무엇입니까? –

+0

@Ben 링커 오류는 여러 가지 불일치하는 이름 때문일 수 있습니다. 조각 쉐이더는 어떻게 생겼습니까? –

관련 문제