가 GLSL 변수 gl_VertexID
에 추가되어 드로잉 명령의 *BaseVertex
버전인가를? 작동으로 gl_VertexID
가 추가됩니다 basevertex
전에 바운드 ELEMENT_ARRAY_BUFFER
에서 가져온 인덱스가 포함되어 있습니다.
그래서, 내 질문은 : 이 올바른 행동인가?gl_VertexID
에는 꼭지점을 가져 오는 데 사용되는 인덱스가 있어야한다고 가정합니다.
가 GLSL 변수 gl_VertexID
에 추가되어 드로잉 명령의 *BaseVertex
버전인가를? 작동으로 gl_VertexID
가 추가됩니다 basevertex
전에 바운드 ELEMENT_ARRAY_BUFFER
에서 가져온 인덱스가 포함되어 있습니다.
그래서, 내 질문은 : 이 올바른 행동인가?gl_VertexID
에는 꼭지점을 가져 오는 데 사용되는 인덱스가 있어야한다고 가정합니다.
예이 올바른 bahviour입니다. BaseVertex의 사용 시나리오는 gl*Pointer
함수를 사용하여 버텍스 배열로 버퍼 오프셋을 조정하는 대신이 하나의 값만 전환해야한다는 것입니다.
아이디어는 인덱스를 조정할 필요없이, 하나의 VBO에 여러 메시 (모델 파일)에서 데이터를로드 할 수있다.
당신의 가정은 권리입니다. gl_VertexID는 BaseVertex 오프셋을 포함해야합니다.
opengl wiki about GLSL built-in vars:
참고 : gl_VertexID베이스 정점이 적용됩니다.
about glDrawElementsBaseVertex:
는 gl_VertexID는 basevertex하여 버퍼로부터 페치하지 인덱스 오프셋 후의 인덱스 될 정점 셰이더에 전달.
불행하게도, 오래된 드라이버가 제대로 구현하지 않았다.
예, 의미가 있습니다. 최종적으로 계산 된 인덱스를 포함하는 "''gl_Element'"같은 것이 - 미래의 OpenGL/GLSL 버전에서 gl_VertexID를 잘 보완 할 것이라고 생각합니다. 고맙습니다. – palle8x
@ palle8x 요소 배열의 인덱스가 개념적으로 중요하므로 그렇게 생각하지 않습니다. 그리고 정말로 필요한 경우 baseVertex에 유니폼을 추가하고 이것을'gl_VertexID'에 추가 할 수 있습니다. –
나는 동의하며, 당신이 설명하는 것은 현재 나의 코드에서 무엇을하고 있는지를 설명한다. 하지만 여전히 "gl_Element'"와 같은 유용한 유스 케이스가 있다고 생각합니다. (나는 믿습니다.) 드라이버에 구현하는 것이 그리 어렵지는 않을 것입니다. – palle8x