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


Состояния эффектов (Direct3D 9)

Состояния эффектов используются для инициализации состояний конвейера при подготовке к обработке вершин и пикселей.

effect state [ [index] ] = expression;

Где:

  • состояние эффекта — аналогично традиционным состояниям конвейера фиксированной функции. Полный список состояний приведен ниже.
  • [ [index] ] — необязательный целочисленный индекс. Индекс идентифицирует определенное состояние в массиве состояний эффекта. Внешние скобки указывают, что индекс является необязательным. Если используется индекс, обязательно используйте внутренние скобки.
  • expression — выражение присваивания состояния. См. раздел Выражения (Direct3D 9).

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

Обратите внимание, что интерфейс эффекта попытается привести значения к соответствующему типу как можно раньше. Литеральные значения можно привести во время компиляции. При вызове соответствующих методов Set необходимо привести не-литералы (т. е. обычные переменные). Например, интерфейс эффекта при необходимости приводит значения, заданные с помощью SetBool, SetValue и других аналогичных функций. Для повышения производительности убедитесь, что значения, передаваемые в интерфейс эффекта, уже имеют правильный тип и не требуют приведения. Если среде выполнения не удается привести значение, возвращается ошибка.

Состояния эффекта можно разделить на следующие категории:

Светлые состояния

Чтобы обеспечить оптимальную производительность при применении эффекта, в файле эффекта должны быть указаны все компоненты света или материала. Для состояний, которые не удается объявить, задано некоторое значение по умолчанию, так как Direct3D не может задавать состояния освещения по отдельности.

Состояние света Тип Значения
LightAmbient[n] float4 См. элемент Ambient объекта D3DLIGHT9.
LightAttenuation0[n] FLOAT См. элемент Attenuation0 D3DLIGHT9.
LightAttenuation1[n] FLOAT См. элемент Attenuation1 В D3DLIGHT9.
LightAttenuation2[n] FLOAT См. элемент Attenuation2 в D3DLIGHT9.
LightDiffuse[n] float4 См. диффузный элемент D3DLIGHT9.
LightDirection[n] float3 См. элемент Direction объекта D3DLIGHT9.
LightEnable[n] bool TRUE или FALSE. См. аргумент bEnable в LightEnable.
LightFalloff[n] FLOAT D3DCOLORVALUE. См. элемент Falloff D3DLIGHT9.
LightPhi[n] FLOAT См. элемент Phi D3DLIGHT9.
LightPosition[n] float3 См. позицию элемента D3DLIGHT9.
LightRange[n] FLOAT См. элемент Range объекта D3DLIGHT9.
LightSpecular[n] float4 См. specular member of D3DLIGHT9.
LightTheta[n] FLOAT См. элемент Theta D3DLIGHT9.
LightType[n] dword То же значение, что и массив значений 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> и задать для цвета окружающей среды значение float4<0.7f, 0.0f, 0.0f, 1.0f>.

Состояния материалов

Для состояний, которые не удается объявить, задано некоторое значение по умолчанию, так как Direct3D не может задать состояния материала по отдельности.

Состояние материала Тип Значения
MaterialAmbient float4 То же значение, что и Ambient
MaterialDiffuse float4 То же значение, что и Диффузный
MaterialEmissive float4 То же значение, что и Emissive
MaterialPower FLOAT То же значение, что и Power
MaterialSpecular float4 То же значение, что и зеркальный

 

Пример

MaterialDiffuse = float4<0.7f, 0.0f, 0.0f, 1.0f>;
MaterialPower = 3.0f;

Это установит для рассеянного цвета значение float4<0.7f, 0.0f, 0.0f, 1.0f> и сделает силу материала 3.0f.

Состояния отрисовки

Существует два типа состояний отрисовки:

Состояния отрисовки пиксельной трубы

Имена состояний отрисовки файла эффектов похожи на состояния конвейера фиксированной функции, часто с удаленным префиксом.

