Перейти к содержимому

Directx 9 как отобразить ребра объекта

  • автор:

Поддержка сетки в D3DX (Direct3D 9)

D3DX — это служебная библиотека, которая предоставляет вспомогательные службы. Это слой над компонентом Direct3D.

Сетки

D3DX реализует конструкцию сетки для загрузки, обработки и отрисовки содержимого X-файла. Сетка в основном является коллекцией вершин, определяющих некоторую геометрию, и набор индексов, определяющих лица. Существует несколько типов сетки.

ID3DXBaseMesh предоставляет основы. ID3DXMesh наследует от ID3DXBaseMesh и добавляет оптимизацию сетки с помощью кэша вершин на микросхему. ID3DXSkinInfo обеспечивает поддержку скинированной сетки.

ID3DXBaseMesh предоставляет методы для управления объектами сетки ID3DXMesh , наследуемыми от базовой сетки. К ним относятся операции сходства, извлечение буфера геометрии, операции блокировки и разблокировки (вершины и индекс), а также копирование, отрисовка, лицо и сведения о вершинах.

Интерфейсы ID3DXPMesh и ID3DXSPMesh (для поддержки прогрессивных и упрощенных сеток соответственно), доступные в предыдущих выпусках Direct3D 9, были удалены.

Архитектура сетки

Сетка содержит данные для сложной модели. Это абстрактный контейнер данных, содержащий такие ресурсы, как текстуры и материалы, а также атрибуты, такие как данные о положении и данные прилагающихся элементов. Существует несколько операций сетки, которые повышают производительность рисования и внешний вид поверхности. Кроме того, существует ряд других концепций сетки, которые повлияют на функциональные возможности операций сетки. Ознакомьтесь с этими понятиями сетки, чтобы их можно было применить, чтобы повысить производительность сетки.

Данные объекта Сетки

Сетка содержит буфер вершин, буфер индекса и буфер атрибутов.

  • Буфер вершин содержит данные вершин, которые являются вершинами сетки.
  • Буфер индекса содержит индексы вершин для доступа к буферу вершин. Это может уменьшить размер буфера вершин, уменьшая повторяющиеся вершины. Только индексированная сетка использует буфер индекса. Если сетка состоит из списка треугольников, например, он не использует буфер индекса.
  • Буфер атрибута содержит данные атрибута. Атрибуты — это свойства вершин сетки, в определенном порядке. Сетка D3DX хранит атрибуты в группе DWORDS для каждого лица.

Таблицы атрибутов

Таблица атрибутов — это краткое представление содержимого буфера атрибута. Таблицы атрибутов можно создать, вызвав один из методов Optimize с D3DXMESHOPT_ATTRSORT, заблокируя буфер атрибута и заполняя его данными или вызывая SetAttributeTable. Сетка содержит таблицу атрибутов, когда сетка переупорядочена в группы. Это происходит при вызове оптимизации, при условии, что предоставляется параметр сортировки атрибутов (D3DXMESHOPT_ATTRSORT или более поздней версии). Сетки D3DX используют индексированные списки треугольников и поэтому рисуются с помощью IDirect3Device9::D rawIndexedPrimitive .

Таблицы атрибутов создаются в результате вызова Optimize. Лица не должны быть смежными, так как Оптимизация переупорядочения их будет переупорядочением. Например, руки человеческой сетки могут использовать тот же атрибут. Идентификатор помогает сортировать лица по группам. Сетки из X-файлов автоматически создают атрибуты для свойств материала и текстуры. Чтобы получить хорошую производительность, необходимо вызвать Optimize(ATTRSORT) или более эффективную Оптимизацию (VERTEXCACHE). Функции загрузки пытаются представить данные в точной форме, в ней сохранены. Если вы используете сетку на основе буфера вершин или буфера индекса, API сетки предоставляет функции оптимизации и преобразования кожи с небольшими затратами.

Типы оптимизации являются накопительными, начиная с наименьшего оптимального (D3DXMESHOPT_COMPACT) до наиболее оптимальных (D3DXMESHOPT_IGNOREVERTS). D3DXMESHOPT_STRIPREORDER выполняет сортировку и сортировку атрибутов. D3DXMESHOPT_VERTEXCACHE всегда рекомендуется, даже на устройствах без истинного кэша вершин.

Данные приложения

Данные приложения — это данные сетки, управляемые приложением. Существует тесная связь между данными вершин сетки и данными, управляемыми этими буферами.

Буфер материалов содержит n материалов. Материалы возвращаются функцией Load при загрузке X-файла. Каждое подмножество может иметь собственные материалы и текстуры. Буфер материалов является статическим.

Буфер зависимостей содержит сведения о краях, лицах и смежных лицах. Некоторые операции сетки зависят от того, какие лица находятся рядом друг с другом. Эта информация, называемая данными о зависимостях, хранится в буфере зависимостей. Она не является частью сетки, но поддерживается приложением и должна быть предоставлена методам сетки при необходимости.

Буфер экземпляра эффектов содержит список экземпляров эффектов. Экземпляр эффекта сохраняет состояние. Эти сведения о состоянии используются для инициализации конвейера. Экземпляр эффекта содержит пары «имя-значение» в эффекте.

Дополнительные разделы сетки

Оптимизированные сетки создаются на основе функций базовой сетки и добавляют возможности оптимизации вершинного кэша с двумя методами: Оптимизация, которая создает новую сетку и OptimizeInPlace, которая изменяет исходную сетку.

D3DXGeneratePMesh использует алгоритм упрощения D3DX для создания прогрессивной сетки из входной сетки. D3DXSimplifyMesh создает стандартную сетку заданного уровня детализации из входной сетки с помощью того же алгоритма упрощения. Пользователь управляет метрикой ошибок, используемой с помощью весов, указанных в компоненте вершины и весах, указанных на вершине. Весы для каждого компонента умножаются на часть ошибки, вычисляемой на крае ребра. Весы вершин умножаются на значение метрики ошибки, определенное для удаления этой вершины. Например, если вы никогда не хотите удалить вершину, задайте для этого веса конкретной вершины большое значение. И наоборот, если вы хотите удалить его ранее, задайте для него небольшое значение (менее 1).

ID3DXSkinInfo поддерживает скинированные символы. Скинированный символ определяется набором сеток и набором костей, влияющих на вершины сеток. Кости представлены в виде иерархии преобразования. Для каждой сетки существует матрица для каждой кости, которая влияет на нее, которая преобразует сетку в локальное пространство координат кости. Эта матрица представляет собой преобразование кости для сетки. Это определяется в момент, когда скелет связан с сеткой в процессе разработки.

Шкуры

Скиннинг — это метод преобразования вершин сетки с помощью костей. Кости, как правило, расположены в иерархической скелете, так же как кости в человеческом теле. Вершины объектов затем связаны с костями, как присоединение кожи к кости. Когда кости преобразуются, кожа также преобразуется.

Кожаные сетки используют кости, чтобы повлиять на ряд вершин. Данные преобразования кости предоставляются пользователем, чтобы повлиять на то, как SRT кости. Сетка использует преобразованные кости для влияния вершин, связанных с костями. Палитры — это массивы преобразований SRT. Палитры часто реализуются как матрицы, но они могут содержать значения SRT.

Прогрессивное обрезка сетки

Низкие детали области могут позволить себе потерять вершины, которые не изменяют отрисованный внешний вид поверхности. Это особенно верно для объектов, так как они перемещаются дальше от камеры. Это называется уровнем детализации. Пользователи имеют элементы управления отрисовкой на уровне API для настройки уровня детализации для повышения эффективности отрисовки.

