2010-06-09 2 views
1

이것은 정확히 프로그래밍 질문이 아니지만 궁금한 것이 있습니다.PC에서 그래픽과 사운드 프로그래밍 - 초보자를위한 많은 질문과 그 중 다수!

PC에서 코드와 출력물로 그래픽 및 사운드를 처리하는 방법은 무엇입니까? 그래픽

내 생각 엔 :

  1. 모니터의 그래픽 출력의 프레임에 정확히 충분한 공간을 보유하고 어딘가에 일부 예약 된 메모리 공간이 있습니다. IE : 800 x 600, 24 비트 컬러 모드 == 800x600x3 = ~ 1.4MB 메모리 공간

  2. 프로그램을 새로 고칠 때마다이 공간에 비디오 데이터가 기록됩니다. 이 작업은 모니터를 새로 고치기 전에 완료됩니다. 간단한 2D 게임을 가정 해보십시오. 그래픽 데이터는 색상 값을 나타내는 많은 바이트로 기계어 코드에 저장됩니다. 실행중인 프로그램이 PC에 지시하는 내용에 따라 프로세서는 적절한 데이터를 읽고이를 메모리 공간에 씁니다.

  3. 모니터가 새로 고침 될 때마다 각 메모리 공간에서 바이트 단위로 읽고 각 픽셀의 각 색상 요소에 대한 값에 따라 하드웨어를 활성화합니다.

이 모든 과정은 매우 빠르고 반복적으로 x 번 반복됩니다. x는 모니터의 재생 빈도입니다. 나는 이중 버퍼링의 대화를 피함으로써 내 자신의 가능성 - 잘못된 설명을 단순화했습니다 등

다음

제 질문은 다음과 같습니다

A) 위의 추측 (세 단계가) 얼마나 가까이입니까?

b) 그래픽을 순수한 C++ 코드로 어떻게 통합 할 수 있습니까? 실용적인 것은 모든 사람들이 그래픽 라이브러리 (SDL, OpenGL 등)를 사용한다고 가정하지만, 예를 들어이 라이브러리가 어떻게 수행합니까? 순수 C++ 코드에 그래픽을 수동으로 포함시키는 것 (예 : 2D 부정확)은 비트 값의 2 차원 배열 (픽셀 당 여러 RGB 값을 포함하도록 3 차원)을 만드는 것과 관련이 있습니까? 이것이 어떻게 하루에 다시 waaay 일 것입니까?

c) 비트 맵을 사용하는 SDL 등의 라이브러리는 실제로 비트 맵/etc 파일을 실행 파일의 컴퓨터 코드로 작성하고 문제의 언급 된 것과 동일한 문제로 빌드 한 것처럼 사용할 수 있습니다 b 위?

d) 위의 제 3 단계에서 관련된 레지스터가 있습니까? 마찬가지로, 화면에 1 바이트의 단일 색상을 출력하기 위해 일부 레지스터에 일부 바이트 값을 쓸 수 있습니까? 아니면 순수하게 전용 메모리 공간 (= RAM) + 하드웨어 상호 작용입니까?

e) 마지막으로,이 모든 작업은 어떻게 완료 되었습니까? (나는 모른다 :)

답변

2

a.

  1. 오래 전, 그랬지만 꽤 오랫동안되지 않았습니다. 대부분의 하드웨어는 여전히 이러한 유형의 구성을 지원할 것이지만 대체로 후진으로 - 실제로 작동하도록 설계된 방식이 아닙니다. 현재 대부분의 그래픽 카드에는 PCI/AGP/PCI-E 버스를 통해 CPU에서 주소 지정이 가능하도록 매핑 된 메모리 블록이 있습니다. 그 블록의 크기는 화면에 표시되는 것과 다소간 독립적입니다.

  2. 다시 한 번 그 방법이 대부분 효과가 있었지만 더 이상 그렇지 않습니다.

  3. 대다수.

b. OpenGL은 일반적으로 OS의 일부인 코어 라이브러리와 그래픽 칩셋 (또는 카드) 공급 업체가 제공하는 드라이버로 구성됩니다. CPU와 GPU 간의 정확한 인력 분배는 다소 다르지만 (공급 업체 간, 단일 공급 업체의 제품 내에서 시간이 지남에 따라) SDL은 사용자가 설명한 것처럼 간단한 프레임 버퍼의 일반적인 개념을 기반으로합니다.

c. 보통은 비트 맵, 텍스처 등을 목적에 맞는 형식으로 개별 파일로 빌드합니다.

d. 주요 그래픽 칩셋 벤더 (ATI/AMD와 nVidia)는 레지스터 레벨의 문서를 어느 정도 비밀로 유지하는 경향이 있지만 (변경 될 수는 있지만 오픈 소스 개발자의 지속적인 압력이 문서화되어 있습니다. , 폐쇄 형 소스 드라이버가 아닙니다.) 대부분의 하드웨어에는 전용 선 그리기와 같은 기능이 있습니다. 여기서 선 매개 변수를 지정된 레지스터에 넣을 수 있으며 지정된 선을 그립니다. 정확한 세부 사항은 , 널리는입니다.

e. 죄송하지만, 이미 길어지고 있습니다. 소리는 꽤 넓은 영역을 커버합니다 ...

-1

그래픽의 경우 Jerry Coffin은 꽤 좋은 답변을 가지고 있습니다.

사운드는 실제로 그래픽 처리 방법에 대한 (OP의) 설명과 비슷하게 처리됩니다. 매우 기본적인 수준에서 "버퍼"(어딘가에있는 일부 메모리)가 있습니다.

소프트웨어는 해당 버퍼로 재생할 사운드를 씁니다. 기본적으로 주어진 순간에 스피커 콘의 위치를 ​​인코딩합니다.

"CD 품질"오디오의 경우 초당 44100 개의 값 (44.1kHz의 "샘플 속도")이 있습니다.

쓰기 위치 뒤에 조금 뒤쪽에 버퍼의 읽기 위치에서 오디오 하위 시스템 읽기가 있습니다.

이 읽기 ​​위치는 쓰기 위치 뒤에서 약간 뒤떨어집니다. 거리가 대기 시간이라고합니다. 거리가 멀어지면 딜레이가 더 많이 발생하지만 읽기 위치가 쓰기 위치를 따라 잡아서 사운드 장치에 실제로 재생할 수있는 것을 남기지 않도록 도와줍니다!