Foros - Stratos

Proyectos => Jad Engine => Mensaje iniciado por: race en 12 de Mayo de 2006, 01:38:00 PM

Título: Ayuda Con Los Shanders
Publicado por: race en 12 de Mayo de 2006, 01:38:00 PM
 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.
Título: Ayuda Con Los Shanders
Publicado por: Haddd en 12 de Mayo de 2006, 04:16:50 PM
 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.
Título: Ayuda Con Los Shanders
Publicado por: race en 12 de Mayo de 2006, 04:33:45 PM
 deacuerdo gracias por tu ayuda.