Прогрессивные объекты сетки начинаются с большого количества лиц и используют упрощение для уменьшения числа лиц. Прогрессивная сетка, которая является независимой от представления, называется независимой от представления прогрессивной сеткой (VIPM).

Еще одним способом уменьшить количество лиц является обрезка. Это фактически удаляет вершины и лица из сетки. Обрезку можно выполнить в высоком конце (чтобы ограничить максимальное число лиц) или в нижнем конце (чтобы ограничить минимальное количество лиц.) Обрезка повышает производительность рисования, однако для сохранения качества визуального элемента следует использовать заботу. Обрезка показана в примере пакета SDK для прогрессивной сетки.

Для областей высокой видимости разрешение может быть увеличено с помощью прогрессивного уровня детализации (PLOD). Это техника для разбиения одного лица на два лица.

Сетки исправлений

Также поддерживаются два специализированных типа сетки исправлений: прямоугольник и исправления треугольников. Прямоугольная сетка исправлений — это сетка исправлений, контрольные точки которой размещаются в обмотке прямоугольной последовательности. Прямоугольники и треугольники используются для создания поверхностей высокого порядка. Они не так часто используются как сетки треугольников.

Перечисление D3DRENDERSTATETYPE

Состояния отрисовки определяют состояния настройки для всех видов обработки вершин и пикселей. Некоторые состояния отрисовки настраивают обработку вершин, а некоторые — обработку пикселей (см. раздел Состояния отрисовки (Direct3D 9)). Состояния отрисовки можно сохранять и восстанавливать с помощью блоков состояний (см. раздел Сохранение и восстановление состояния блоков состояний (Direct3D 9)).

Синтаксис

typedef enum D3DRENDERSTATETYPE < D3DRS_ZENABLE = 7, D3DRS_FILLMODE = 8, D3DRS_SHADEMODE = 9, D3DRS_ZWRITEENABLE = 14, D3DRS_ALPHATESTENABLE = 15, D3DRS_LASTPIXEL = 16, D3DRS_SRCBLEND = 19, D3DRS_DESTBLEND = 20, D3DRS_CULLMODE = 22, D3DRS_ZFUNC = 23, D3DRS_ALPHAREF = 24, D3DRS_ALPHAFUNC = 25, D3DRS_DITHERENABLE = 26, D3DRS_ALPHABLENDENABLE = 27, D3DRS_FOGENABLE = 28, D3DRS_SPECULARENABLE = 29, D3DRS_FOGCOLOR = 34, D3DRS_FOGTABLEMODE = 35, D3DRS_FOGSTART = 36, D3DRS_FOGEND = 37, D3DRS_FOGDENSITY = 38, D3DRS_RANGEFOGENABLE = 48, D3DRS_STENCILENABLE = 52, D3DRS_STENCILFAIL = 53, D3DRS_STENCILZFAIL = 54, D3DRS_STENCILPASS = 55, D3DRS_STENCILFUNC = 56, D3DRS_STENCILREF = 57, D3DRS_STENCILMASK = 58, D3DRS_STENCILWRITEMASK = 59, D3DRS_TEXTUREFACTOR = 60, D3DRS_WRAP0 = 128, D3DRS_WRAP1 = 129, D3DRS_WRAP2 = 130, D3DRS_WRAP3 = 131, D3DRS_WRAP4 = 132, D3DRS_WRAP5 = 133, D3DRS_WRAP6 = 134, D3DRS_WRAP7 = 135, D3DRS_CLIPPING = 136, D3DRS_LIGHTING = 137, D3DRS_AMBIENT = 139, D3DRS_FOGVERTEXMODE = 140, D3DRS_COLORVERTEX = 141, D3DRS_LOCALVIEWER = 142, D3DRS_NORMALIZENORMALS = 143, D3DRS_DIFFUSEMATERIALSOURCE = 145, D3DRS_SPECULARMATERIALSOURCE = 146, D3DRS_AMBIENTMATERIALSOURCE = 147, D3DRS_EMISSIVEMATERIALSOURCE = 148, D3DRS_VERTEXBLEND = 151, D3DRS_CLIPPLANEENABLE = 152, D3DRS_POINTSIZE = 154, D3DRS_POINTSIZE_MIN = 155, D3DRS_POINTSPRITEENABLE = 156, D3DRS_POINTSCALEENABLE = 157, D3DRS_POINTSCALE_A = 158, D3DRS_POINTSCALE_B = 159, D3DRS_POINTSCALE_C = 160, D3DRS_MULTISAMPLEANTIALIAS = 161, D3DRS_MULTISAMPLEMASK = 162, D3DRS_PATCHEDGESTYLE = 163, D3DRS_DEBUGMONITORTOKEN = 165, D3DRS_POINTSIZE_MAX = 166, D3DRS_INDEXEDVERTEXBLENDENABLE = 167, D3DRS_COLORWRITEENABLE = 168, D3DRS_TWEENFACTOR = 170, D3DRS_BLENDOP = 171, D3DRS_POSITIONDEGREE = 172, D3DRS_NORMALDEGREE = 173, D3DRS_SCISSORTESTENABLE = 174, D3DRS_SLOPESCALEDEPTHBIAS = 175, D3DRS_ANTIALIASEDLINEENABLE = 176, D3DRS_MINTESSELLATIONLEVEL = 178, D3DRS_MAXTESSELLATIONLEVEL = 179, D3DRS_ADAPTIVETESS_X = 180, D3DRS_ADAPTIVETESS_Y = 181, D3DRS_ADAPTIVETESS_Z = 182, D3DRS_ADAPTIVETESS_W = 183, D3DRS_ENABLEADAPTIVETESSELLATION = 184, D3DRS_TWOSIDEDSTENCILMODE = 185, D3DRS_CCW_STENCILFAIL = 186, D3DRS_CCW_STENCILZFAIL = 187, D3DRS_CCW_STENCILPASS = 188, D3DRS_CCW_STENCILFUNC = 189, D3DRS_COLORWRITEENABLE1 = 190, D3DRS_COLORWRITEENABLE2 = 191, D3DRS_COLORWRITEENABLE3 = 192, D3DRS_BLENDFACTOR = 193, D3DRS_SRGBWRITEENABLE = 194, D3DRS_DEPTHBIAS = 195, D3DRS_WRAP8 = 198, D3DRS_WRAP9 = 199, D3DRS_WRAP10 = 200, D3DRS_WRAP11 = 201, D3DRS_WRAP12 = 202, D3DRS_WRAP13 = 203, D3DRS_WRAP14 = 204, D3DRS_WRAP15 = 205, D3DRS_SEPARATEALPHABLENDENABLE = 206, D3DRS_SRCBLENDALPHA = 207, D3DRS_DESTBLENDALPHA = 208, D3DRS_BLENDOPALPHA = 209, D3DRS_FORCE_DWORD = 0x7fffffff >D3DRENDERSTATETYPE, *LPD3DRENDERSTATETYPE; 

Константы

D3DRS_ZENABLE

Состояние буферизации глубины как один элемент перечисленного типа D3DZBUFFERTYPE . Задайте для этого состояния значение D3DZB_TRUE, чтобы включить z-буферизацию, D3DZB_USEW включить w-буферизацию или D3DZB_FALSE отключить буферизацию глубины.