Состояние отрисовки Тип Значения
AlphaBlendEnable bool Верно или неверно. Те же значения, что и D3DRS_ALPHABLENDENABLE в D3DRENDERSTATETYPE.
AlphaFunc dword Те же значения, что и D3DCMPFUNC без префикса D3DCMP_. См. D3DRS_ALPHAFUNC.
AlphaRef dword Те же значения, что и D3DRS_ALPHAREF.
AlphaTestEnable dword Верно или неверно. См. D3DRS_ALPHATESTENABLE.
BlendOp dword Те же значения, что и D3DBLENDOP без префикса D3DBLENDOP_.
ColorWriteEnable dword Побитовое сочетание red, green, blue и alpha. См. D3DRS_COLORWRITEENABLE.
DepthBias FLOAT Те же значения, что и D3DRS_DEPTHBIAS.
DestBlend dword Те же значения, что и D3DBLEND без префикса D3DBLEND_.
DitherEnable bool Верно или неверно. Те же значения, что и D3DRS_DITHERENABLE.
FillMode dword Те же значения, что и D3DFILLMODE без префикса D3DFILL_.
LastPixel dword Верно или неверно. См. D3DRS_LASTPIXEL.
Режимраскр dword Те же значения, что и D3DSHADEMODE без префикса D3DSHADE_.
SlopeScaleDepthBias FLOAT Те же значения, что и D3DRS_SLOPESCALEDEPTHBIAS.
SrcBlend dword Те же значения, что и D3DBLEND без префикса D3DBLEND_.
SRGBWriteEnable bool Верно или неверно. Те же значения, что и D3DRS_SRGBWRITEENABLE.
StencilEnable bool Верно или неверно. Те же значения, что и D3DRS_STENCILENABLE.
StencilFail dword Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILFAIL.
StencilFunc dword Те же значения, что и D3DCMPFUNC без префикса D3DCMP_. См. D3DRS_STENCILFUNC.
StencilMask dword Те же значения, что и D3DRS_STENCILMASK.
StencilPass dword Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILPASS.
StencilRef INT Те же значения, что и D3DRS_STENCILREF.
StencilWriteMask dword Те же значения, что и D3DRS_STENCILWRITEMASK.
StencilZFail dword Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILZFAIL.
TextureFactor dword Те же значения, что и D3DCOLOR. Те же значения, что и D3DRS_TEXTUREFACTOR.
Wrap0 — wrap15 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 Верно или неверно. См. D3DRS_ZWRITEENABLE.

Пример

AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;

Это позволит включить альфа-смешивание и сделать все геометрические объекты отрисовывая в проволочной рамке.

Состояния отрисовки вершинного канала

Имена состояний отрисовки файла эффектов похожи на состояния конвейера фиксированной функции, часто с удаленным префиксом.

Состояние отрисовки Тип Значения
Окружающее float4 Те же значения, что и D3DRS_AMBIENT.
AmbientMaterialSource dword Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_AMBIENTMATERIALSOURCE.
Усечение bool Верно или неверно. Те же значения, что и D3DRS_CLIPPING.
ClipPlaneEnable dword Побитовая комбинация макросов D3DCLIPPLANE0 - D3DCLIPPLANE5. См . раздел D3DCLIPPLANEn и D3DRS_CLIPPLANEENABLE.
ColorVertex bool Верно или неверно. Те же значения, что и D3DRS_COLORVERTEX.
CullMode dword Те же значения, что и D3DCULL без префикса D3DCULL_.
Диффузный материалоисточник dword Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_DIFFUSEMATERIALSOURCE.
EmissiveMaterialSource dword Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_EMISSIVEMATERIALSOURCE.
Туманный цвет dword Те же значения, что и D3DCOLOR. См. D3DRS_FOGCOLOR.
FogDensity FLOAT Те же значения, что и D3DRS_FOGDENSITY.
FogEnable bool Верно или неверно. Те же значения, что и D3DRS_FOGENABLE.
FogEnd FLOAT Те же значения, что и D3DRS_FOGEND.
FogStart FLOAT Те же значения, что и D3DRS_FOGSTART.
FogTableMode dword Те же значения, что и D3DFOGMODE. См. D3DRS_FOGTABLEMODE в D3DRENDERSTATETYPE.
FogVertexMode dword Те же значения, что и D3DFOGMODE без префикса D3DFOG_.
IndexedVertexBlendEnable bool Верно или неверно. Те же значения, что и D3DRS_INDEXEDVERTEXBLENDENABLE.
Освещение bool Верно или неверно. Те же значения, что и D3DRS_LIGHTING.
LocalViewer bool Верно или неверно. Те же значения, что и D3DRS_LOCALVIEWER.
MultiSampleAntialias bool Те же значения, что и D3DRS_MULTISAMPLEANTIALIAS.
MultiSampleMask dword Те же значения, что и D3DRS_MULTISAMPLEMASK.
Нормализация нормальных значений bool Верно или неверно. Те же значения, что и D3DRS_NORMALIZENORMALS.
PatchSegments FLOAT Те же значения, что и nSegments в SetNPatchMode.
PointScale_A FLOAT Те же значения, что и D3DRS_POINTSCALE_A.
PointScale_B FLOAT Те же значения, что и D3DRS_POINTSCALE_B.
PointScale_C FLOAT Те же значения, что и D3DRS_POINTSCALE_C.
PointScaleEnable bool Те же значения, что и D3DRS_POINTSCALEENABLE.
PointSize FLOAT Те же значения, что и D3DRS_POINTSIZE.
PointSize_Min FLOAT Те же значения, что и D3DRS_POINTSIZE_MIN.
PointSize_Max FLOAT Те же значения, что и D3DRS_POINTSIZE_MAX без префикса D3DRS_.
PointSpriteEnable bool Верно или неверно. Те же значения, что и D3DRS_POINTSPRITEENABLE.
RangeFogEnable bool Верно или неверно. Те же значения, что и D3DRS_RANGEFOGENABLE.
SpecularEnable bool Верно или неверно. Те же значения, что и D3DRS_SPECULARENABLE.
SpecularMaterialSource dword Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_SPECULARMATERIALSOURCE.
TweenFactor FLOAT Те же значения, что и D3DRS_TWEENFACTOR.
VertexBlend 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.

