2014-05-18 3 views
1

그래서 객체에 그룹을 그리는 OpenGL 프로그램이 있습니다. 이러한 객체를 그릴 때 쉐이더 프로그램을 사용하려면 버텍스 쉐이더와 버텍스 쉐이더 만 사용해야합니다. 기본적으로 텍스처 계산에 따라 버텍스 쉐이더 내부에서 모델의 높이를 조정하려고합니다. 그리고 그것이 바로 그 것이다. 그렇지 않으면 알몸의 OpenGL (쉐이더 없음)을 사용하는 것처럼 객체를 그려야합니다. 조각 쉐이더를 구현하고 싶지 않습니다.GLSL - 아무것도하지 않는 버텍스 쉐이더?

그러나 나는 꼭지점 셰이더 만있는 셰이더 프로그램을 만들 수있는 방법을 찾을 수 없었습니다. 내 모델의 높이를 조정에 대한 부분을 잊어 버리고 지금까지 내가 가진 :

gl_FrontColor = gl_Color; 
gl_Position = modelViewProjectionMain * Position; 

가 올바른 위치에 확실히에 개체를 변환, 나는이 I 느슨한 텍스처 좌표도 조명 정보를 수행 할 때 그러나 (법선이 손실됩니다). 내가 뭘 놓치고 있니? "아무것도하지 않는"버텍스 쉐이더는 어떻게 작성합니까? 즉, 노멀이있는 텍스처가있는 .obj를 그릴 때 해제 할 수있는 버텍스 셰이더는 아무런 차이가 없습니까?

+0

* "아무것도하지 마십시오"* 정점 셰이더는 사실'gl_Position = ftransform();'입니다. 물론 그 사용은 권장되지 않지만 귀하의 질문은 저에게 중요하지 않다고 믿게합니다. –

답변

2

부분 구현으로 셰이더를 작성할 수 없습니다. 셰이더에서 모든 작업을 수행하거나 지정된 객체에 대해 고정 된 기능 (사용되지 않음)을 완전히 사용합니다.

당신이 할 수있는 일은 이것이다 :

glUseProgram(handle) 
// draw objects with shader 
glUseProgram(0) 
// draw objects with fixed functionality 
1

당신이 좋은 것하고 싶은 실제로 가능하지 않다 무엇 Abhishek 반살에 의해 전적으로 정답에 조금 확장합니다. 당신은 당신 자신의 꼭지점과 조각 쉐이더를 써야 할 것입니다.

게시물에서 "naked OpenGL"이란 OpenGL 1 및 2의 고정 기능 파이프 라인을 의미합니다.이 기능에는 내장 된 조명 및 질감이 포함되어 있습니다. OpenGL의 쉐이더는 고정 기능 파이프 라인을 확장하는 대신 완전히 대체합니다. 그리고 OpenGL 3+에서는 이전 기능이 제거되었으므로 이제는 강제적입니다.

원래 OpenGL 조명 및 텍스처링과 동일한 기능을 수행하는 버텍스/조각 셰이더는 찾기 쉽고 목적에 맞게 수정하기 쉽습니다. Rost, Licea-Kane 등의 OpenGL 쉐이딩 언어 책에는 "OpenGL 고정 기능 에뮬레이션"전체 장이 있습니다. 또는 5th edition OpenGL SuperBible 책 및 코드 (6th edition 제외)의 사본을 얻을 수 있습니다. 유용한 미리 정의 된 셰이더. 또는 책에 대한 온라인 자료를 선호하는 경우 NeHe 자습서가 있습니다.

쉐이더를 작성하는 것은 처음에는 약간 힘든 것처럼 보일지 만, 생각보다 쉽고 유연성이 뛰어납니다.

관련 문제