2015-01-14 5 views
0

그날의 길 돌아 가기 게임 프로그래밍 책에서 C를 배웠습니다. 올바르게 기억한다면, 게임 "엔진"이 할 첫 번째 일 중 하나는 디스플레이 모드를 렌더링으로 전환하는 것입니다. 이것은 640x480 디스플레이 모드 (모드 13 일 수도 있겠습니까?)로 전환하기 위해 약간의 asm을 필요로하므로 화면에 직접 그릴 수 있습니다. 그런 것.명령 행에서 디스플레이 모드 변경하기

내 질문은 무엇입니까? 비슷한 것을하는 명령 행 프로그램 작성에 관심이 있습니다. 내가 그릴 수있는 래스터 모드에 빠져들지 만, 내 프로그램이 kde, unity, Aqua 등과 같은 일종의 창 관리자에서 돌아가고 있다고 가정하지는 않습니다.

OpenGL이 할 수있는 것이겠습니까? 제공 (또는 OpenGL은 창 관리자도 가정 함). 내 제안 된 프로그램은 게임이 아니지만 이상적인 기본 기본 화면 (2d 줄, 원 등)을 그릴 수있는 기본 화면으로 시작합니다

건배!

+1

모드 13은 320x200 뿐이지 만 다른 모든 고밀도 모드에서는 블릿 마스크가 필요한 모든 바이트에 선형 액세스가 가능하므로 가장 많이 사용되었습니다 (한 번에 1 색 비트 쓰기) 또는 뱅크 전환 (그래픽 칩 유형마다 특수 코드가 필요함). .. 그런데, 도서관을 추천하는 것은 주제가 아니므로 SDL은 언급하지 않을 것입니다. (죄송합니다.) – usr2564301

+0

일반적으로 베어 시스템을 사용하여 메모리 (또는 비디오 메모리의 최신 비디오 카드)에 두 개의 버퍼를 할당하십시오. 비디오 수직 귀선 시작을위한 인터럽트를 인 에이블한다. 이 인터럽트는 다른 버퍼가 준비되면 어떤 버퍼가 표시되는지를 교환합니다. 어떤 버퍼가 표시되고 있지 않은지 표시합니다. 모든 기록은 표시되지 않는 버퍼에 기록됩니다. 버퍼를 표시 할 준비가되면 표시 할 버퍼의 표시를 변경하여 인터럽트가 비디오 카드에 최신 버퍼를 표시하도록합니다. 코드는 새로 사용 가능한 버퍼를 복사/업데이트 할 수 있습니다. – user3629249

답변

1

현대의 운영 체제에서는 프로그래머가 이전처럼 낮은 수준의 그래픽 루틴에 편리하게 액세스 할 수 없습니다. 부분적으로 이것은 GPU의 출현으로 인한 것입니다. GPU가 등장하기 때문에 그래픽 하드웨어를 사용하는 것이 CPU가있는 경우보다 훨씬 더 어려워집니다. 다른 이유는 창 관리자가 점점 더 복잡 해짐에 따라 각 운영 체제가 프로그래머에게 제공하는 그래픽 샌드 박스가 더 제한되어 있기 때문입니다.

OpenGL은 분명히 가치가 있습니다. 크로스 플랫폼, 다기능, 사용 가능한 모든 하드웨어 (그래픽 카드 포함)를 자동으로 사용합니다. OpenGL 자체는 윈도우 화 컨텍스트에 대한 액세스를 직접 제공하지는 않지만 OpenGL 유틸리티 라이브러리 (GLUT)를 사용하여 쉽게 작성할 수 있습니다. 그러나 OpenGL은 매우 낮은 수준이므로 프레임 버퍼, 플러싱 및 비트 마스크와 OpenGL 개발을 악몽처럼 만들 수있는 모든 종류의 저비용 기술을 다루어야합니다.

프로젝트를 시작한 경우 그리기 기능을 제공하고 상자에서 창을내는 더욱 견고한 그래픽 환경이 필요할 것입니다. SDLSFML은 낮은 수준의 그래픽 API를 제공합니다.이 API는 처음에는 좀 더 친숙합니다. 둘 다 OpenGL 위에 구현되므로 원하는 때에 OpenGL 기능을 사용할 수 있지만 좀 더 지루한 부분에 대해서는 걱정할 필요가 없습니다.

요즘 그래픽 프로그래밍을 시작하기에 C 언어가 최고의 언어가 아닐 수도 있습니다. 매일 더 관련성 높은 그래픽 환경을 원한다면 웹이 제공해야하는 것을 확인하고 싶을 것입니다. JavaScript 및 HTML5Canvas는 기본 요소, 이미지 등을 그리는 데 아주 간단한 인터페이스를 제공합니다.