Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Видеоадаптеры, классификация, особенности строения и работы

D API)
    API  (программный  интерфейс)  –  интерфейс  для  написания   программ,
поддерживающий оборудование определенного типа и операционную  систему.  3D
API позволяет программисту создавать  трехмерное  программное  обеспечение,
использующее все возможности 3D-ускорителей. API  обычно  включают  в  себя
функции,  глобальные  данные,  константы  и  другие  элементы,  позволяющие
разработчику избегать непосредственного взаимодействия с оборудованием.
    3D API делятся на универсальные и специализированные.

Универсальный   3D   API   позволяет   абстрагироваться   от    конкретного
оборудования. Без универсального API,  поддерживающих  широкий  спектр  3D-
ускорителей, разработчиками пришлось  бы  портировать  игры  под  множество
плат. Наиболее известные универсальные 3D API – OpenGL и Direct3D.

Специализированный  3D  API  (Native  3D  API)  предназначен   для   одного
конкретного  семейства   3D-ускорителей   и   ограждает   программиста   от
низкоуровнего программирования с помощью  прямого  доступа  к  регистрам  и
памяти. Примеры специализированных 3D API – Glide (от 3Dfx),  RRedline  (от
Rendition), PowerSGL (от Videologic), RenderGL (от Intergraph).
    Direct3D – 3D API компании Microsoft, предназначенный для использования
преимущественно в играх. Direct3D существует только в Windows 95, в  скором
будущем появится в Windows NT 5.0. Direct3D имеет два режима: RM  (retained
mode) или абстрактный  и  IM  (immediate  mode)  или  непосредственный.  IM
состоит из тонкого уровня, который общается с  аппаратурой  и  обеспечивает
самое  высокое  быстродействие.   Абстрактный   режим   –   высокоуровневый
интерфейс,  покрывающий  множество  операций  для   программиста,   включая
инициализацию  и  трансформацию.  У  обоих  режимов  есть   достоинства   и
недостатки, большинство Direct3D-игр используют IM.
    OpenGL – открытый 3D API,  созданный  компанией  SGI  и  контролируемый
ассоциацией OpenGL Architecture Review Board, в которую  входят  DEC,  E&S,
IBM, Intel, Intergraph, Microsoft и SGI. OpenGL реализует широкий  диапазон
функций  от  вывода  точки,  линии  или  полигона  до   рендеринга   кривых
поверхностей NURBS, покрытых текстурой.
    Использование  универсального   3D   API   предполагает   использование
драйверов для этого API. На сегодняшний день наличие драйверов  Direct3D  и
OpenGL является обязательным требованием ко всем 3D-ускорителям.
    Direct3D-драйвер   реализует   так   называемый   уровень    аппаратной
абстракции,  HAL  (Hardware  Abstraction  Layer)   –   интерфейс,   который
взаимодействует непосредственно с  оборудованием  и  позволяет  приложениям
использовать возможности 3D-ускорителя с маскимальным быстродействием.  HAL
имеет низкоуровневый доступ к 3D-чипу и реализует 3D-функции на  аппаратном
или программно-аппаратном уровне. В отличие от HAL, уровень  эмуляции,  HEL
(Hardware Emulation Layer) является программным растеризатором.
    OpenGL-драйвер может быть реализован в двух вариантах: как  ICD  и  как
MCD.  ICD  (Installable  Client  Driver)  полностью  включает  все   стадии
конвейера OpenGL, что дает максимальное  быстродействие,  но  ICD  довольно
сложно программировать. MCD (Mini Client Driver)  разработан  для  внесения
абстракции в конвейер OpenGL. MCD гораздо легче  программировать,  так  как
разработчик программирует только  те  участки  кода  драйверы,  которые  он
считает нужным оптимизировать для своего чипсета. Однако MCD уступает ICD в
быстродействии, плюс ко  всему  MCD  работает  только  в  Windows  NT.  Для
широкого внедрения OpenGL на платформе Windows 95 сейчас разрабатывается 3D
Graphics Device Driver Kit (Комплект разработчика драйверов  устройств  для
3D-графики). Новый DDK будет включать переработанный SGI ICD DDK и Direct3D
DDK и позволит  поставщикам  графических  микросхем  и  плат  разрабатывать
OpenGL-драйверы для Windows 95, Windows  NT  4.0,  а  также  Windows  98  и
Windows NT 5.0.


    . Наложение рельефа (Bump mapping)
    Наложение   рельефа,   или   bumpmapping,   –   продвинутая    методика
моделирования рельефных поверхностей.  Суть  bumpmappingа  в  следующем:  в
реальном времени рассчитывается рельефная карта, которая  используется  для
симуляции рельефности. Такой рельефной картой может быть карта освещенности
или карта смещений UV. Общий вид рельефной  карты  –  DuDvL,  где  Du/Dv  –
дельты текстурных координат environment map, L – освещенность.
    Прежде всего программист готовит  карту  высот  (height  map),  которая
описывает рельеф в виде  множества  высот,  либо  карту  смещений  нормалей
(normal dispmap), которая описывает рельеф в виде нормалей. Для того, чтобы
например  подчеркнуть  показать  бугорки  и  впадины  рельефа   с   помощью
светотени, надо затемнить либо осветлить стенки  этих  бугорков  и  впадин.
Таким образом существенными для bumpmapping являются  не  сами  высоты,  их
дифференциалы.
    Рассмотрим два вида рельефных карт по отдельности.
    Карта освещенности (lightmaps). Каждому пикселу ставится в соответствие
