OpenGL ES 2.0 다중 프로그램 또는 다중 셰이더 또는 무엇입니까? 어떻게 작동합니까?
문제 (TL; DR)
내 문제는 근본적으로 OpenGL ES 2.0이 여러 셰이더를 작성하고 사용할 것으로 기대하는 방식을 모른다는 것입니다. 또는 사람이 그렇게 할 것이 타당하거나 예상되는 경우.
여기서 근본적인 질문은 다음과 같습니다. 만약 제가 사과, 빛나는 바위, 퍼지 메시가 모두 같은 3D 세계에 있고 모두 다른 셰이더 프로그램으로 가장 잘 그려졌지만 동일한 mvpMatrix를 사용한다면 어떻게 모두 사용할 수 있을까요? 내가 작성한 가장 적합한 셰이더를 모두 사용하도록 동일한 OpenGL 렌더링을 사용합니까?
내가 무슨 짓을 한
그래서 화면에 개체의 윤곽을 그릴 수 있다는 점에서 완벽하게 작동하는 Android 게임용 기본 OpenGL ES 2.0 프로그램을 작성했습니다. 그러나 다른 것은 없습니다. 셰이더가 다음과 같이 보이기 때문입니다.
정점 셰이더
uniform mat4 uMVPMatrix;
attribute vec4 aPosition;
void main() {
gl_Position = uMVPMatrix * aPosition;
}
조각 셰이더
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
이제 그들은 매우 기본적입니다. 내가 더 이상 진행하지 않은 이유는 다른 모든 오브젝트에 적용 할 하나의 셰이더를 작성해야하는지 아니면 여러 셰이더를 사용해야하는지 알 수 없기 때문입니다. 여러 셰이더를 사용하여 여러 다른 개체를 그리는 경우 어떻게 효율적으로 수행 할 수 있습니까?
나는 이것이 OpenGL ES 2.0을 매일 수행하는 모든 사람에게 기본 지식이어야한다는 느낌을 받았으므로 누군가가 내 질문에 답하거나 올바른 방향을 알려줄 수 있기를 바랍니다.
나는 가지고있다:
- 여러 튜토리얼을 보았습니다. 가장 기본적인 쉐이더 외에는 아무것도 사용하지 않습니다.
- 전체 OpenGL ES 2.0 GLSL 사양을 읽으십시오 (그 중 어느 것도 사용 용도에 대해서는 언급하지 않았습니다. 함께 맞추는 방식보다는 모든 것이 무엇을했는지에 관한 것입니다).
- 내 셰이더를 약간 수정하려고했습니다.
그래서 저는 OpenGL 워크 플로우를 이해하는 데 가까워 졌으면하는데 아직 거기에 있지 않은 것 같습니다.
편집 : 나중에 잘 찾았습니다.
응용 프로그램이 OpenGL ES 2.0 용으로 작성된 경우 응용 프로그램에서 장면을 렌더링하는 데 필요한 모든 작업을 수행하는 많은 스위치와 조건이있는 단일 셰이더를 만들지 마십시오. 대신 특정 집중 작업을 수행하는 여러 셰이더 프로그램을 컴파일하십시오.
이는 iOS OpenGL ES 2.0 가이드 라인 에서 가져온 것 입니다.
여러 셰이더를 사용할 수 있지만 셰이더간에 전환하는 데 비용이 많이들 수 있으므로 셰이더의 모든 개체를 그린 다음 다음 셰이더로 전환하고 해당 셰이더를 사용하여 모든 개체를 그리는 등의 방법을 사용하는 것이 좋습니다.
셰이더간에 전환하려면 glUseProgram()
.
'programing' 카테고리의 다른 글
여러 줄 TextBox에 줄을 추가하는 방법은 무엇입니까? (0) | 2021.01.17 |
---|---|
CSS 너비 : calc (100 % -100px); (0) | 2021.01.17 |
'ws : // xxx : nn'에 대한 WebSocket 연결 실패 : 핸드 셰이크 응답을 받기 전에 연결이 종료 됨 '오류를 잡는 방법? (0) | 2021.01.16 |
단일 어셈블리 다국어 Windows Forms 배포 (ILMerge 및 위성 어셈블리 / 지역화)-가능합니까? (0) | 2021.01.16 |
Python 코드를 Arduino (Uno)에 "컴파일"하는 방법이 있습니까? (0) | 2021.01.16 |