Биднийг дэмжээд Надад таалагдлаа дээр єдєрт 1 удаа дараарай (^_*)
Та урьд өмнө нь видео тоглоом тоглож байхдаа энийг ер нь яаж бүтээдэг
эсвэл програмчилдаг юм болоо гэж гайхаж байсан байж болох юм.
Бидний нүд компютерийн дэлгэц дээр орших, програмаар тооцоолж үүсгэсэн мянга мянган пикселүүдийн өнгийг хүлээн авч тархируу дамжуулснаар 3-н хэмжээст орчинд байгаа мэт мэдрэмжийг бид амсдаг.
3D програмчлал гэдэг бол товчхондоо энэ пикселүүдийг хэрхэн тооцоолон үүсгэж 3-н хэмжээст орчинг мэдрүүлэх вэ гэдэг явдал юм.
Юуны өмнө та компютерээ нэг задлаад хараарай, диск уншигч тэжээлийн
блок гэх мэт нэмэлт төхөөрөмжүүдийн дунд эх хавтан байрлах бөгөөд эх
хавтан дээр CPU, RAM мөн бас PCI сокет дээр таны график картыг зоож
байрлуулсан байгаа харагдана. График картыг тань GPU буюу Graphics
Processing Unit гэх бөгөөд энэ бол пиксел мэдээлэл үүсгэх зориулалттай
дотроо хэдэн зуун жижиг coprocessor-ууд агуулсан эд билээ. Нэг ёсондоо
компютер доторхи компютер гэлтэй, гэхдээ зөвхөн 3D дүрслэл үүсгэх
зориулалтаар л ажиллана.
Эх хавтан нь south bridge, north bridge гэсэн ерөнхий хоёр хэсэгтэй
бөгөөд north bridge дээр CPU болон RAM байрлана, харин south bridge дээр
нэмэлт төхөөрөмжтэй ажиллах зориулалттай хэсэгүүд буюу PCI сокетүүд
байрладаг. PCI сокет дээр бид дууны карт, график карт гэх мэтийн залгаж
салгаж авч болдог нэмэлт төхөөрөмжүүдийг байрлуулдаг.
south bridge болон north bridge хоёрыг хооронд нь bus гэж нэрлэгдэх
төв шугамаар холбож өгдөг. Энэ bus нь мэдээллийг нэгээс нөгөөд хаягийнх
нь дагуу зөөж өгөхөд ашиглагддаг мөн тодорхой хэмжээний мэдээлэл
дамжуулах мэдээллийн өргөний хэмжээтэй өөрөөр хэлбэл bandwidth, мөн
дээрээс нь секунтэд хэдий хэрийн мэдээлэл нэвтрүүлэх чадвартай вэ
гэдгээр нь бас хэмждэг.
Тэгэхээр график карт мэтийн нэмэлт төхөөрөмжийг програмчлахын тулд
north bridge дээр байрлах RAM дээр орших код болон өгөгдлүүдийг bus-аар
дамжуулан хаягийн дагуу төхөөрөмжрүү upload хийж өгдөг.
Бид 3-н хэмжээст мэдээллийг боловсруулах код болон өгөгдлүүдийг
GPU-рүү илгээх замаар GPU-г машиндуулж өөрөөр хэлбэл ажиллуулж хүссэн
дүрслэлээ гаргаж авдаг байхнээ. Дээр дурдсанчлан GPU бол өөрийн гэсэн
санах ойтой мөн маш олон тооны тусгай зориулалтын жижиг процессоруудтай
байдаг.
График карт нь өгөгдлүүдийг тэдгээр олон тооны процессорууддаа тараан
өгч тооцууллаг өөрөөр хэлбэл агшин зуур хичнээн ч их хэмжээний мэдээлэл
байлаа гэсэн параллелиар тооцооллож дуусгана зөв боломжит зорилгодоо
ашиглаж чадвал энэ бол нэг төрлийн супер компютер гэсэн үг юм.
Сүүлийн үед график картуудын параллелиар ажиллах чадвартай нь
холбоотойгоор зөвхөн пиксел болон 3-н хэмжээст мэдээллийг тооцооллох
зорилгоор бус ерөнхий зориулалтын тооцоололд ч гэсэн хэрэглэх хандлага
ажиглагдаж байна. Үр ашиг нь гэвэл хүнд хүнд энкрүпт алгоритмаар шахаж
цоожилсон файлуудыг задлах, видео тоглоомын физик, өгөгдлийн бааз гээд
явж өгнө.
Та магадгүй гайхаж байж болох юм яагаад заавал график картанд тийм
олон тооны тусгай зориулалтын CPU хэрэгтэй гэж. 3D дүрслэл боловсруулдаг
real-time, интерактив програм хангамжууд нь цаанаа маш олон vertex,
пиксел мэдээллүүдийг түргэн боловсруулж байхыг шаарддаг, түүний тулд
олон тооны жижиг CPU хэрэг болно.
Ямарваа нэгэн компютер програм ажиллахдаа RAM буюу шуурхай санах ой
дээр өгөгдлүүдээ байрлуулж CPU буюу төв процессороор өгөгдлөө
машиндуулах замаар ажилладаг, хэрэв тэр програм(видео тоглоомууд, CAD,
визуликашн програмууд ч юм уу…) GPU ашиглахыг хүсвэл тэр GPU-г
програмчилж ажиллуулж чаддаг өөрөөр хэлбэл хэн нэгэн vendor болон
төхөөрөмж үйлдвэрлэгч аль эсвэл програмистуудаар тусгайлан хангаж өгсөн
функцүүдийн санг хэрэглэх хэрэгтэй байдаг. Өөрөөр хэлбэл GPU-г ажиллуулж
өгдөг функцүүдийн олонлог.
3D програмчлал гэдэг нь өөрөөр тэдгээр олон функцүүдийг ашиглаж хүссэн үр дүн зураглалаа гаргаж авах гэж ойлгож ч болох юм.
Энэ функцүүдийн олонлогийг та бид DirectX, OpenGL гэх мэт нэрээр нь
таних байхаа ерөнхийд нь API сан гэдэг бөгөөд Application Programming
Interface гэсэн үгний товчлол.
Хэн нэгэн график карт үйлдвэрлэгч компани (AMD, NVidia гэх мэтийн
vendor-ууд) нь бүтээгдэхүүн буюу график картдаа зориулан драйвер
програмыг бичиж өгч нийлүүлдэг. Драйвер програм нь тэрхүү GPU-г таны
үйлдлийн системтэй харилцан ойлголцож ярилцах боломжийг олгоно. Тэр
ойлголцох хэлбэр нь янз бүрийн API сангуудаар хэрэгжүүлэгдэж болно.
Өөрөөр хэлбэл DirectX нь өөрийн гэсэн дүрэмтэй нэршилтэй OpenGL нь ч
гэсэн хэрэглэгдэх байдал гэх мэтээрээ ялгаатай ондоо байдаг. Тэгэхээр та
GPU програмчлахын тулд нэг бол OpenGL нэг бол DirectX ашиглах ёстой
гэсэн үг юм.
Манай нийтлэлийн хувьд бид OpenGL хэрэглэх болноо.
Та зөвхөн OpenGL болон DirectX гэсэн хоёр янзын API сан байдаг гэж
ойлгож болохгүй, энэ хоёроос гадна OpenGL ES, WebGL, X3D, RenderMan …
гэх мэтийн олон API-нууд бий. Хамгийн их хэрэглэгддэг нь л энэ хоёр юм.
Товчхондоо ердөө л ийм.
Нэмэлт уншлагууд
- http://en.wikipedia.org/wiki/Graphics_processing_unit
- http://en.wikipedia.org/wiki/Motherboard
- http://en.wikipedia.org/wiki/Northbridge_(computing)
- http://en.wikipedia.org/wiki/Southbridge_(computing)
- http://en.wikipedia.org/wiki/Bus_(computing)
- http://en.wikipedia.org/wiki/Conventional_PCI
- http://en.wikipedia.org/wiki/3D_computer_graphics
- http://en.wikipedia.org/wiki/Video_game
- http://en.wikipedia.org/wiki/GPGPU
- http://en.wikipedia.org/wiki/DirectX
- http://en.wikipedia.org/wiki/OpenGL
- http://en.wikipedia.org/wiki/Application_programming_interface
- http://en.wikipedia.org/wiki/List_of_3D_graphics_libraries