значение  освещенности  L.  Карта  освещенности  рассчитывается  с   учетом
источников света. Полученная карта освещенности накладывается  на  основную
текстуру  альфа-смешением.  Этот  метод  симулирует   рельефность   матовой
поверхности игрой света и тени.
    .  Карта  смещений  UV  (UV-dispmap).   Каждому   пикселу   ставится   в
      соответствие вектор DuDv. Карта смещений UV используются для получения
      environment map с пертурбацией. Пертурбация означает, что  environment
      map  искажается  определенным  образом,  чтобы  передать  рельефность.
      Полученный environment map также накладывается  на  основную  текстуру
      альфа-смешением.  Этот  метод  симулирует  рельефность  глянцевой  или
      зеркальной поверхности отражением окружающей среды.
    Используя комбинацию карты освещенности  и  карты  смещений  UV,  можно
получать очень красивые модели.
    [pic]

    . Z-буферизация (Z-buffering)
    Z-буферизация – самый надежный метод удаления скрытых поверхностей.  Z-
буфер –  область  видеопамяти,  в  которой  для  каждого  пиксела  хранится
значение глубины. Когда рендерится новый пиксел, его  глубина  сравнивается
со значением, хранимом в z-буфере,  точнее  с  глубиной  уже  срендеренного
пиксела с теми же x и y координатами.  Если  новый  пиксел  имеет  значение
глубины выше значения в z-буфере, это значит что новый пиксел невидим, и он
не записывается во фрейм-буфер, если ниже – то записывается. Z-буфер обычно
расположен во фреймбуфере, поэтому при отключении аппаратной  z-буферизации
место под z-буфер освобождается, что  позволяет  3D-ускорителю  работать  в
более высоких разрешениях. Ради получения этих высоких разрешений некоторые
игры с несложной графикой используют  не  Z-буферизацию,  а  более  простые
методы удаления скрытых поверхностей. Тем не менее отключение z-буферизации
может приводить к артефакту, известному как z-алиасинг.
    Главный аттрибут z-буфера – разрещающая способность. Она  критична  для
высококачественного  рендеринга  сцен  с   большой   глубиной.   Чем   выше
разрешающая  способность,  тем  выше  дискретность  z-координат  и   точнее
выполняется  рендеринг  удаленных  объектов.  24-разрядный   z-буфер   дает
разрешающую способность 16 млн, 32-разрядный – 2  млрд,  а  16-разрядный  –
только 64 тыс. Если при рендеринге разрешающей способности не  хватает,  то
может случиться, что 2 перекрывающихся объекта получат  одну  и  ту  же  z-
координату, в результате аппаратура не будет знать  какой  объект  ближе  к
наблюдателю, что опять же ведет к z-алиасингу.
                                    [pic]
    При использовании z-буферизации надо позаботиться о том, чтобы  глубины
были корректны с точки зрения перспективы.  Допустим,  ускоритель  рендерит
треугольник  с  заданными  z-координатами  трех  его  вершин.   Он   должен
рассчитать z-координаты для всех точек, лежащих внутри  треугольника.  Если
их просто интерполировать, то  результат  получится  некорректным  с  точки
зрения перспективы, поэтому их  надо  корректировать.  Но  современные  3D-
ускорители  используют  технику,  называемую  w-буфером.   W-координата   –
величина  с  плавающей  точкой,  обратная  к  z-координате.  Всем  вершинам
ставятся в соответствие именно w-координаты, которые можно  интерполировать
без перспективной коррекции.

                         Поколения 3D-акселераторов
    Вообще-то,  функции,  ускоряющие  расчет  трехмерной  графики,   начали
появляться в массовых видеочипах давно – с 1995 года. Такие микросхемы,  как
S3  Virge   и  ATI  Rage,  имели  в  списке  своих  возможностей  аппаратное
ускорение некоторых операций растеризации 3D-изображения.  Однако  они  были
крайне медленными  и  в  то  время  еще  не  появилось  стандартных  API,  а
фирменные API практически не  были  поддержаны  разработчиками  программного
обеспечения.
    В 1996 году появляются видеочипы с серьезными заявками на гордое звание
“3D-ускоритель” – Verite1000 от фирмы Rendition, Matrox MGA-1064SG и  nVidia
NV1  (крайне  интересный  продукт  –  чип  работал  на  основе  расчета   не
полигонов, а криволинейных поверхностей Безье; имел затенение  по  Фонгу,  а
не по Гуро (это вытекало из неполигонной технологии); у него была  поддержка
билинейной фильтрации текстур,  мипмэппинга,  альфа-смешения,  попиксельного
тумана – кое-что из этого только начинает внедряться в самых  последних  или
только  анонсированных  видеочипах).  Но  они  снова  были  практически   не
востребованы  производителями  программ  –  на  горизонте  возникли  громада
Microsoft с ее API DirectX (Direct3D) и фирма, всколыхнувшая рынок  массовой
3D-акселерации и фактически создавшая его заново – 3DFX.
    Чипсет  фирмы  
12345След.
скачать работу

Видеоадаптеры, классификация, особенности строения и работы

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