2011-09-26 5 views
3

2D 공간에서 점을 나타내는 2D VBO 객체가 있습니다. 그 시점에서 임의의 모양을 그리는 가장 좋은 방법은 무엇입니까? 내가 각각 빨간색 'X'를 그려보고 싶다고하자.OpenGL VBO 쉐이더

이렇게하려면 쉐이더를 사용할 수 있습니까?

답변

1

특수 셰이더가 필요하지는 않습니다. 포인트 스프라이트 만 사용해도됩니다. 이것은 기본적으로 VBO를 점 집합 (glDrawArrays(GL_POINTS, ...) 사용)으로 그리고 점 스프라이트가 점 크기가 1보다 크다고 가정 할 때 각 점의 위치에 질감이있는 사각형 ('X'질감으로)을 그릴 수있게하는 것을 의미합니다 픽셀.

실제로 각 점의 위치에서 지오메트리를 생성하려면 지오메트리 셰이더를 사용할 수 있습니다. 이 방법을 사용하면 VBO를 점 집합으로 렌더링하고 기하 구조 셰이더 내부의 각 점에 대해 두 개의 선 ('X') 또는 모든 지오메트리를 생성 할 수 있습니다.

geometry shader의 대안은 instanced 배열입니다 (geometry shaders에서 필요한 GL3/DX10 하드웨어가 필요합니다). 이렇게하면 'X'모양의 여러 인스턴스를 그려 인스턴스별로 인스턴스가 한 번씩 고급 특성을 사용하여 인스턴스의 개별 위치를 VBO 포인트에서 가져올 수 있습니다.

마지막 대안은 CPU에서 수동으로 도형의 도형을 생성하여 모든 'X'를 선이나 스프라이트 또는 기타로 간주하는 라인 세트 또는 쿼드 세트로 끝내는 것입니다.

가장 쉬운 방법은 (가장 빠른 방법 일 수도 있지만 가장 확실하지는 않습니다.) 방법은 포인트 스프라이트 접근법을 먼저 언급해야합니다. 일반적인 클리핑 문제는 귀하의 사례에서 그다지 문제가되지 않아야하며 사용자에게는 보이지 않아야합니다. 어쨌든 3D 모양이 필요합니다. 이렇게하면 CPU에서 직접 지오메트리를 생성 할 필요가 없으며 특별한 셰이더 또는 GL3/DX10 하드웨어가 필요하지 않습니다 (요즘은 꽤 일반적 임에도 불구하고). 필요한 것은 모양의 텍스처와 포인트 스프라이트 (GL 1.5 이후 핵심)입니다.

이러한 일반적인 아이디어로는 아무 것도 말해주지 않으면 OpenGL 및 실시간 컴퓨터 그래픽에 대해 좀 더 깊이 파고 드는 것이 좋습니다.

관련 문제