2017-11-11 13 views
0

여러 큐브를 그려야합니다 (데이터에 따라 6k에서 극단적 인 경우 11k 개체까지).OpenGL에서 일정한 지오메트리를 관리하고 색상을 효과적으로 변경하는 방법은 무엇입니까?

큐브는 애니메이션 중에 변경되지 않는 고정 위치를 갖지만 색은 각 프레임을 변경합니다. 한번 지오메트리를 그린 다음 컬러를 다시 그릴 수는 있지만 어떻게 효율적으로 그릴 수 있는지 생각해보십시오.

또한 저는 초보자이기 때문에 OpenGL에 대한 기본 지식 만 가지고 있습니다. (PyOpenGL을 사용한다고 가정 할 때) 가장 좋은 방법은 무엇입니까?

+0

[glBufferData] (https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glBufferData.xml)의 문서를보고 * 사용법에 대한 추가 절을주의 깊게 읽으십시오 * 매개 변수. 위치와 색상을 다르게 할 경우 하나의 정적 플래그와 다른 하나의 플래그를 지정할 수 있습니다. 성능 향상을 위해 드라이버를 구현해야하는 경우에는 구매 전에 (예 : 측정, 측정, 측정) 시도하십시오. – BeyelerStudios

+0

감사합니다. 그렇다면 glBufferData를 업데이트하는 최적의 방법은 무엇입니까? 프레임을 변경할 때마다 매번 호출하고 다른 색상 집합으로 다시 바인딩 할 수 있습니까? – LemurPwned

+0

그러면 모든 색상이 '예'로 변경되면'glBufferData'가 아마도 최적의 방법 일 것입니다. 그렇지 않으면 설명서의 ** 참조 ** 섹션을보십시오. 최적 인 것은 운전자에 따라 크게 달라질 수 있습니다. – BeyelerStudios

답변

0

특히 pyOpenGL에 대한 경험이 없지만 webGL 및 OpenGL과 관련하여 많은 경험이 있으므로 잘하면 도움이 될 것입니다.

일단 드로잉 지오메트리를 한 번 사용한 다음 컬러를 그려야한다는 것을 확실히 알지 못합니다. 위치와 색상을위한 버퍼를 하나만 가지고 컬러를 변경하는 것과 같은 의미입니까? 그렇다면 나는 가능하다고 생각하지 않는다. 왜냐하면 openGL은 한 번에 하나의 버텍스 속성 버퍼 만 처리 할 수 ​​있다고 생각하기 때문이다.

동적 버퍼가 빈번히 액세스 될 수 있으므로 BeyelerStudios가 주석 처리 한대로 그리기 호출을 줄이고 버퍼 사용을 GL_DYNAMIC_DRAW로 설정하기 위해 모든 큐브를 같은 버퍼에 넣는 것이 가장 좋습니다. . 그런 다음 색상을 변경할 때 위치와 색상 데이터를 모두이 버퍼로 업데이트합니다.

도움이 되었기를 바랍니다.

+0

다른 버텍스 객체 버퍼 (속성)를 다른 버텍스 배열 객체 또는 요소 그리기 호출에 다른 사용법 힌트를 첨부 할 수 있습니다. 서로 다른 쉐이더 또는 렌더 패스를 사용하여 서로 다른 재질로 동일한 지오메트리를 공유합시다. [glBindBuffer] (https://www.khronos.org/opengl/wiki/GLAPI/glBindBuffer) – BeyelerStudios

+0

[Tutorial2] (https://www.khronos.org/opengl/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_ C _/_ SDL))에는 두 개의 버퍼를 사용하여 정점 색상으로 지오메트리를 그리는 방법에 대한 예제가 있습니다. – BeyelerStudios

+0

아, 고마워! 나는 그 사실을 알지 못했고, 내가 택한 그래픽 수업에서 결코 그렇게 해본 적이 없다. – kylengelmann