Значением по умолчанию для этого состояния отрисовки является D3DZB_TRUE, если набор элементов глубины был создан вместе с цепочкой буферов, задав для элемента EnableAutoDepthStencil структуры D3DPRESENT_PARAMETERSзначение TRUE, и D3DZB_FALSE в противном случае.

D3DRS_FILLMODE

Один или несколько элементов перечисленного типа D3DFILLMODE . Значение по умолчанию — D3DFILL_SOLID.

D3DRS_SHADEMODE

Один или несколько членов перечисленного типа D3DSHADEMODE . Значение по умолчанию — D3DSHADE_GOURAUD.

D3DRS_ZWRITEENABLE

Значение TRUE , чтобы разрешить приложению записывать данные в буфер глубины. Значение по умолчанию — TRUE. Этот элемент позволяет приложению предотвратить обновление буфера глубины системой новыми значениями глубины. Если значение РАВНО FALSE, сравнение глубины по-прежнему выполняется в соответствии с состоянием отрисовки D3DRS_ZFUNC, при условии, что выполняется буферизация глубины, но значения глубины не записываются в буфер.

D3DRS_ALPHATESTENABLE

Значение TRUE , чтобы включить альфа-тестирование для каждого пикселя. Если проверка пройдена, пиксель обрабатывается буфером кадров. В противном случае вся обработка буфера кадров пропускается для пикселя.

Проверка выполняется путем сравнения входящего альфа-значения со ссылочным альфа-значением с использованием функции сравнения, предоставляемой D3DRS_ALPHAFUNC состояния отрисовки. Ссылочный альфа-значение определяется значением, установленным для D3DRS_ALPHAREF. Дополнительные сведения см. в разделе Состояние альфа-тестирования (Direct3D 9).

Значение этого параметра по умолчанию — FALSE.

D3DRS_LASTPIXEL

Значение по умолчанию — TRUE, что позволяет рисовать последний пиксель в строке. Чтобы предотвратить рисование последнего пикселя, присвойте этому значению значение FALSE. Дополнительные сведения см. в разделе Состояние структуры и заполнения (Direct3D 9).

D3DRS_SRCBLEND

Один член перечисленного типа D3DBLEND . Значение по умолчанию — D3DBLEND_ONE.

D3DRS_DESTBLEND

Один член перечисленного типа D3DBLEND . Значение по умолчанию — D3DBLEND_ZERO.

D3DRS_CULLMODE

Указывает, как отбраковываются треугольники с задней стороной, если они вообще есть. Для этого параметра можно задать один член перечислимого типа D3DCULL . Значение по умолчанию — D3DCULL_CCW.

D3DRS_ZFUNC

Один член перечисленного типа D3DCMPFUNC . Значение по умолчанию — D3DCMP_LESSEQUAL. Этот элемент позволяет приложению принимать или отклонять пиксель в зависимости от его расстояния от камеры.

Значение глубины пикселя сравнивается со значением буфера глубины. Если значение глубины пикселя передает функцию сравнения, пиксель записывается.

Значение глубины записывается в буфер глубины, только если состояние отрисовки — TRUE.

Программные растеризаторы и многие аппаратные ускорители работают быстрее при сбое теста глубины, так как нет необходимости фильтровать и модулировать текстуру, если пиксель не будет отрисован.

D3DRS_ALPHAREF

Значение , указывающее ссылочное альфа-значение, по которому проверяются пиксели при включенном альфа-тестировании. Это 8-разрядное значение, помещенное в низкие 8 битов значения состояния отрисовки DWORD. Значения могут варьироваться от 0x00000000 до 0x000000FF. Значение по умолчанию — 0.

D3DRS_ALPHAFUNC

Один член перечисленного типа D3DCMPFUNC . Значение по умолчанию — D3DCMP_ALWAYS. Этот элемент позволяет приложению принимать или отклонять пиксель на основе его альфа-значения.

D3DRS_DITHERENABLE

Значение TRUE , чтобы включить дитеринг. Значение по умолчанию — FALSE.

D3DRS_ALPHABLENDENABLE

Значение TRUE , чтобы включить прозрачность альфа-смешения. Значение по умолчанию — FALSE.

Тип альфа-смешения определяется состояниями D3DRS_SRCBLEND и D3DRS_DESTBLEND отрисовки.

D3DRS_FOGENABLE

Значение TRUE , чтобы включить смешивание тумана. Значение по умолчанию — FALSE. Дополнительные сведения об использовании смешения тумана см. в разделе Туман.

D3DRS_SPECULARENABLE

Значение TRUE , чтобы включить зеркальное выделение. Значение по умолчанию — FALSE.

Зеркальные выделения вычисляются так, как будто каждая вершина в освещаемом объекте находится в источнике объекта. Это дает ожидаемые результаты, если объект моделируется вокруг источника, а расстояние от света до объекта относительно велико. В других случаях результаты как неопределенные.

Если для этого элемента задано значение TRUE, цвет отражения добавляется к базовому цвету после каскада текстуры, но перед альфа-смешения.

D3DRS_FOGCOLOR

Значение типа D3DCOLOR. Значение по умолчанию — 0. Дополнительные сведения о цвете тумана см. в разделе Цвет тумана (Direct3D 9).

D3DRS_FOGTABLEMODE

Формула тумана, используемая для пиксельного тумана. Задайте для одного из членов перечислимого типа D3DFOGMODE . Значение по умолчанию — D3DFOG_NONE. Дополнительные сведения о пиксельном тумане см. в разделе Pixel Fog (Direct3D 9).

D3DRS_FOGSTART

Глубина, с которой начинаются эффекты тумана в пикселях или вершинах для режима линейного тумана. Значение по умолчанию — 0,0f. Глубина указывается в пространстве мира для тумана вершин и пространства устройства [0,0, 1,0] или в пространстве мира для пиксельного тумана. Для пиксельного тумана эти значения находятся в пространстве устройства, когда система использует z для вычислений тумана и мирового пространства, когда система использует туман относительно глаз (w-fog). Дополнительные сведения см. в разделах Параметры тумана (Direct3D 9) и Относительное взгляда и Z-глубина.

Значения для этого состояния отрисовки являются значениями с плавающей запятой. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение , как показано в следующем примере кода.

pDevice9->SetRenderState(D3DRS_FOGSTART, *((DWORD*) (&fFogStart))); 

D3DRS_FOGEND

Глубина, на которой заканчиваются эффекты тумана в пикселях или вершинах для режима линейного тумана. Значение по умолчанию — 1,0f. Глубина указывается в мировом пространстве для тумана вершин и пространства устройства [0,0, 1,0] или в пространстве мира для пиксельного тумана. Для пиксельного тумана эти значения находятся в пространстве устройства, когда система использует z для вычислений тумана, и в мировом пространстве, когда система использует туман относительно глаз (w-fog). Дополнительные сведения см. в разделах Параметры тумана (Direct3D 9) и Глубина относительного взгляда и Z.

Значения для этого состояния отрисовки являются значениями с плавающей запятой. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение, как показано в следующем примере кода.

m_pDevice9->SetRenderState(D3DRS_FOGEND, *((DWORD*) (&fFogEnd))); 

D3DRS_FOGDENSITY

Плотность тумана для пикселей или вершинного тумана, используемых в экспоненциальных режимах тумана (D3DFOG_EXP и D3DFOG_EXP2). Допустимые значения плотности варьируются от 0,0 до 1,0. Значение по умолчанию — 1,0. Дополнительные сведения см. в разделе Параметры тумана (Direct3D 9).

