2013-08-22 4 views
3

자바와 LWJGL로 GLSL을 배우려는 것을 배우고 있습니다 만, 현재 기본 버텍스 쉐이더에 문제가 있습니다.OpenGL 버텍스 쉐이더가 작동하지 않습니다.

버텍스 쉐이더 :

#version 120 

void main() { 
    gl_Position = gl_Vertex * 0.5; 
} 

조각 쉐이더 :

#version 120 

void main() { 
    gl_FragColor = vec4(1.0, 0.4, 0.4, 1.0); 
} 

렌더링 코드 :

public void draw() { 
    glBindBuffer(GL_ARRAY_BUFFER, vbo); 
    glVertexPointer(3, GL_FLOAT, 0, 0L); 

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); 

    glEnableClientState(GL_VERTEX_ARRAY); 
    glDrawElements(GL_TRIANGLES, size, GL_UNSIGNED_INT, 0); 
    glDisableClientState(GL_VERTEX_ARRAY); 
} 

컴파일은 오류를 얻을 수없고, 조각 쉐이더는 간단한 삼각형을 염색 잘 작동 내가 그려. 유일한 문제는 예상대로 삼각형 축소 (0.5 팩터)를 보지 못한다는 것입니다. 꼭지점은 변경되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

프로그램이 바운드되어 있고 활성화되어 있습니까? –

+0

예, Fragment Shader가 작동 중입니다. – Thiago

+3

'gl_Position = gl_Vertex * 0.5'는 w 성분을 포함한 전체 4 차원 벡터를 수정합니다. 'gl_Position = vec4 (gl_Vertex.xyz * 0.5, 1.0)'와 같은 것을하십시오. –

답변

2

문제는 gl_Vertex이 4 차원 벡터입니다. 스칼라로 직접 곱하면 스케일링 결과가 의도하지 않게됩니다. OpenGL은 동질의 gl_Position을 데카르트 화면 좌표로 변환 할 때 x, y, z를 w 구성 요소로 나눕니다. 0.5/0.5 = 1.0이므로 결과는 크기 조정이되지 않습니다.

gl_Position = gl_Vertex * 0.5; 

이 값은 x, y, z 및 w 구성 요소에 0.5를 곱합니다. x, y 및 z의 배율 만 변경하십시오.

gl_Position = vec4(gl_Vertex.xyz * 0.5, gl_Vertex.w); 
+0

정말 고마워요. 그게 효과가 있었어. – Thiago

관련 문제