2010-07-12 10 views
5

몇 가지 간단한 2D 그래픽을 그리기 위해 C 및 C++에서 DirectDraw를 사용했습니다. 필자는 서페이스를 만들고, 포인터를 사용하여 쓰고, 백 버퍼를 뒤집고, 화면 외부에 스프라이트를 저장하는 등의 단계에 익숙했습니다. 오늘 C 또는 C++로 2D 그래픽 프로그램을 작성하고자한다면 어떻게해야할까요?간단한 2D 그래픽 프로그래밍

  1. 동일한 프로그래밍 방법이 계속 적용됩니까? 아니면 비디오 하드웨어 추상화에 대한 다른 이해가 필요합니까?
  2. Windows 및 Linux에서 사용할 수있는 라이브러리 및 도구는 무엇입니까?
+1

OpenGL은 가장 확실한 즉각적인 응답입니다. 간단한 응용 프로그램에 대한 학습 곡선이 적어 강력합니다. – Akusete

답변

3

Windows 및 Linux에서 사용할 수있는 라이브러리 및 도구는 무엇입니까?

SDL, OpenGLQt 4 (이것은 GUI 라이브러리이지만, 2D 렌더링을위한 충분한/빠른 유연) 프로그램의이 같은 방법은 여전히 ​​적용하거나 내가 있어야 할 것이다

비디오 하드웨어 추상화에 대한 다른 이해?

일반적으로 모든 프레임에서 "포인터를 사용하여"표면에 데이터를 쓰지 않고 대신 API에서 제공하는 방법을 사용하여 조작/그리기합니다. 이것은 드라이버가 시스템 메모리에서 비디오 메모리로 비디오를 매 프레임 전송할 때보 다 비디오 메모리가 더 빨리 작동하기 때문입니다. 필요한 경우 하드웨어 표면/텍스처 (심지어 모든 프레임 동안)에 데이터를 쓸 수 있지만 최적의 성능을 얻으려면 표면을 특수하게 처리해야 할 수도 있습니다. 예를 들어, DirectX에서 표면 데이터가 자주 바뀌고 표면에 데이터를 쓰고 다시 읽지 않는다는 것을 운전자에게 알려줘야합니다. 또한 3D 기반 API (openGL/DirectX)에서 다른 서페이스의 렌더링 서페이스는 다소 "특별한 경우"이므로 "렌더링 대상"(DirectX) 또는 "Framebuffer 개체"(OpenGL)를 사용해야 할 수도 있습니다. DirectDraw와는 다른 것입니다 (AFAIK, 무엇이든간에 블릿 할 수있는 곳). 좋은 점은 3D api를 사용하면 표면/텍스처를 매우 유연하게 처리 할 수 ​​있다는 것입니다. 스트레치, 회전, 색상을 사용하여 색상을 혼합하고, 블렌딩하고, 쉐이더를 사용하여 처리하는 작업을 하드웨어에서 수행 할 수 있습니다.

하드웨어 지원이있는 최신 3D API는 자주 8 비트 텍스처로 작동하지 않으며 ARGB 이미지를 선호합니다. 필요한 경우 팔레트가있는 8 비트 표면을 에뮬레이트 할 수 있으며 2D 저급 API (SDL, DirectDraw)를 사용하면이를 제공합니다. 또한 조각/픽셀 쉐이더를 사용하여 하드웨어에서 8 비트 텍스처를 에뮬레이트 할 수 있습니다.

표면을 사용하는 '오래된 학교'교차 플랫폼 방식 (예 : '포인터를 사용하여 모든 프레임에 데이터 쓰기'- 즉 소프트웨어 렌더러가 필요함)를 원하면 SDL에서 쉽게 허용합니다. 더 높은 수준의 유연한 작업을 원한다면 Qt 4 및 OpenGL을 사용할 수 있습니다.

2

Linux에서는 OpenGL을 사용할 수 있지만 3D 지원뿐만 아니라 2D를 지원합니다.

1

SDL도 매우 쉽게 사용할 수 있습니다. 또한 크로스 플랫폼이며 사용자의 요구를 처리 할 수있는 플러그인을 포함하고 있습니다. 3D 지원이 필요한 경우에는 OpenGL과 잘 조화를 이룹니다.