2011-03-17 5 views
7

MS Paint와 같은 응용 프로그램을 만들려면 렌더링 그래픽에 OpenGL을 사용해야합니까? 전통적인 GDI 대 OpenGL을 사용하는 경우 성능에 대해 언급하고 싶습니다. 그리고이 목적을위한 몇 가지 더 나은 라이브러리가 있다면, 저에게 하나를 참조하십시오.2D 그래픽 용 OpenGL을 사용해야합니까?

답변

8

GDI, X11, OpenGL ... 렌더링 API입니다. 즉, 일반적으로 이미지 조작에 사용하지 않습니다 (이 작업을 수행 할 수 있지만 몇 가지 예방 조치가 필요함).

MS Paint와 같은 그리기 응용 프로그램에서 픽셀 기반 인 경우 일반적으로 관례 코드 또는 특수 이미지 조작 라이브러리를 사용하여 일부 그림 버퍼를 조작 한 다음 전체 버퍼를 렌더링 API로 보냅니다.

데이터 모델이 획 및 개별 도형, 즉 벡터 그래픽으로 구성된 경우 OpenGL은 상당히 좋은 백엔드입니다. 그러나 OpenVG (OpenGL을 기반으로하는 현재 구현에서는 OpenGL 위에 있지만 GPU에서 직접 작동하는 기본 구현이 올 수 있음)와 같은 벡터 그래픽을위한 다른 API를 조사해볼 가치가 있습니다.

현재 컴퓨터에서 성능 문제가 발생하지 않으므로 해당 기준에서 API를 선택하지 마십시오. OpenGL은 텍스처링, 알파 블렌딩 등에서 GDI보다 확실히 빠릅니다. 그러나 시스템 및 GPU에 따라 순수한 GDI는 호를 그리거나 복잡한 권선 규칙이있는 복잡한 자체 교차 폴리곤을 작성하는 것과 같은 간단한 작업에서 OpenGL보다 성능이 월등합니다.

+0

"현재 구현에서 OpenGL을 기반으로하지만 GPU에서 직접 작동하는 기본 구현은"무엇을 의미합니까? " – Calvin1602

+0

@ Calvin1602 : 지금까지 기존 OpenCV 구현은 OpenGL을 백엔드로 사용합니다. 그러나 GPU 공급 업체는 중간 OpenGL 레이어없이 GPU에 직접 액세스하는 최적화 된 OpenCV 드라이버를 구현하기로 결정할 수 있습니다. 벡터 그래픽의 일부 측면은 OpenGL의 관점에서 표현하기 어렵 기 때문에보다 직접적인 접근이 절실히 필요합니다. – datenwolf

+0

답변에 openCV, openVG 및 아마도 openCL을 혼합하지 않습니까? 나는 너를 따르지 않는다. – Calvin1602

4

OpenGL을 사용하려면 이 아닌이 필요하지 않습니다. GDI에 대한 수년간의 경험이 있지만 OpenGL에 관한 한 가지를 모르는 경우는 예외입니다.

반면에 OpenGL은 많은 경우에 우월합니다. GLSL 쉐이더에서 레이어를 합성하거나 색조/채도/밝기/명암을 조정하는 것은 컴퓨터에 합리적으로 새로운 카드가있는 경우 몇 배 더 빠릅니다 (사실 "거의 즉시"). "솜털 모양"펜으로 자유로운 길을 칠하면 (즉, 알파 투명도로 스프라이트를 계속 반복하여 혼합하는 경우) 훨씬 빠르게 진행됩니다. 비교적 적당한 크기의 이미지에서 대부분의 필터 커널은 실시간에 가깝게 실행되어야합니다. bilinear 필터링을 사용한 재조정은 하드웨어에서 실행됩니다.

그런 것들은 512x512 이미지에서는 문제가되지 않습니다. 거의 모든 것이 그러한 해상도에서 즉각적으로 발생하지만, 디지털 카메라의 일반적인 4096x3072 (또는 그 이상) 이미지에서는 매우 눈에 수 있습니다. 특히 4-6 층.

관련 문제