Значения для этого состояния отрисовки являются значениями с плавающей запятой. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение, как показано в следующем примере кода.

 m_pDevice9->SetRenderState(D3DRS_FOGDENSITY, *((DWORD*) (&fFogDensity))); 

D3DRS_RANGEFOGENABLE

Значение TRUE для включения тумана вершин на основе диапазона. Значение по умолчанию — FALSE. В этом случае система использует туман на основе глубины. В тумане на основе диапазона расстояние от объекта от зрителя используется для вычисления эффектов тумана, а не глубины объекта (т. е. z-координаты) в сцене. В тумане на основе диапазона все методы тумана работают как обычно, за исключением того, что они используют диапазон вместо глубины в вычислениях.

Диапазон является правильным фактором для вычислений тумана, но глубина обычно используется, так как диапазон занимает много времени для вычислений, а глубина уже доступна. Использование глубины для вычисления тумана имеет нежелательный эффект изменения туманности периферийных объектов по мере движения глаза зрителя — в этом случае глубина меняется, и диапазон остается постоянным.

Так как в настоящее время оборудование не поддерживает туман на основе диапазона пикселей, коррекция диапазона предлагается только для тумана вершин.

Дополнительные сведения см. в разделе Вершинный туман (Direct3D 9).

D3DRS_STENCILENABLE

Значение TRUE для включения набора элементов или ЗНАЧЕНИЕ FALSE для отключения набора элементов. Значение по умолчанию — FALSE. Дополнительные сведения см. в разделе Методы буфера трафаретов (Direct3D 9).

D3DRS_STENCILFAIL

Операция набора элементов, выполняемая в случае сбоя теста набора элементов. Значения относятся к перечислению D3DSTENCILOP . Значение по умолчанию — D3DSTENCILOP_KEEP.

D3DRS_STENCILZFAIL

Операция набора элементов выполняется, если тест набора элементов пройден, а тест глубины (z-тест) завершается сбоем. Значения относятся к перечислению D3DSTENCILOP . Значение по умолчанию — D3DSTENCILOP_KEEP.

D3DRS_STENCILPASS

Операция набора элементов выполняется в случае успешного прохождения тестов трафарета и глубины (z). Значения относятся к перечислению D3DSTENCILOP . Значение по умолчанию — D3DSTENCILOP_KEEP.

D3DRS_STENCILFUNC

Функция сравнения для теста набора элементов. Значения относятся к перечисляемого типа D3DCMPFUNC . Значение по умолчанию — D3DCMP_ALWAYS.

Функция сравнения используется для сравнения ссылочного значения с записью буфера трафарета. Это сравнение применяется только к битам в значении ссылки и записи буфера трафарета, которые заданы в маске набора элементов (задается D3DRS_STENCILMASK состоянии отрисовки). Если задано значение TRUE, проверка набора элементов проходит успешно.

D3DRS_STENCILREF

Эталонное значение int для теста набора элементов. Значение по умолчанию — 0.

D3DRS_STENCILMASK

Маска применяется к ссылочным значениям и каждой записи буфера трафарета, чтобы определить значительные биты для теста набора элементов. Маска по умолчанию — 0xFFFFFFFF.

D3DRS_STENCILWRITEMASK

Маска записи применяется к значениям, записанным в буфер набора элементов. Маска по умолчанию — 0xFFFFFFFF.

D3DRS_TEXTUREFACTOR

Цвет, используемый для наложения нескольких текстур с помощью аргумента D3DTA_TFACTOR текстуры или D3DTOP_BLENDFACTORALPHA операции наложения текстур. Связанное значение является переменной D3DCOLOR . Значение по умолчанию — непрозрачный белый (0xFFFFFFFF).

D3DRS_WRAP0

Режим упаковки текстур для нескольких наборов координат текстуры. Допустимыми значениями для этого состояния отрисовки может быть любое сочетание флагов D3DWRAPCOORD_0 (или D3DWRAP_U), D3DWRAPCOORD_1 (или D3DWRAP_V), D3DWRAPCOORD_2 (или D3DWRAP_W) и D3DWRAPCOORD_3. Это приводит к тому, что система выполняет перенос в направлении первого, второго, третьего и четвертого измерений, которые иногда называются направлениями s, t, r и q для данной текстуры. Значение по умолчанию для этого состояния отрисовки равно 0 (оболочка отключена во всех направлениях).

D3DRS_WRAP1

D3DRS_WRAP2

D3DRS_WRAP3

D3DRS_WRAP4

D3DRS_WRAP5

D3DRS_WRAP6

D3DRS_WRAP7

D3DRS_CLIPPING

Значение TRUE , чтобы включить примитивную обрезку с помощью Direct3D, или false , чтобы отключить ее. Значение по умолчанию — TRUE.

D3DRS_LIGHTING

True , чтобы включить освещение Direct3D, или FALSE , чтобы отключить его. Значение по умолчанию — TRUE. Правильно освещаются только вершины, которые включают норму вершины; Вершины, которые не содержат нормального, используют точечное произведение 0 во всех вычислениях освещения.

D3DRS_AMBIENT

Цвет окружающего света. Это значение имеет тип D3DCOLOR. Значение по умолчанию — 0.

D3DRS_FOGVERTEXMODE

Формула тумана, используемая для тумана вершин. Задайте для одного члена перечисленного типа D3DFOGMODE . Значение по умолчанию — D3DFOG_NONE.

D3DRS_COLORVERTEX

Значение TRUE для включения цвета для каждой вершины или значение FALSE , чтобы отключить его. Значение по умолчанию — TRUE. Включение цвета для каждой вершины позволяет системе включать цвет, определенный для отдельных вершин, в свои вычисления освещения.

Дополнительные сведения см. в следующих состояниях отрисовки:

  • D3DRS_DIFFUSEMATERIALSOURCE
  • D3DRS_SPECULARMATERIALSOURCE
  • D3DRS_AMBIENTMATERIALSOURCE
  • D3DRS_EMISSIVEMATERIALSOURCE

D3DRS_LOCALVIEWER

Значение TRUE , чтобы включить зеркальные выделения относительно камеры, или ЗНАЧЕНИЕ FALSE для использования ортогональных зеркальных выделений. Значение по умолчанию — TRUE. Приложения, использующие ортогональную проекцию, должны указывать значение FALSE.

D3DRS_NORMALIZENORMALS

Значение TRUE , чтобы включить автоматическую нормализацию норм вершин, или ЗНАЧЕНИЕ FALSE , чтобы отключить ее. Значение по умолчанию — FALSE. Включение этой функции приводит к тому, что система нормализует нормали вершин для вершин после преобразования их в пространство камеры, что может занять много времени.

D3DRS_DIFFUSEMATERIALSOURCE

Источник рассеянного цвета для вычислений освещения. Допустимые значения являются членами перечисленного типа D3DMATERIALCOLORSOURCE . Значение по умолчанию — D3DMCS_COLOR1. Значение этого состояния отрисовки используется только в том случае, если D3DRS_COLORVERTEX состоянии отрисовки имеет значение TRUE.

D3DRS_SPECULARMATERIALSOURCE

Источник зеркального цвета для вычислений освещения. Допустимые значения являются членами перечисленного типа D3DMATERIALCOLORSOURCE . Значение по умолчанию — D3DMCS_COLOR2.

D3DRS_AMBIENTMATERIALSOURCE

