2017-05-09 7 views
1

저는 현재 OpenGL 3.3+와 현대의 쉐이더 기반 렌더링 프로세스를 배우고 있습니다. 지금까지 C#을 사용하여 GLFW 및 OpenGL에 대한 고유 한 바인딩을 만들 수 있었으며 모든 것이 어떻게 작동하는지 꽤 잘 이해하고 있습니다. 나는 처음부터 모든 일을 좋아한다. 왜냐하면 내 프로젝트의 모든 것이 어떻게 작동 하는지를 알고 있기 때문이다.OpenGL 3.3+ - 셰이더, 속성, 유니폼, 인/아웃 변수 - 어떻게, 무엇을, 언제, 왜?

그러나 "스틱"하고 싶지 않은 것은 : 입/출력 변수, 속성 및 유니폼의 차이점은 정확히 무엇입니까? 어떤 것을 사용할 지 어떻게 알 수 있습니까? 저는 OpenGL State-Machine이 어떻게 작동하는지 꽤 잘 이해하고 있다고 생각합니다. 그러나 렌더링 프로세스의이 부분은 거의 자세히 설명되어 있지 않습니다. 대부분의 튜토리얼이나 책에서는 "이것은 쉐이더에 데이터를 전달하는 방법"이라고 말하지만 사용 방법과 가장 중요한 이유를 설명하는 텍스트를 아직 찾지 못한 이유는 무엇입니까?

또한 셰이더와 VBO 사이의 연결에 대한 정보가 더 필요합니다. 나는 그것이 나의 질문과 결합 될 수 있다고 생각한다.

더 구체적으로 질문을 수정하십시오 : 개개인의 특성, 특성, 유니폼 및 버퍼 개체 간의 관계를 자세히 설명하는 소스가 있습니까? 어떻게 작동합니까? 어느 때 사용할 수 있습니까? 무엇을 피해야합니까?

속성들은 정점 당 데이터 조각이다 : 다음 쉐이더 변수 사이

+0

이것은 특히 편집과 관련하여 큰 질문입니다. Attrib/Varying/Uniform과 그 바인딩과의 관계는 GL에 새로 온 사람들을위한 끝없는 실수의 원천입니다. 비버는 이러한 신규 이민자들을 도울 수있는 질 높은 응답을 제공했습니다. 아마도 질문의 중요성을 지키는 것은 규칙에 어긋나지만 ... : S –

+1

@JoshParnell 답장을 보내 주셔서 감사합니다 Josh. 좀 더 구체적으로 내 질문에 다시 말하기 위해 내 의견을 사용 했어도 괜찮 으면 좋겠다. 어쩌면 우리는이 스레드에서이 방법으로 좀 더 답변을 얻을 수 있습니다 :) – j8a2b0e7

답변

2

차이이다. 이 변수의 목적은 추가 데이터를 정점의 위치에 제공하는 것입니다. 각 정점에 고유 한 텍스처 좌표, 법선 및 색상이 속성의 좋은 예입니다. 가장 일반적인 경우에는 버텍스 버퍼 객체를 생성하고 셰이더의 속성에이 데이터를 첨부하여 셰이더에 애트리뷰트를 제공합니다.

유니폼에는 단일 렌더링 호출 중에 변경되지 않는 값이 들어 있습니다. 이것이 메쉬의 변형이 모든 정점에서 동일하기 때문에 행렬이 균일 한 값으로 간주되는 이유입니다.

쉐이더간에 정보를 전달하는 데 가변성이 사용됩니다. 이 값은 GPU에만 있습니다. 가변 값은 전체 다각형에 걸쳐 보간됩니다. 3 개의 꼭지점에 대한 값만 제공하지만 조각에는 3 개의 꼭지점 값을 기반으로 한 보간 값이 포함됩니다.

셰이더에 정점 버퍼를 연결하려면 정점 버퍼를 바인딩하고 정점 버퍼에 대한 정보를 정점 버퍼에 제공해야합니다.

OpenGL을위한 포괄적 인 learing ressource 인 "red book"최신판을 얻으시기 바랍니다. 또한 OpenGL의 핵심 프로파일의 정확한 버전을 고수 할 것입니다. 호환성 모드는 모든 레거시 기능을 사용할 수 있기 때문에 시작해야하는 악몽이며 웹에 여러 OpenGL 버전의 기능을 혼합 한 많은 자습서가 있습니다. 그러지 마 ... 후회할거야. 정확한 버전 (예 : https://www.khronos.org/files/opengl4-quick-reference-card.pdf)의 참조 카드를 한 버전의 기능에 집중하십시오.