Поделиться через


Состояния эффектов (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. Допустимые значения:
  • COORD0 (который соответствует D3DWRAPCOORD_0)
  • COORD1 (который соответствует D3DWRAPCOORD_1)
  • COORD2 (который соответствует D3DWRAPCOORD_2)
  • COORD3 (который соответствует D3DWRAPCOORD_3)
  • U (который соответствует D3DWRAP_U)
  • V (соответствует D3DWRAP_V)
  • W (соответствующее D3DWRAP_W)
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 с плавающей запятой.

 

формата эффектов