Источник внешнего цвета для вычислений освещения. Допустимые значения являются членами перечисленного типа D3DMATERIALCOLORSOURCE . Значение по умолчанию — D3DMCS_MATERIAL.

D3DRS_EMISSIVEMATERIALSOURCE

Источник излучаемого цвета для расчетов освещения. Допустимые значения являются членами перечисленного типа D3DMATERIALCOLORSOURCE . Значение по умолчанию — D3DMCS_MATERIAL.

D3DRS_VERTEXBLEND

Количество матриц, используемых для смешивания геометрии, если таковые есть. Допустимые значения являются членами перечисленного типа D3DVERTEXBLENDFLAGS . Значение по умолчанию — D3DVBF_DISABLE.

D3DRS_CLIPPLANEENABLE

Включает или отключает определяемые пользователем плоскости обрезки. Допустимые значения — это любые DWORD, в которых состояние каждого бита (задано или не задано) переключает состояние активации соответствующей определяемой пользователем плоскости отсечения. Наименьший значимый бит (бит 0) управляет первой плоскостью обрезки по индексу 0, а последующие биты управляют активацией плоскостей обрезки по более высоким индексам. Если задан бит, система применяет соответствующую плоскость обрезки во время отрисовки сцены. Значение по умолчанию — 0.

Макросы D3DCLIPPLANEn определяются для предоставления удобного способа включения обрезки плоскостей.

D3DRS_POINTSIZE

Значение типа float, указывающее размер, используемый для вычисления размера точек в случаях, когда размер точки не указан для каждой вершины. Это значение не используется, если вершина содержит размер точки. Это значение находится в единицах экранного пространства, если D3DRS_POINTSCALEENABLE имеет значение FALSE; В противном случае это значение находится в единицах мирового пространства. Значением по умолчанию является значение, возвращаемое драйвером. Если драйвер возвращает значение 0 или 1, значение по умолчанию — 64, что позволяет эмуляцию размера программной точки. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение , как показано в следующем примере кода.

m_pDevice9->SetRenderState(D3DRS_POINTSIZE, *((DWORD*)&pointSize)); 

D3DRS_POINTSIZE_MIN

Значение типа float, указывающее минимальный размер точечных примитивов. Примитивы точек прижаты к этому размеру во время отрисовки. Если для этого параметра задано значение меньше 1,0, точки удаляются, если точка не охватывает центр пикселей, а сглаживание отключается или отображается с меньшей интенсивностью при включенном сглаживание. Значение по умолчанию — 1,0f. Диапазон для этого значения больше или равен 0,0f. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение , как показано в следующем примере кода.

m_pDevice9->SetRenderState(D3DRS_POINTSIZE_MIN, *((DWORD*)&pointSizeMin)); 

D3DRS_POINTSPRITEENABLE

логическое значение. Если задано значение TRUE, координаты текстур точечных примитивов задаются таким образом, чтобы полные текстуры сопоставлялись с каждой точкой. При значении FALSE координаты текстуры вершин используются для всей точки. Значение по умолчанию — FALSE. Вы можете получить однопиксельную точку в стиле DirectX 7, задав для D3DRS_POINTSCALEENABLE значение FALSE , а D3DRS_POINTSIZE — значение 1,0, которое является значениями по умолчанию.

D3DRS_POINTSCALEENABLE

логическое значение, управляющее вычислением размера для точечных примитивов. При значении TRUE размер точки интерпретируется как значение пространства камеры и масштабируется с помощью функции distance и frustum для просмотра масштабирования по оси Y для вычисления окончательного размера точки экранного пространства. При значении FALSE размер точки интерпретируется как пространство на экране и используется напрямую. Значение по умолчанию — FALSE.

D3DRS_POINTSCALE_A

Значение с плавающей точкой, которое управляет затуханием размера на основе расстояния для точечных примитивов. Активен, только если D3DRS_POINTSCALEENABLE имеет значение TRUE. Значение по умолчанию — 1,0f. Диапазон для этого значения больше или равен 0,0f. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение , как показано в следующем примере кода.

m_pDevice9->SetRenderState(D3DRS_POINTSCALE_A, *((DWORD*)&pointScaleA)); 

D3DRS_POINTSCALE_B

Значение с плавающей точкой, которое управляет затуханием размера на основе расстояния для точечных примитивов. Активен, только если D3DRS_POINTSCALEENABLE имеет значение TRUE. Значение по умолчанию — 0,0f. Диапазон для этого значения больше или равен 0,0f. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение , как показано в следующем примере кода.

m_pDevice9->SetRenderState(D3DRS_POINTSCALE_B, *((DWORD*)&pointScaleB)); 

D3DRS_POINTSCALE_C

Значение с плавающей точкой, которое управляет затуханием размера на основе расстояния для точечных примитивов. Активен, только если D3DRS_POINTSCALEENABLE имеет значение TRUE. Значение по умолчанию — 0,0f. Диапазон для этого значения больше или равен 0,0f. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение , как показано в следующем примере кода.

m_pDevice9->SetRenderState(D3DRS_POINTSCALE_C, *((DWORD*)&pointScaleC)); 

D3DRS_MULTISAMPLEANTIALIAS

логическое значение, определяющее способ вычисления отдельных выборок при использовании буфера целевого объекта отрисовки с несколькими выборками. Если задано значение TRUE, несколько выборок вычисляются таким образом, чтобы полное сглаживание сцены выполнялось путем выборки в разных положениях выборки для каждой из нескольких выборок. Если задано значение FALSE, то все несколько выборок записываются с одинаковым значением выборки в центре пикселей, что позволяет отрисовка без антиалиазированного отображения в буфере с несколькими выборками. Это состояние отрисовки не влияет на отрисовку в одном буфере образца. Значение по умолчанию — TRUE.

D3DRS_MULTISAMPLEMASK

Каждый бит в этой маске, начиная с по крайней мере значимого бита (LSB), управляет изменением одного из примеров в целевом объекте отрисовки с несколькими выборками. Таким образом, для целевого объекта отрисовки из 8 примеров низкий байт содержит восемь включений записи для каждой из восьми выборок. Это состояние отрисовки не влияет на отрисовку в одном буфере образца. Значение по умолчанию — 0xFFFFFFFF.

Это состояние отрисовки позволяет использовать буфер с несколькими выборками в качестве буфера накопления, выполняя многопроходную отрисовку геометрии, где каждый проход обновляет подмножество примеров.

Если имеется n примеров с поддержкой нескольких дискретов и k, результирующая интенсивность отображаемого изображения должна быть k/n. Каждый компонент RGB каждого пикселя учитывается по k/n.

D3DRS_PATCHEDGESTYLE

Задает, будут ли ребра исправления использовать тесселяции в стиле с плавающей запятой. Возможные значения определяются перечисляемым типом D3DPATCHEDGESTYLE . Значение по умолчанию — D3DPATCHEDGE_DISCRETE.

D3DRS_DEBUGMONITORTOKEN

Устанавливается только для отладки монитора. Возможные значения определяются перечисленным типом D3DDEBUGMONITORTOKENS . Обратите внимание, что если задано D3DRS_DEBUGMONITORTOKEN, вызов обрабатывается как передача маркера монитору отладки. Например, если после передачи D3DDMT_ENABLE или D3DDMT_DISABLE в D3DRS_DEBUGMONITORTOKEN передаются другие значения маркера, состояние (включено или отключено) монитора отладки по-прежнему сохраняется.