Состояние Тип Значения
Образец Сборники NULL или блок состояния выборки.

 

Состояния стадии выборки

Состояния стадии выборки используются для выборки текстур. Состояние выборки определяет типы фильтрации и режимы адресации текстур.

Состояние выборки Тип Значения
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] FLOAT Те же значения, что и D3DSAMP_MIPMAPLODBIAS без префикса D3DSAMP_.
SRGBTexture bool То же значение, что и D3DSAMP_SRGBTEXTURE без префикса D3DSAMP_.

 

Пример

AddressU[0] = CLAMP;
AddressV[0] = CLAMP;
AddressW[0] = CLAMP;

Это зажимает значения UVW в диапазоне от 0 до 1.

Состояния шейдера

Существует только два состояния шейдера эффекта: одно связано с объектом вершинного шейдера, а другое — с объектом пиксельного шейдера.

Состояние шейдера Тип Значения
PixelShader pixelshader NULL, блок сборки, целевой объект компиляции или параметр пиксельного шейдера.
VertexShader 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] FLOAT Те же значения, что и D3DTSS_BUMPENVLSCALE без префикса D3DTSS_TCI.
BumpEnvLOffset[8] FLOAT Те же значения, что и D3DTSS_BUMPENVLOFFSET без префикса D3DTSS_TCI.
BumpEnvMat00[8] FLOAT Те же значения, что и D3DTSS_BUMPENVMAT00.
BumpEnvMat01[8] FLOAT Те же значения, что и D3DTSS_BUMPENVMAT01.
BumpEnvMat10[8] FLOAT Те же значения, что и D3DTSS_BUMPENVMAT10.
BumpEnvMat11[8] FLOAT Те же значения, что и D3DTSS_BUMPENVMAT11.
ResultArg[8] dword Аналогично D3DTA без префикса D3DTA_. См. D3DTSS_RESULTARG.
TexCoordIndex[8] dword Те же значения, что и D3DTSS_TEXCOORDINDEX без префикса D3DTSS_TCI.
TextureTransformFlags[8] dword Те же значения, что и значения D3DTEXTURETRANSFORMFLAGS без префикса D3DTTFF_. См. D3DTSS_TEXTURETRANSFORMFLAGS.

 

Состояния преобразования

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

Состояние преобразования Тип Значения
ПроекцияТрансформа float4x4 Матрица с плавающей запятой 4x4. Те же значения, что и D3DTS_PROJECTION без префикса D3DTS_.
TextureTransform[8] float4x4 Матрица с плавающей запятой 4x4. Те же значения, что и D3DTRANSFORMSTATETYPE без префикса D3DTS_.
ViewTransform float4x4 Матрица с плавающей запятой 4x4. Те же значения, что и D3DTS_VIEW без префикса D3DTS_.
WorldTransform float4x4 Матрица с плавающей запятой 4x4.

 

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