Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda Con Los Shanders

Iniciado por race, 12 de Mayo de 2006, 01:38:00 PM

« anterior - próximo »

race

 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.

Haddd

 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.

race

 deacuerdo gracias por tu ayuda.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.