Это состояние полезно только для отладочных сборок. Монитор отладки по умолчанию D3DDMT_ENABLE.

D3DRS_POINTSIZE_MAX

Значение типа float, указывающее максимальный размер, до которого будут закреплены точечные спрайты. Значение должно быть меньше или равно члену MaxPointSize элемента D3DCAPS9 и больше или равно D3DRS_POINTSIZE_MIN. Значение по умолчанию — 64.0. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение , как показано в следующем примере кода.

m_pDevice9->SetRenderState(D3DRS_PONTSIZE_MAX, *((DWORD*)&pointSizeMax)); 

D3DRS_INDEXEDVERTEXBLENDENABLE

логическое значение, которое включает или отключает смешение индексированных вершин. Значение по умолчанию — FALSE. Если задано значение TRUE, смешивание индексированных вершин включено. Если задано значение FALSE, смешивание индексированных вершин отключается. Если это состояние отрисовки включено, пользователь должен передать матричные индексы в виде упакованного DWORD с каждой вершиной. Если состояние отрисовки отключено и включено наложение вершин через состояние D3DRS_VERTEXBLEND, это эквивалентно использованию матричных индексов 0, 1, 2, 3 в каждой вершине.

D3DRS_COLORWRITEENABLE

Значение UINT, позволяющее выполнять запись по каналу для цветового буфера целевого объекта отрисовки. Бит набора приводит к обновлению цветового канала во время трехмерной отрисовки. Четкий бит приводит к тому, что цветовой канал не затрагивается. Эта функция доступна, если бит возможностей D3DPMISCCAPS_COLORWRITEENABLE задан в элементе PrimitiveMiscCaps структуры D3DCAPS9 для устройства. Это состояние отрисовки не влияет на операцию очистки. Значение по умолчанию — 0x0000000F.

Допустимыми значениями для этого состояния отрисовки может быть любое сочетание флагов D3DCOLORWRITEENABLE_ALPHA, D3DCOLORWRITEENABLE_BLUE, D3DCOLORWRITEENABLE_GREEN или D3DCOLORWRITEENABLE_RED.

D3DRS_TWEENFACTOR

Значение с плавающей точкой, управляющий коэффициентом настройки. Значение по умолчанию — 0,0f. Так как метод IDirect3DDevice9::SetRenderState принимает значения DWORD, приложение должно привести переменную, содержащую значение , как показано в следующем примере кода.

m_pDevice9->SetRenderState(D3DRS_TWEENFACTOR, *((DWORD*)&TweenFactor)); 

D3DRS_BLENDOP

Значение, используемое для выбора арифметической операции, применяемой, когда состояние отрисовки альфа-смешения, D3DRS_ALPHABLENDENABLE, имеет значение TRUE. Допустимые значения определяются перечисляемым типом D3DBLENDOP . Значение по умолчанию — D3DBLENDOP_ADD.

Если возможность D3DPMISCCAPS_BLENDOP устройства не поддерживается, выполняется D3DBLENDOP_ADD.

D3DRS_POSITIONDEGREE

Степень интерполяции положения N-патч. Значения могут быть D3DDEGREE_CUBIC (по умолчанию) или D3DDEGREE_LINEAR. Дополнительные сведения см. в разделе D3DDEGREETYPE.

D3DRS_NORMALDEGREE

N-патч нормальной степени интерполяции. Значения могут быть D3DDEGREE_LINEAR (по умолчанию) или D3DDEGREE_QUADRATIC. Дополнительные сведения см. в разделе D3DDEGREETYPE.

D3DRS_SCISSORTESTENABLE

Значение TRUE , чтобы включить проверку ножниц, и значение FALSE , чтобы отключить его. Значение по умолчанию — FALSE.

D3DRS_SLOPESCALEDEPTHBIAS

Используется для определения того, сколько смещения можно применить к копланарным примитивам, чтобы уменьшить z-бой. Значение по умолчанию — 0.

bias = (max * D3DRS_SLOPESCALEDEPTHBIAS) + D3DRS_DEPTHBIAS.

где max — максимальный наклон глубины отображаемого треугольника.

D3DRS_ANTIALIASEDLINEENABLE

Значение TRUE для включения сглаживания строк, значение FALSE для отключения сглаживания строк. Значение по умолчанию — FALSE.

При отрисовке в целевой объект отрисовки с несколькими выборками D3DRS_ANTIALIASEDLINEENABLE игнорируется, а все строки отображаются с псевдонимом. Используйте ID3DXLine для сглаживаемой отрисовки линий в целевом объекте отрисовки с несколькими выборками.

D3DRS_MINTESSELLATIONLEVEL

Минимальный уровень тесселяции. Значение по умолчанию — 1,0f. См. раздел Тесселяции (Direct3D 9).

D3DRS_MAXTESSELLATIONLEVEL

Максимальный уровень тесселяции. Значение по умолчанию — 1,0f. См. раздел Тесселяции (Direct3D 9).

D3DRS_ADAPTIVETESS_X

Количество адаптивных тесселлейтов в направлении x. Значение по умолчанию — 0,0f. См. раздел Адаптивная тесселяции.

D3DRS_ADAPTIVETESS_Y

Сумма адаптивно тесселлировать, в направлении y. Значение по умолчанию — 0,0f. См . Adaptive_Tessellation.

D3DRS_ADAPTIVETESS_Z

Количество адаптивных тесселлейт в направлении z. Значение по умолчанию — 1,0f. См . Adaptive_Tessellation.

D3DRS_ADAPTIVETESS_W

Сумма адаптивно тесселлировать, в направлении w. Значение по умолчанию — 0,0f. См . Adaptive_Tessellation.

D3DRS_ENABLEADAPTIVETESSELLATION

Значение TRUE для включения адаптивной тесселяции, значение FALSE для ее отключения. Значение по умолчанию — FALSE. См . Adaptive_Tessellation.

D3DRS_TWOSIDEDSTENCILMODE

Значение TRUE включает двустороннее набор элементов, значение FALSE отключает его. Значение по умолчанию — FALSE. Приложение должно настроить D3DRS_CULLMODE на D3DCULL_NONE, чтобы включить двусторонний режим трафарета. Если порядок обмотки треугольника указан по часовой стрелке, будут использоваться операции D3DRS_STENCIL*. Если порядок обмотки против часовой стрелки, будут использоваться операции D3DRS_CCW_STENCIL*.

Чтобы узнать, поддерживается ли двусторонний набор элементов, проверка член StencilCaps D3DCAPS9 для D3DSTENCILCAPS_TWOSIDED. См. также D3DSTENCILCAPS.

D3DRS_CCW_STENCILFAIL

Операция набора элементов для выполнения в случае сбоя теста набора элементов CCW. Значения относятся к перечислению типа D3DSTENCILOP . Значение по умолчанию — D3DSTENCILOP_KEEP.

D3DRS_CCW_STENCILZFAIL

Операция набора элементов выполняется в случае успешного прохождения теста набора элементов CCW и сбоя z-test. Значения относятся к перечислению типа D3DSTENCILOP . Значение по умолчанию — D3DSTENCILOP_KEEP.

D3DRS_CCW_STENCILPASS

Операция с набором элементов выполняется, если оба набора элементов CCW и z-тесты пройдены. Значения относятся к перечислению типа D3DSTENCILOP . Значение по умолчанию — D3DSTENCILOP_KEEP.

D3DRS_CCW_STENCILFUNC

