Состояния эффектов (Direct3D 9)
Состояния эффектов используются для инициализации состояний конвейера при подготовке к обработке вершин и пикселей.
effect state [ [index] ] = expression;
Где:
- Состояние эффекта — аналогично традиционным состояниям конвейера фиксированной функции. Ниже приведен полный список состояний.
- [ индекс] — необязательный целочисленный индекс. Индекс определяет определенное состояние в массиве состояний эффектов. Внешние скобки указывают, что индекс является необязательным. Если используется индекс, обязательно используйте внутренние скобки.
- expression — выражение назначения состояния. См. выражения(Direct3D 9).
Каждое состояние имеет собственный тип данных. Это тип данных, в который состояние ожидается, что значения будут находиться при назначении эффектом. Ниже перечислены типы данных, которые ожидает каждое состояние.
Обратите внимание, что интерфейс эффекта попытается привести значения к соответствующему типу как можно раньше. Литеральные значения можно привести во время компиляции. При вызове соответствующих методов Set необходимо привести не литералы (т. е. обычные переменные). Например, интерфейс эффекта будет приведение значений с помощью SetBool, SetValueи других аналогичных функций при необходимости. Для повышения производительности убедитесь, что значения, переданные интерфейсу эффекта, уже являются правильным типом и не потребуют приведения. Если среда выполнения не может привести значение, возвращается ошибка.
Состояния эффектов можно разделить на следующие категории:
- легких состояний
- материальных состояний
- состояния отрисовки
- состояния примеров
- состояния стадии образца
- состояния шейдера
- состояния константы шейдера
- состояния текстуры
- состояния стадии текстуры
- преобразования состояний
Легкие состояния
Чтобы обеспечить оптимальную производительность применения эффекта, все компоненты света или материала должны быть указаны в файле эффекта. Указывает, что не удается объявить значение по умолчанию, так как для Direct3D невозможно задать состояния света по отдельности.
Состояние света | Тип | Значения |
---|---|---|
LightAmbient[n] | float4 | См. внешний элемент D3DLIGHT9. |
LightAttenuation0[n] | плавать | См. элемент Attenuation0 D3DLIGHT9. |
LightAttenuation1[n] | плавать | См. элемент Attenuation1 D3DLIGHT9. |
LightAttenuation2[n] | плавать | См. элемент Attenuation2 D3DLIGHT9. |
LightDiffuse[n] | float4 | См. диффузный элемент D3DLIGHT9. |
LightDirection[n] | float3 | См. элемент "Направление" D3DLIGHT9. |
LightEnable[n] | bool | TRUE или FALSE. См. аргумент bEnable в LightEnable. |
LightFalloff[n] | плавать | D3DCOLORVALUE. См. элемент Falloff D3DLIGHT9. |
LightPhi[n] | плавать | См. элемент Phi D3DLIGHT9. |
LightPosition[n] | float3 | См. элемент Position D3DLIGHT9. |
LightRange[n] | плавать | См. элемент диапазона D3DLIGHT9. |
LightSpecular[n] | float4 | См. список D3DLIGHT9. |
LightTheta[n] | плавать | См. элемент Theta D3DLIGHT9. |
LightType[n] | dword | То же значение, что и массив значений до n D3DLIGHTTYPE без префикса D3DLIGHT_. |
Пример:
LightEnable[0] = TRUE;
LightType[0] = POINT;
LightPosition[0] = float3<10.0f, 1.0f, 23.0f>;
LightAmbient[0] = float4<0.7f, 0.0f, 0.0f, 1.0f>;
Это позволит включить освещение, сделать освещение точки освещения типа, установить положение света для float3<10.0f, 1.0f, 23.0f>, и задать внешний цвет плавающей<0,7f, 0.0f, 0.0f, 1.0f>.
Материальные состояния
Указывает, что не удается объявить значение по умолчанию, так как для Direct3D нельзя задать состояния материала по отдельности.
Состояние материала | Тип | Значения |
---|---|---|
MaterialAmbient | float4 | То же значение, что и Ambient |
MaterialDiffuse | float4 | То же значение, что и Диффузный |
MaterialEmissive | float4 | То же значение, что и |
MaterialPower | плавать | То же значение, что и Power |
МатериалSpecular | float4 | То же значение, что и Specular |
Пример:
MaterialDiffuse = float4<0.7f, 0.0f, 0.0f, 1.0f>;
MaterialPower = 3.0f;
При этом диффузный цвет будет плавать4<0,7f, 0.0f, 0.0f, 1.0f> и сделать мощность материала 3.0f.
Состояния отрисовки
Существует два типа состояний отрисовки:
Состояния отрисовки пиксельного канала
Состояния отрисовки файла эффектов имеют имена, аналогичные состояниям фиксированного конвейера функций, часто с удаленным префиксом.
Состояние отрисовки | Тип | Значения |
---|---|---|
AlphaBlendEnable | bool | True или False. Те же значения, что и D3DRS_ALPHABLENDENABLE в D3DRENDERSTATETYPE. |
AlphaFunc | dword | Те же значения, что и D3DCMPFUNC без префикса D3DCMP_. См. D3DRS_ALPHAFUNC. |
AlphaRef | dword | Те же значения, что и D3DRS_ALPHAREF. |
AlphaTestEnable | dword | True или False. См. D3DRS_ALPHATESTENABLE. |
BlendOp | dword | Те же значения, что и D3DBLENDOP без префикса D3DBLENDOP_. |
ColorWriteEnable | dword | Побитовое сочетание RED, GREEN, BLUE и ALPHA. См. D3DRS_COLORWRITEENABLE. |
DepthBias | плавать | Те же значения, что и D3DRS_DEPTHBIAS. |
DestBlend | dword | Те же значения, что и D3DBLEND без префикса D3DBLEND_. |
DitherEnable | bool | True или False. Те же значения, что и D3DRS_DITHERENABLE. |
FillMode | dword | Те же значения, что и D3DFILLMODE без префикса D3DFILL_. |
LastPixel | dword | True или False. См. D3DRS_LASTPIXEL. |
ShadeMode | dword | Те же значения, что и D3DSHADEMODE без префикса D3DSHADE_. |
НаклонScaleDepthBias | плавать | Те же значения, что и D3DRS_SLOPESCALEDEPTHBIAS. |
SrcBlend | dword | Те же значения, что и D3DBLEND без префикса D3DBLEND_. |
SRGBWriteEnable | bool | True или False. Те же значения, что и D3DRS_SRGBWRITEENABLE. |
Набор элементовEnable | bool | True или False. Те же значения, что и D3DRS_STENCILENABLE. |
Набор элементовFailFail | dword | Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILFAIL. |
Набор элементовFunc | dword | Те же значения, что и D3DCMPFUNC без префикса D3DCMP_. См. D3DRS_STENCILFUNC. |
Набор элементовMask | dword | Те же значения, что и D3DRS_STENCILMASK. |
Набор элементов | dword | Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILPASS. |
Набор элементовRef | int | Те же значения, что и D3DRS_STENCILREF. |
Набор элементовWriteMask | dword | Те же значения, что и D3DRS_STENCILWRITEMASK. |
Набор элементовZFail | dword | Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILZFAIL. |
Текстурафакторинг | dword | Те же значения, что и D3DCOLOR. Те же значения, что и D3DRS_TEXTUREFACTOR. |
Оболочка 15 | dword | Значения совпадают с значениями, используемыми D3DRS_WRAP0. Допустимые значения:
|
ZEnable | dword | Те же значения, что и D3DZBUFFERTYPE без префикса D3DZB_. |
ZFunc | dword | Те же значения, что и D3DCMPFUNC без префикса D3DCMP_. См. D3DRS_ZFUNC. |
ZWriteEnable | bool | True или False. См. D3DRS_ZWRITEENABLE. |
Пример:
AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;
Это позволит включить альфа-смешивание и сделать все геометрии отрисовки в проводной рамке.
Состояния отрисовки вершинного канала
Состояния отрисовки файла эффектов имеют имена, аналогичные состояниям фиксированного конвейера функций, часто с удаленным префиксом.
Состояние отрисовки | Тип | Значения |
---|---|---|
Окружающий | float4 | Те же значения, что и D3DRS_AMBIENT. |
AmbientSource | dword | Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_AMBIENTMATERIALSOURCE. |
Газетная вырезка | bool | True или False. Те же значения, что и D3DRS_CLIPPING. |
ClipPlaneEnable | dword | Побитовое сочетание D3DCLIPPLANE0 — D3DCLIPPLANE5 макросов. См. D3DCLIPPLANEn и D3DRS_CLIPPLANEENABLE. |
ColorVertex | bool | True или False. Те же значения, что и D3DRS_COLORVERTEX. |
CullMode | dword | Те же значения, что и D3DCULL без префикса D3DCULL_. |
ДиффузМатериалыSource | dword | Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_DIFFUSEMATERIALSOURCE. |
EmissiveSource | dword | Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_EMISSIVEMATERIALSOURCE. |
FogColor | dword | Те же значения, что и D3DCOLOR. См. D3DRS_FOGCOLOR. |
Туманность | плавать | Те же значения, что и D3DRS_FOGDENSITY. |
FogEnable | bool | True или False. Те же значения, что и D3DRS_FOGENABLE. |
FogEnd | плавать | Те же значения, что и D3DRS_FOGEND. |
Туманный запуск | плавать | Те же значения, что и D3DRS_FOGSTART. |
FogTableMode | dword | Те же значения, что и D3DFOGMODE. См. D3DRS_FOGTABLEMODE в D3DRENDERSTATETYPE. |
FogVertexMode | dword | Те же значения, что и D3DFOGMODE без префикса D3DFOG_. |
IndexedVertexBlendEnable | bool | True или False. Те же значения, что и D3DRS_INDEXEDVERTEXBLENDENABLE. |
Освещение | bool | True или False. Те же значения, что и D3DRS_LIGHTING. |
LocalViewer | bool | True или False. Те же значения, что и D3DRS_LOCALVIEWER. |
MultiSampleAntialias | bool | Те же значения, что и D3DRS_MULTISAMPLEANTIALIAS. |
MultiSampleMask | dword | Те же значения, что и D3DRS_MULTISAMPLEMASK. |
Нормализация Нормальс | bool | True или False. Те же значения, что и D3DRS_NORMALIZENORMALS. |
PatchSegments | плавать | Те же значения, что и nSegments в SetNPatchMode. |
PointScale_A | плавать | Те же значения, что и D3DRS_POINTSCALE_A. |
PointScale_B | плавать | Те же значения, что и D3DRS_POINTSCALE_B. |
PointScale_C | плавать | Те же значения, что и D3DRS_POINTSCALE_C. |
PointScaleEnable | bool | Те же значения, что и D3DRS_POINTSCALEENABLE. |
PointSize | плавать | Те же значения, что и D3DRS_POINTSIZE. |
PointSize_Min | плавать | Те же значения, что и D3DRS_POINTSIZE_MIN. |
PointSize_Max | плавать | Те же значения, что и D3DRS_POINTSIZE_MAX без префикса D3DRS_. |
PointSpriteEnable | bool | True или False. Те же значения, что и D3DRS_POINTSPRITEENABLE. |
RangeFogEnable | bool | True или False. Те же значения, что и D3DRS_RANGEFOGENABLE. |
SpecularEnable | bool | True или False. Те же значения, что и D3DRS_SPECULARENABLE. |
SpecularMaterialSource | dword | Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_SPECULARMATERIALSOURCE. |
TweenFactor | плавать | Те же значения, что и D3DRS_TWEENFACTOR. |
ВершинаBlend | dword | Те же значения, что и D3DVERTEXBLENDFLAGS без префикса D3DVBF_. См. D3DRS_VERTEXBLEND. |
Пример:
Ambient = float4<0.7f, 0.0f, 0.0f, 1.0f>;
CullMode = CCW;
FogColor = 0xff0000;
Это позволит сделать внешний цвет float4<0.7f, 0.0f, 0.0f, 1.0f>, установите режим выбраковки заднего лица на по часовой стрелке и задайте цвет тумана красным.
Пример состояний
Состояние sampler представляет объект sampler.
Государство | Тип | Значения |
---|---|---|
Пробоотборник | пробоотборник | nullили блок состояния примера. |
Состояния стадии sampler
Состояния стадии sampler используются для выборки текстур. Состояние sampler определяет типы фильтрации и режимы адресации текстур.
Состояние sampler | Тип | Значения |
---|---|---|
AddressU[16] | dword | Те же значения, что и D3DTEXTUREADDRESS без префикса D3DTADDRESS_. См. D3DSAMP_ADDRESSU. |
AddressV[16] | dword | Те же значения, что и D3DTEXTUREADDRESS без префикса D3DTADDRESS_. См. D3DSAMP_ADDRESSV. |
AddressW[16] | dword | Те же значения, что и D3DTEXTUREADDRESS без префикса D3DTADDRESS_. См. D3DSAMP_ADDRESSW. |
BorderColor[16] | D3DCOLOR | Те же значения, что и D3DTEXTUREFILTERTYPE без префикса D3DTEXF_. См. D3DSAMP_BORDERCOLOR. |
MagFilter[16] | dword | Те же значения, что и D3DTEXTUREFILTERTYPE без префикса D3DTEXF_. См. D3DSAMP_MAGFILTER. |
MaxAnisotropy[16] | dword | Те же значения, что и D3DSAMP_MAXANISOTROPY без префикса D3DSAMP_. |
MaxMipLevel[16] | int | Те же значения, что и D3DSAMP_MAXMIPLEVEL без префикса D3DSAMP_. |
MinFilter[16] | dword | Те же значения, что и D3DSAMP_MINFILTER без префикса D3DSAMP_. |
MipFilter[16] | dword | Те же значения, что и D3DSAMP_MIPFILTER без префикса D3DSAMP_. |
MipMapLodBias[16] | плавать | Те же значения, что и D3DSAMP_MIPMAPLODBIAS без префикса D3DSAMP_. |
SRGBTexture | bool | То же значение, что и D3DSAMP_SRGBTEXTURE без префикса D3DSAMP_. |
Пример:
AddressU[0] = CLAMP;
AddressV[0] = CLAMP;
AddressW[0] = CLAMP;
Это зацепляет значения UVW в диапазоне от 0 до 1.
Состояния шейдера
Существует только два состояния шейдера эффектов: одна связана с объектом шейдера вершин и другим, связанным с объектом шейдера пикселей.
Состояние шейдера | Тип | Значения |
---|---|---|
PixelShader | pixelhader | null, блок сборки, целевой объект компиляции или параметр шейдера пикселей. |
VertexShader | вершинный шейдер | null, блок сборки, целевой объект компиляции или параметр шейдера пикселей. |
Пример:
VertexShader = compile vs_1_1 VSTexture();
PixelShader = NULL;
Это скомпилирует VSTexture, шейдер вершин, определенный ранее в файле .fx, в шейдер вершин версии 1.1, а затем задает скомпилированный шейдер в качестве шейдера вершин. Шейдер пикселей назначается NULL.
Состояния констант шейдера
Состояния константы шейдера используются для доступа к параметрам константы шейдера.
Состояние константы шейдера | Тип | Значения |
---|---|---|
PixelShaderConstant | float[m[n]] | m x n массив с плавающей запятой; m и n являются необязательными. |
PixelShaderConstant1 | float4 | Один 4D float. |
PixelShaderConstant2 | float4x2 | Два 4D с плавающей запятой. |
PixelShaderConstant3 | float4x3 | Три 4D с плавающей запятой. |
PixelShaderConstant4 | float4x4 | Четыре 4D с плавающей запятой. |
PixelShaderConstantB | bool[m[n]] | m x n массив bools; m и n являются необязательными. |
PixelShaderConstantI | int[m[n]] | m x n массив ints. m и n являются необязательными. |
PixelShaderConstantF | float[m[n]] | m x n массив с плавающей запятой. m и n являются необязательными. |
VertexShaderConstant | float[m[n]] | m x n массив с плавающей запятой. m и n являются необязательными. |
VertexShaderConstant1 | float4 | Один 4D float. |
VertexShaderConstant2 | float4x2 | Два 4D с плавающей запятой. |
VertexShaderConstant3 | float4x3 | Три 4D с плавающей запятой. |
VertexShaderConstant4 | float4x4 | Четыре 4D с плавающей запятой. |
VertexShaderConstantB | bool[m[n]] | m x n массив bools. m и n являются необязательными. |
VertexShaderConstantI | int[m[n]] | m x n массив ints. m и n являются необязательными. |
VertexShaderConstantF | float[m[n]] | m x n массив с плавающей запятой. m и n являются необязательными. |
Состояния текстуры
Состояния текстуры инициализируют текстуры, используемые мультитекстовой смешивателем.
Состояние текстуры | Тип | Значения |
---|---|---|
Текстура[8] | текстура | значение NULLили параметр текстуры. |
Состояния стадии текстуры
Состояния стадии текстуры настраивают текстуры и этапы текстуры в мультитекстовом смешивателье.
Состояние стадии текстуры | Тип | Значения |
---|---|---|
AlphaOp[8] | dword | То же, что и D3DTEXTUREOP без префикса D3DTOP_. См. D3DTSS_ALPHAOP. |
AlphaArg0[8] | dword | То же, что и D3DTA без префикса D3DTA_. См. D3DTSS_ALPHAARG0. |
AlphaArg1[8] | dword | То же, что и D3DTA без префикса D3DTA_. См. D3DTSS_ALPHAARG1. |
AlphaArg2[8] | dword | То же, что и D3DTA без префикса D3DTA_. См. D3DTSS_ALPHAARG2. |
ColorArg0[8] | dword | То же, что и D3DTA без префикса D3DTA_. См. D3DTSS_COLORARG0. |
ColorArg1[8] | dword | То же, что и D3DTA без префикса D3DTA_. См. D3DTSS_COLORARG1. |
ColorArg2[8] | dword | То же, что и D3DTA без префикса D3DTA_. См. D3DTSS_COLORARG2. |
ColorOp[8] | dword | То же, что и D3DTEXTUREOP без префикса D3DTOP_. См. D3DTSS_COLOROP. |
BumpEnvLScale[8] | плавать | Те же значения, что и D3DTSS_BUMPENVLSCALE без префикса D3DTSS_TCI. |
BumpEnvLOffset[8] | плавать | Те же значения, что и D3DTSS_BUMPENVLOFFSET без префикса D3DTSS_TCI. |
BumpEnvMat00[8] | плавать | Те же значения, что и D3DTSS_BUMPENVMAT00. |
BumpEnvMat01[8] | плавать | Те же значения, что и D3DTSS_BUMPENVMAT01. |
BumpEnvMat10[8] | плавать | Те же значения, что и D3DTSS_BUMPENVMAT10. |
BumpEnvMat11[8] | плавать | Те же значения, что и D3DTSS_BUMPENVMAT11. |
ResultArg[8] | dword | То же, что и D3DTA без префикса D3DTA_. См. D3DTSS_RESULTARG. |
TexCoordIndex[8] | dword | Те же значения, что и D3DTSS_TEXCOORDINDEX без префикса D3DTSS_TCI. |
TextureTransformFlags[8] | dword | Те же значения, что и значения D3DTEXTURETRANSFORMFLAGS без префикса D3DTTFF_. См. D3DTSS_TEXTURETRANSFORMFLAGS. |
Преобразование состояний
Задайте состояния преобразования для инициализации матриц преобразования. Эффекты используют транспонированные матрицы для эффективности. Вы можете предоставить транспонированные матрицы эффекту, или эффект автоматически транспонирует матрицы перед их использованием.
Состояние преобразования | Тип | Значения |
---|---|---|
ПроекцияTransform | float4x4 | Матрица 4x4 с плавающей запятой. Те же значения, что и D3DTS_PROJECTION без префикса D3DTS_. |
TextureTransform[8] | float4x4 | Матрица 4x4 с плавающей запятой. Те же значения, что и D3DTRANSFORMSTATETYPE без префикса D3DTS_. |
ViewTransform | float4x4 | Матрица 4x4 с плавающей запятой. Те же значения, что и D3DTS_VIEW без префикса D3DTS_. |
WorldTransform | float4x4 | Матрица 4x4 с плавающей запятой. |