[graphics] 저수준 그래픽 프로그래밍에 대해 배우기



3 Answers

가장 낮은 레벨은 그래픽 카드의 비디오 RAM입니다. 컴퓨터가 처음 시작될 때 그래픽 카드는 일반적으로 80x25 문자 레거시 모드로 설정됩니다.

이 시점에서 BIOS가 제공 한 인터럽트로 텍스트를 쓸 수 있습니다. 전경색과 배경색을 16 가지 색상의 팔레트에서 변경할 수도 있습니다. 액세스 포트 / 레지스터를 사용하여 디스플레이 모드를 변경할 수 있습니다. 이 시점에서 디스플레이 메모리에 다른 글꼴을로드하고 80x25 모드를 사용한다고해도 (OS 설치는 일반적으로이 작업을 수행합니다) 또는 VGA / SVGA를 사용할 수 있습니다. 그것은 매우 복잡합니다. 그것이 바로 운전자입니다.

카드가 '상위'모드에 있으면 비디오 카드에 매핑 된 메모리에 액세스하여 화면에 표시된 내용을 변경합니다. 그것은 당신이 보상해야하는 각 라인의 끝에서 화면에 매핑되지 않은 픽셀의 '더티 영역'이있는 픽셀 단위로 가로로 저장됩니다. 하지만 예, 메모리의 이미지 픽셀을 화면에 직접 복사 할 수 있습니다.

DirectX, OpenGL과 같은 것들. 명령을 화면에 직접 쓰는 대신 그래픽 카드로 보내면 자동으로 화면이 업데이트됩니다. "이봐, 네가이 이미지를 VRAM 여기, 여기, 여기에 넣는다"또는 "이 변환 행렬을 사용하여이 삼각형을 그려라."와 같은 명령은 픽셀 단위의 시간에 비해 약간의 시간이 걸립니다. CPU가 당신에게 감사 할 것입니다.

DirectX / OpenGL은 모든 명령을 지원하는 프로그래머 친화적 인 라이브러리입니다. 보다 직접적인 접근 방식은 비생산적 일뿐입니다.

SDL은 추상화 레이어이므로, 각 시스템에서 다른 방식으로 작업하게 될 것이라고 생각합니다. 하나는 세미 다이렉트 스크린 쓰기, 다른 Direct3D 등이 될 수 있습니다. 코드가 교차 플랫폼 인 경우 가능한 한 가장 빠릅니다.

GDI / GDI + 및 XWindow 시스템. 창을 그리기 위해 특별히 고안되었습니다. 원래 그들은 픽셀 단위 (pixel by pixel) 방식을 사용 했었습니다. 버튼을 누르거나 창을 옮길 때 다시 그려야했기 때문에 충분했습니다. 그러나 이제는 가속화 된 드로잉을 위해 Direct3D / OpenGL을 사용합니다. 효과). 최적화는 이러한 라이브러리의 버전 및 구현에 따라 다릅니다.

따라서 가장 강력한 성능과 속도를 원하는 경우 DirectX / openGL을 사용하십시오. SDL은 크로스 플랫폼 환경을 최대한 활용하고 OpenGL과 통합하는 데 확실히 유용합니다. 윈도우 시스템은 마지막으로 제공되지만 과소 평가하지는 않습니다. 특히 MS가 최근에 나오고있는 것들과 함께.

Question

그래픽 응용 프로그램을 만드는 데 사용할 수있는 다양한 추상화 레이어에 대해 배우는 데 흥미 롭습니다.

나는 많은 용어를 던져 보았습니다. 가장 높은 수준의 추상화에서 C #, .NET, pyglet 및 pygame과 같은 것들에 대해 듣게되었습니다. 더 아래로, 나는 DirectX와 OpenGL에 대해 듣는다. DirectDraw, SDL, Win32 API, WxWidgets과 같은 다른 멀티 플랫폼 라이브러리가 있습니다.

이 레이어 중 하나가 끝나는 곳과 다음 단계가 시작되는 곳을 잘 이해하려면 어떻게해야합니까? C에서 Windows에서 창을 만드는 "가능한 최저 수준"의 방법은 무엇입니까? C ++은 어떻습니까? (코드 샘플은 신성한 것입니다.) X11에서는 어떨까요? Win32 API를 기반으로 OpenGL과 DirectX의 Windows 구현이 구현 되었습니까? 어디에서 이러한 것들에 대해 배우기 시작할 수 있습니까?

그래서 프로그래밍 Windows 가 제안되는 또 다른 질문이 있습니다. Linux의 경우는 어떻습니까? 그런 책이 있나요?

저는 이것이 매우 저레벨이며, 더 친숙한 많은 도구가 있다는 것을 알고 있습니다 만, 적어도 표면 아래에서 일어나는 일의 기초를 배우고 싶습니다. 파이 게임처럼 뭔가로 시작하는 방망이 바로 창문과 벡터를 벗기 시작하고 싶은만큼 나를 위해 너무 높은 수준입니다. 컴퓨터에 물건을 어떻게 그리는 지 전체 개념 회로를 만들어야 합니다 .

나는 책과 자료에 대한 제안을 분명히 고맙게 생각할 것이다. 그러나이 질문에 대한 답이 그래픽 프로그래밍에 대한 다른 접근 방식으로 "Hello world"에 도달하는 많은 다른 방법으로 가득 차 있다면 엄청나게 멋지다 고 생각한다. 기음? C ++? OpenGL 사용? DirectX 사용? Windows XP에서? 우분투에서? 어쩌면 나는 너무 많이 요구할지도 모른다.




libX11은 X11의 가장 낮은 레벨 라이브러리입니다. opengl / directx가 드라이버 / 하드웨어와 직접 대화 (또는 지원되지 않는 운영체제를 에뮬레이트)한다고 생각하기 때문에 가장 낮은 수준의 라이브러리가 될 것입니다.

매우 낮은 수준의 프로그래밍으로 시작하려면 VGA 용 x86 어셈블리 코드를 찾아 dosbox 또는 유사한 복사본을 실행하십시오.







MSWindows에서는 쉽게 사용할 수 있습니다 : 표준 Windows 프로그래밍 API 이든 DirectX-family API 이든 상관없이 API가 제공하는 것을 사용하면 사용자가 사용하는 것이므로 문서화가 잘됩니다.

X 윈도우 환경에서 제공되는 X11 라이브러리 를 사용합니다. X에서 윈도우 잉의 원리를 이해하려면이 작업을 수행하는 것이 좋습니다. 다른 사람들이하지 말라는 사실에 신경 쓰지 마십시오. 실제로 X에서 그래픽과 윈도우 작업을 이해하는 데 도움이 될 것입니다. X- 프로그래밍에 대한 설명서를 읽을 수 있습니다 (구글). (이 연습을 한 후에는 더 높은 수준의 라이브러리를 감상 할 수 있습니다!)

위와 별개로, 칩 레벨을 제외한 절대적으로 가장 낮은 레벨에서 사용할 수있는 다양한 그래픽 모드로 전환하는 인터럽트를 호출하여 화면 버퍼에 쓸 수 있지만, 어셈블러를 사용해야 할 것이고, 다른 것은 너무 느릴 것이다. 이 방법은 휴대용이 아닙니다.

또 다른 글은 훌륭한 자료 인 Abrash 's Black Book을 언급합니다.

편집 : 리눅스 프로그래밍에 관한 책은 : 커뮤니티의 일이며 많은 하우투가 있습니다. 또한 포럼을 찾아 가입하십시오. 문명 활동을하는 한 모든 도움을받을 수 있습니다.



Related



Tags

graphics