Функция сравнения. Проверка набора элементов CCW проходит, если ((ref & mask) функция трафарета (маска трафарета & )) имеет значение TRUE. Значения относятся к перечислению типа D3DCMPFUNC . Значение по умолчанию — D3DCMP_ALWAYS.

D3DRS_COLORWRITEENABLE1

Дополнительные значения ColorWriteEnable для устройств. См. D3DRS_COLORWRITEENABLE. Эта функция доступна, если бит возможностей D3DPMISCCAPS_INDEPENDENTWRITEMASKS задан в элементе PrimitiveMiscCaps структуры D3DCAPS9 для устройства. Значение по умолчанию — 0x0000000f.

D3DRS_COLORWRITEENABLE2

Дополнительные значения ColorWriteEnable для устройств. См. D3DRS_COLORWRITEENABLE. Эта функция доступна, если бит возможностей D3DPMISCCAPS_INDEPENDENTWRITEMASKS задан в элементе PrimitiveMiscCaps структуры D3DCAPS9 для устройства. Значение по умолчанию — 0x0000000f.

D3DRS_COLORWRITEENABLE3

Дополнительные значения ColorWriteEnable для устройств. См. D3DRS_COLORWRITEENABLE. Эта функция доступна, если бит возможностей D3DPMISCCAPS_INDEPENDENTWRITEMASKS задан в элементе PrimitiveMiscCaps структуры D3DCAPS9 для устройства. Значение по умолчанию — 0x0000000f.

D3DRS_BLENDFACTOR

D3DCOLOR используется для постоянного коэффициента смешивания во время альфа-смешивания. Эта функция доступна, если бит возможностей D3DPBLENDCAPS_BLENDFACTOR задан в элементе SrcBlendCaps D3DCAPS9 или destBlendCaps В D3DCAPS9. См . раздел D3DRENDERSTATETYPE. Значение по умолчанию — 0xffffffff.

D3DRS_SRGBWRITEENABLE

Включите гамма-исправление операций записи на целевом объекте отрисовки в sRGB. Формат должен предоставлять D3DUSAGE_SRGBWRITE. Значение по умолчанию — 0.

D3DRS_DEPTHBIAS

Значение с плавающей запятой, используемое для сравнения значений глубины. См. см. раздел Значение по умолчанию — 0.

D3DRS_WRAP8

D3DRS_WRAP9

D3DRS_WRAP10

D3DRS_WRAP11

D3DRS_WRAP12

D3DRS_WRAP13

D3DRS_WRAP14

D3DRS_WRAP15

D3DRS_SEPARATEALPHABLENDENABLE

Значение TRUE включает отдельный режим наложения для альфа-канала. Значение по умолчанию — FALSE.

Если задано значение FALSE, коэффициенты наложения и операции, применяемые к альфа-каналу, принудительно должны совпадать с теми, которые определены для цвета. Этот режим фактически жестко устанавливается на FALSE для реализаций, которые не устанавливают ограничение D3DPMISCCAPS_SEPARATEALPHABLEND. См . раздел D3DPMISCCAPS.

Тип отдельного альфа-смешивания определяется состояниями D3DRS_SRCBLENDALPHA и D3DRS_DESTBLENDALPHA отрисовки.

D3DRS_SRCBLENDALPHA

Один член перечисленного типа D3DBLEND . Это значение игнорируется, если D3DRS_SEPARATEALPHABLENDENABLE не имеет значение TRUE. Значение по умолчанию — D3DBLEND_ONE.

D3DRS_DESTBLENDALPHA

Один член перечисленного типа D3DBLEND . Это значение игнорируется, если D3DRS_SEPARATEALPHABLENDENABLE не имеет значение TRUE. Значение по умолчанию — D3DBLEND_ZERO.

D3DRS_BLENDOPALPHA

Значение, используемое для выбора арифметической операции, применяемой к отдельному альфа-смешения, когда состояние отрисовки, D3DRS_SEPARATEALPHABLENDENABLE, имеет значение TRUE.

Допустимые значения определяются перечисляемым типом D3DBLENDOP . Значение по умолчанию — D3DBLENDOP_ADD.

Если возможность D3DPMISCCAPS_BLENDOP устройства не поддерживается, выполняется D3DBLENDOP_ADD. См . раздел D3DPMISCCAPS.

D3DRS_FORCE_DWORD

Принудительно компилирует это перечисление до 32 бит в размере. Без этого значения некоторые компиляторы позволили бы компилировать это перечисление до размера, отличного от 32 бит. Это значение не используется.

Комментарии

Состояния отрисовки Средство выборки текстур
ps_1_1 к ps_1_3 4 образца текстуры

Direct3D определяет константу D3DRENDERSTATE_WRAPBIAS как удобное для приложений включение или отключение обертывания текстуры на основе отсчитываемого от нуля целого числа набора координат текстуры (вместо явного использования одного из значений состояния D3DRS_WRAP n). Добавьте значение D3DRENDERSTATE_WRAPBIAS в отсчитываемый от нуля индекс набора координат текстуры, чтобы вычислить значение D3DRS_WRAP n, соответствующее этому индексу, как показано в следующем примере.

// Enable U/V wrapping for textures that use the texture // coordinate set at the index within the dwIndex variable HRESULT hr = pd3dDevice->SetRenderState( dwIndex + D3DRENDERSTATE_WRAPBIAS, D3DWRAPCOORD_0 | D3DWRAPCOORD_1); // If dwIndex is 3, the value that results from // the addition equals D3DRS_WRAP3 (131) 

Требования

Требование Значение
Заголовок D3D9Types.h

Обычные векторы лиц и вершин (Direct3D 9)

Каждая грань в сетке имеет перпендикулярный вектор нормы единицы, как показано на следующем рисунке. Направление вектора определяется порядком определения вершин и типом системы координат (правосторонняя или левосторонняя). Нормаль поверхности направлена от передней стороны поверхности. В Direct3D видима только передняя сторона поверхности. Передняя поверхность — та, на которой вершины определяются по часовой стрелке.

иллюстрация нормального вектора для переднего лица

Любая не передняя поверхность считается задней. Direct3D не всегда отрисовывает обратные лица; поэтому, задние лица, как говорят, выбраковываются. При необходимости можно изменить режим отбрасывания и включить отрисовку задних поверхностей. Дополнительные сведения см. в разделе Состояние отбраковки (Direct3D 9).

Direct3D использует единичные нормали вершин для затенения по методу Гуро, освещения и эффектов материалов. На следующем рисунке показаны примеры норм.

Иллюстрация норм вершин

При применении затенения по методу Гуро к полигону Direct3D использует нормали вершин для вычисления угла между источником света и поверхностью. При этом Direct3D вычисляет значения цвета и интенсивности для вершин и интерполирует их для каждой точки на всех поверхностях примитива. Direct3D вычисляет значение интенсивности света с помощью угла. Чем больше угол, тем меньше света попадает на поверхность.

Если вы создаете плоский объект, задайте для нормали вершины, чтобы они указывали перпендикулярно поверхности, как показано на следующем рисунке.

иллюстрация плоской поверхности, состоящей из двух треугольников с нормалями вершин

Однако более вероятно, что объект состоит из полос треугольников, а треугольники не являются копланарными. Существует простой способ добиться плавного затенения всех треугольников в полосе. Для этого нужно сначала рассчитать нормальный вектор поверхности для каждой полигональной поверхности, с которой связана вершина. Нормаль вершины можно настроить так, чтобы она образовывала равный угол с каждой нормалью поверхности. Однако этот метод может оказаться недостаточно эффективным для сложных примитивов.

