하위수준의 그래픽(3D) 프로그래밍을 이해하려면?

아르아의 이미지

컴퓨터구조, 어셈블리언어만 좀 어느정도 알면은
C코드가 어떻게 프로그램이 되서 어떻게 돌아가는지 어느정도 알 수 있듯이
C로 OpenGL프로그램을 짰을때 이게 어떻게 돌아가는지를 알고싶은데
마땅히 찾아볼만한 책이나 문서를 모르겠네요. 추천해주셨으면 합니다

최종적으로는 씨퓨를 어셈블리를 통해 제어하듯이
글픽카드에 직접 접근해서 해당기능을 사용해보고 싶은데요
어디까지 제어하는게 가능하고 어떻게 제어할 수 있는지
그런것들을 다룬 책이나 글을 찾을수가 없네요 :(

그리고 예를들어 함수 GL_foo(...); 를 호출하면
(하드웨어가속이 된다고 했을때)
코드가 어디론가 흐르고 흘러 분명
그래픽카드 디바이스 드라이버를 찾고,
찾고나서 드라이버를 통해 글픽카드에게 일 시키고... 하는 과정이 있을건데
리눅스나 윈도즈에서는
구체적으로 어느부분이 각 기능을 담당하는건지 하는 전체적인 구조도 알고싶습니다

익명 사용자의 이미지

Mesa같은 라이브러리 소스를 보면, 내부에서 어찌 돌지를 대충 예측할 수 있습니다. 3D라 매트릭스(수치연산)이 많이 있는데, 하드웨어 원리보다는 수학원리에 가깝겠지요. 그래픽 하드웨어에서 수치연산을 고속으로 처리하도록 설계되어 있는 로직을 구현하고 있을테고, 이를 활성화시키는 디바이스 드라이버가 제공될 것이고, 사용자 수준에 라이브러리 형태로 래핑되어 있을테니, 말입니다.
만일 이 루틴이 하드웨어에 없다면 당근 소프트웨어로 에뮬레이션했을테니(소프트웨어 라이브러리 호출로 이어질테니..렌더링도 소프트웨어에서 에뮬레이션하고, 다 그래서, 그래픽 디바이스로 날리고...복사도 많겠군요.), 결국, 속도는 다소(?) 떨어지겠군요. 정밀연산도도 다소 떨어질 수 있을 수(아닐수도) 있고...

* 때때로, 하드웨어 제작자 보다도, 디바이스 드라이버를 더~ 잘만드는 경우를 목격했습니다. 하드웨어 제작자가 제공하는 드라이버가 최고일것이라는 생각은 위험하다는 얘기지요.

Necromancer의 이미지

선형대수에 나오는 매트릭스들이 3D 그래픽의 기초죠.

선형대수부터 공부하십시오.

Written By the Black Knight of Destruction

익명 사용자의 이미지

원하시는것이 3D그래픽 프로그래밍 스킬인지
아니면 low-level hardware 제어 스킬인지
불분명하네요.

둘다 동시에 원하신다면..별개로 학습은 가능하지만
둘을 연계시켜 공부하는건 큰 의미가 없다는걸 말씀드립니다.

물론 3D 그래픽을 제어하기 위해 어느정도의 하드웨어지식이
요구되는게 맞긴한데.. 과거처럼 직접 그래픽 카드에 접근해서
이것저것 일일이 다 제어하는 시대는 벌써 한참 지났습니다.

그동안 상당한 추상화를 통해 프로그래머가 하드웨어를 몰라도
3D 이미지를 잘 만들어낼 수 있도록 발전되어왔죠.

아마 그래픽 카드 드라이버를 작성 하신다면 그런 세밀한
하드웨어 지식이 필요하겠죠..하지만 이건 3D 그래픽 프로그래밍
과는 별개입니다.

원하시는게 어떤것인지 알 수 없어서 그냥 이렇게 대강 적습니다.

simpid의 이미지

3D 가속기를 직접 조작하고 싶으신것 같은데...

칩 제조사 별로 다른 문제로... 그래픽 제조업체에서 공개한 자료나 별도의 요청을 통해 구할 수 있습니다.

예전에 DOS 시절엔 화면에 점하나 찍기 위해서... 실제로 이렇게 했었죠.
공개되지 않은 내용은 직접 분석을 통해 알아내기도 했었구요.

결론적으로 별로 영양가 없는 내용이니 그냥 DirectX 사용법을 익히는게 범용적이고 효과적이지 않을가 생각합니다.

gamdora의 이미지

그보다는 OpenGL이 더······. ^_^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.