2014-09-07 6 views
1

나는 10M 이상의 2 차원 다각형을 포함하는 회로 청사진을 보여줄 필요가있는 CAD 소프트웨어에서 작업 중입니다. 각 다각형은 단순하다. 95 %는 직사각형이고 다른 것은 10보다 작은 정점이다.OpenGL을 사용하여 2 차원 다각형의 큰 수 (10M) 그리기

전체 디자인을 보여주기 위해 그래픽 메모리 한계를 엄청나게 날려 버릴 거대한 버텍스 버퍼를 만들어야합니다. 그러나, 대부분의 다각형은 그 크기에서 명확하게 보이지 않기 때문에, 나는 선 그리기 알고리즘을 사용하여 그리는 다각형을 최소화하려고합니다. 하지만 이렇게하면 많은 폴리곤 (각 픽셀은 1 픽셀보다 크지 않을 것입니다)이 사라지고 최종 이미지가 잘못됩니다.

또 다른 생각은 다각형을 각각 강하게 연결 (접촉) 할 그룹으로 분리 한 다음 각 그룹에 대해 큰 다각형을 구성하는 것입니다. 일부 수준의 세부 알고리즘은 모양을 변경하지 않고 점을 축소하는 데 사용할 수 있습니다. 이러한 알고리즘이 얼마나 빠르고 다른 스케일 수준을 미리 계산해야하는지 잘 모릅니다.

이 문제를 해결할 수있는 표준 방법이 있습니까? 꽤 많은 시간 동안 해결되었다고 확신합니다 ...

OpenGL 2.1에서이 작업을 수행해야합니다.

+0

인스턴스 렌더링을 살펴보십시오. –

+0

@ColonelThirtyTwo 대부분의 직사각형 크기가 다르기 때문에 인스턴스 렌더링을 사용할 수 없습니다. 그리고 우리는 어쨌든 그것을 지원하지 않는 OpenGL 2.1을 사용했습니다. – CyberSnoopy

+0

인스턴스 렌더링을 사용하여 정점 셰이더에서 직사각형의 크기를 변경할 수 있습니다. –

답변

2

클라이언트 측 정점 배열을 사용할 수 있도록 OpenGL-2.1을 타겟팅하고 있습니다. 효과적으로 의미하는 것 : 당신은 GPU에 아무것도 업로드 할 필요가 없습니다. 데이터는 필요에 따라 프로그램 주소 공간에서 가져옵니다.

물론 10M 삼각형은 많지 않습니다. 일부 직업은 단일 프레임이 1G 삼각형으로 끝나는 프로그램을 사용합니다. 필요한 데이터의 양은 계산하기 쉽습니다.

10M # number of primitives 
* 4 # number of vertices in a quad 
* 4B # sizeof GLfloat 
* 2 # number of elements in a 2D vector 

= 320MB 

별로 많지 않습니다. 요즘에 구입할 수있는 대부분의 GPU는 적어도 512MBi의 메모리가 장착되어 있습니다. 그러나 GPU에 사용 가능한 메모리가 충분하지 않은 경우에도 OpenGL의 메모리 모델은 추상적이며 필요에 따라 데이터가 GPU와 교환됩니다.

+0

및 일부 드라이버는 필요에 따라 선택적으로 GPU에 업로드 할 수 있습니다. –