Этот метод проиллюстрирован на следующей схеме, где показаны две поверхности, S1 и S2, с видом на их ребра сверху. Нормальные векторы поверхностей S1 и S2 показаны синим цветом. Нормальный вектор вершины показан красным цветом. Угол между нормальным вектором вершины и нормалью поверхности S1 идентичен углу между нормальную вершины и нормалью поверхности S2. При освещении и затенении этих двух поверхностей по методу Гуро между ними получается плавно затененное и закругленное ребро.

схема двух поверхностей (s1 и s2) и их нормальных векторов и вектора нормальной вершины

Если нормаль вершины тяготеет в одной из поверхностей, с которой она связана, интенсивность света для точек на этой поверхности увеличивается или уменьшается в зависимости от угла между нормалью и источником света. На следующей схеме приведен пример. Опять же, эти поверхности видны краем. Нормаль вершины тяготеет к поверхности S1, поэтому угол между ней и источником света меньше, чем в том случае, если бы углы между нормалью вершины и нормалями поверхностей были равны.

схема двух поверхностей (s1 и s2) с вектором нормальной вершины, который наклоняется к одной стороне

Вы можете использовать затенение по методу Гуро для отображения некоторых объектов с острыми ребрами в трехмерной сцене. Для этого дублируйте нормальные векторы вершин на любом пересечении граней, где требуется острый край, как показано на следующем рисунке.

Иллюстрация повторяющихся нормальных векторов вершин по острым краям

Если вы используете методы DrawPrimitive для отрисовки сцены, определите объект с острыми ребрами как список треугольников, а не полосу треугольников. Если объект определен как полоса треугольников, Direct3D считает его одним многоугольником, состоящим из нескольких треугольных поверхностей. Затенение по методу Гуро применяется как для каждой поверхности многоугольника, так и между смежными поверхностями. В результате получается объект, плавно затененный от поверхности к поверхности. Поскольку список треугольников — это многоугольник, состоящий из ряда несвязанных треугольных поверхностей, Direct3D применяет затенение по методу Гуро к каждой поверхности многоугольника. Однако оно не применяется от поверхности к поверхности. Если два или более треугольников в списке треугольников смежные, между ними видится острое ребро.

В качестве альтернативы можно перейти к плоскому затенению при отрисовке объектов с острыми ребрами. С точки зрения вычислений, это самый эффективный метод, но при его использовании некоторые объекты в сцене могут быть отрисованы не так реалистично, как объекты, затененные по методу Гуро.

Directx 9 как отобразить ребра объекта

<<Лезешь в закладку вьюпорты -->Configure driver —> Снимаешь галку Display all triangle edges>>

Это точно помогает, должно работать!!

07/07/2007, 12:21
QUOTE(psx @ 07/07/2007, 10:00) [snapback]882738[/snapback]

Configure driver —> Снимаешь галку Display all triangle edges>>

Это точно помогает, должно работать!!

там у меня не стояла галочка.

07/07/2007, 12:32

всё!! всем спасибо.

я использовал метод великого учёного по имени Тык, и всё сделал.

08/07/2007, 07:49
Дык что сделал-то,
в чём проблема-то была?
08/07/2007, 13:57

Подскажите как сделать чтоб объекты выглядиди одинаково прозрачно. Слева геометрия импортированная из автокада, а справа два объекта нарисованные в максе. Слева отображаются невидимые грани, а справа нет — почему?

08/07/2007, 15:29

Смешной вопрос, но ответ простой (на левом цилиндре есть сегменты по высоте а на правом боксе все сегменты по 1 стоят.

08/07/2007, 16:05

вопрос не в том состоял. Слева на объекте ты видишь ребра которые скоются если включить режим smooth+highlights, а на правом ты не видишь. Левый объект — стены, правый объект — куб и цилиндр.

08/07/2007, 16:31
QUOTE(Tra-la-la @ 08/07/2007, 17:05) [snapback]883216[/snapback]

вопрос не в том состоял. Слева на объекте ты видишь ребра которые скоются если включить режим smooth+highlights, а на правом ты не видишь. Левый объект — стены, правый объект — куб и цилиндр.

08/07/2007, 19:17

Разговор глухого с немым.
На сколько я понял вопрос: почему на стенках просматриваются грани, а на примитивах нет.
Потому что стенка импортированна как «линии». Или я не прав?

09/07/2007, 18:54

я спутал грани с ребрами. вопрос о ребрах был.. модель импортированная обьемная.. я уже вроде разобрался. спасибо. просто у меня в настройках стояла галочка напротив Backface Cull on Object Creation. Теперь разбираюсь почему эти самые скрытые ребра у меня показываются более тонкой линией по сравнению с остальным контуром.

17/10/2008, 07:45

Поставил 10 диретыкс, появились скрытые грани, макс 2009. Убираю галку, ничего не происходит, перегружаю, захожу в настройки, галка опять стоит, что делать ?
И еще прикол, стоит мат чисто белый, а во вюпортах, на стенах текстура ковра ? Переприменял, один хрен.

04/05/2010, 02:01

MAX 2011 directX 10
Аналогичная ситуация отображаются диагонали, снятие галки Customize -> Preferenсes.. -> Viewports -> Configure Driver -> display all triangle edges не помогло.
Пожалуйста, ткните носом на устранение проблемы.

04/05/2010, 02:30
а какого хрена вы вобще пользуете етот говновысер под названием директикс 10 в максе?
04/05/2010, 02:39
Попробуй в 2011 под dx9 поработать встретишь нешуточные тормоза, к сожалению.
04/05/2010, 02:57

чочо? стоит именно 9й(он вобще по умолчанию после установки макса активным устанавливается, а не 10й) в 2011м максе и всегда ставился таким все в норме. ну если к максу вобще такое понятие как «норма» можно применять
ищите проблему у себ с дровами там сервиспаками и заплатками.

04/05/2010, 03:07
На 9-ом dx наблюдаю жуткие тормоза. Видео радик EAH 4890, причем в 3d MAX2009 таких тормозов нет.
04/05/2010, 05:55
А кто сумеет рассказать, какая польза от directX 10 в Mаксе? Я в танке.
04/05/2010, 07:52
нету никакой пользы от dx10, только вред, судя по данному топику.
04/05/2010, 09:21
И вред, и бред.. Вот как вещает диагностика в разных режимах:

Graphics Vendor Information: Direct3D 9.0 (NVIDIA GeForce 9800 GT )
GPU Shader Model Support: SM3.0
Maximum pixel shader instruction count: 4096
Viewport Shading Quality: Best
Real-time Sun and Sky: Supported
Real-time Architectural Material: Supported

Graphics Vendor Information: Direct3D 10.0 (NVIDIA GeForce 9800 GT )
GPU Shader Model Support: SM1.0
Maximum pixel shader instruction count: 0
Viewport Shading Quality: None
Real-time Sun and Sky: Not Supported
Real-time Architectural Material: Not Supported

04/05/2010, 09:35

Был в одном из постов на area.autodesk комментарий от Ken Pimentel, где он признавал что dx10 с у них не заладилось и работает он из рук вон плохо. На вопрос будут ли лечить dx10 ответил что нет. Будут уже плясать с dx11.

03/07/2011, 13:46

столкнулся с той же проблемой. дирикт10 отображает все грани. вопрос решила галочка use cashed d3dx meshes (всё в тех же настройках драйвера).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *