estoy intentado hacer un efecto de fuego pero me da un error con las directx y no se donde puede estar el fallo.
este es el material que intento crear.
[CODE]
material "fuego" {
renderStates {
cull None
fillMode Solid
}
layer "l0" {
renderStates {
alphaBlendEnable false
}
effect "fuego" {
param "distortion_amount0" 0.1230
param "distortion_amount1" 0.09100
param "distortion_amount2" 0.07230
param "layer_speed" (0.68753 0.52000 0.75340)
param "height_attenuation" (0.44000 0.29000 0.0000)
sampler2D 0 "_fireBase" "fireBase" {
addressU Clamp
addressV Clamp
minFilter Linear
magFilter Linear
mipFilter Linear
}
sampler2D 1 "_fireDistortion" "FireDistortion" {
addressU Wrap
addressV Wrap
minFilter Linear
magFilter Linear
mipFilter Linear
}
sampler2D 2 "_fireOpacity" "FireOpacity" {
addressU Clamp
addressV Clamp
minFilter Linear
magFilter Linear
mipFilter Linear
}
}
}
}
y este el shander.
[CODE]
#include "definiciones.h"
float4 layer_speed;
struct VS_INPUT
{
float4 vPosition: POSITION;
float3 vTexCoord0 : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 Pos : POSITION;
float3 TexCoord0 : TEXCOORD0;
float3 TexCoord1 : TEXCOORD1;
float3 TexCoord2 : TEXCOORD2;
float3 TexCoord3 : TEXCOORD3;
};
VS_OUTPUT VShader(VS_INPUT data_in)
{
VS_OUTPUT Out;
// Align quad with the screen
Out.Pos = float4 (data_in.vPosition.x, data_in.vPosition.y, 0.0f, 1.0f);
// Output TexCoord0 directly
Out.TexCoord0 = data_in.vTexCoord0;
// Base texture coordinates plus scaled time
Out.TexCoord1.x = data_in.vTexCoord0.x;
Out.TexCoord1.y = data_in.vTexCoord0.y + layer_speed.x * ENV_Time;
Out.TexCoord1.z = data_in.vTexCoord0.z;
//Base texture coordinates plus scaled time
Out.TexCoord2.x = data_in.vTexCoord0.x;
Out.TexCoord2.y = data_in.vTexCoord0.y + layer_speed.y * ENV_Time;
Out.TexCoord2.z = data_in.vTexCoord0.z;
// Base texture coordinates plus scaled time
Out.TexCoord3.x = data_in.vTexCoord0.x;
Out.TexCoord3.y = data_in.vTexCoord0.y + layer_speed.z * ENV_Time;
Out.TexCoord3.z = data_in.vTexCoord0.z;
return Out;
}
float distortion_amount2;
float4 height_attenuation;
float distortion_amount1;
float distortion_amount0;
texture _fireBase;
texture _fireDistortion;
texture _fireOpacity;
sampler fire_base: register(s0) =
sampler_state
{
Texture = <_fireBase>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};
sampler fire_distortion: register(s1) =
sampler_state
{
Texture = <_fireDistortion>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};
sampler fire_opacity: register(s2) =
sampler_state
{
Texture = <_fireOpacity>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};
// Bias and double a value to take it from 0..1 range to -1..1 range
float4 bx2(float x)
{
return 2.0f * x - 1.0f;
}
struct PS_INPUT
{
float4 tc0 : TEXCOORD0;
float4 tc1 : TEXCOORD1;
float4 tc2 : TEXCOORD2;
float4 tc3 : TEXCOORD3;
};
float4 PShader(PS_INPUT data_in):COLOR0
{
// Sample noise map three times with different texture coordinates
float4 noise0 = tex2D(fire_distortion, data_in.tc1);
float4 noise1 = tex2D(fire_distortion, data_in.tc2);
float4 noise2 = tex2D(fire_distortion, data_in.tc3);
// Weighted sum of signed noise
float4 noiseSum = bx2(noise0) * distortion_amount0 + bx2(noise1) * distortion_amount1 + bx2(noise2) * distortion_amount2;
// Perturb base coordinates in direction of noiseSum as function of height (y)
float4 perturbedBaseCoords = data_in.tc0 + noiseSum * (data_in.tc0.y * height_attenuation.x + height_attenuation.y);
// Sample base and opacity maps with perturbed coordinates
float4 base = tex2D(fire_base, perturbedBaseCoords);
float4 opacity = tex2D(fire_opacity, perturbedBaseCoords);
return base * opacity;
}
technique RenderScene
{
pass p0
{
VertexShader = compile vs_1_1 VShader();
PixelShader = compile ps_2_0 PShader();
}
}
Perdonar las molestias.
Perdona, pero me das muy poca información. De todas formas, en la próxima versión, ya no se usa el #definiciones.h, así que espera a la siguietne que saldrá pronto, y luego me envias el proyecto, para que vea el error.
deacuerdo gracias por tu ayuda.