游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1467|回复: 3

帮忙看看这个fx有没有问题

[复制链接]

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
发表于 2009-3-19 21:32:00 | 显示全部楼层 |阅读模式
请大家帮我看看,我的这个shader有没有问题
//================================
//Global   variebles;
//===============================
float4x4                           matWorld;
float4x4                           matWorldViewProj;
float3                             LightPos;
float3                             EyePos;
float3                             LightAttenuation  =  float3(1, 0.8, 0.6);
float4                             LightColor        =  float4(1, 0, 0, 1);

struct  VS_OUTPUT
{
    float4      Pos         :  POSITION;
    float3      Normal      :  TEXCOORD0;
    float2      Tex         :  TEXCOORD1;
    float4      LightDir    :  TEXCOORD2;
    float3      EyeDir      :  TEXCOORD3;
};

VS_OUTPUT    main_vs(float3  inPos       :  POSITION,
                     float3  inNormal    :  NORMAL,
                     float2  inTex       :  TEXCOORD
                     )
{
    VS_OUTPUT      vsOut      =    (VS_OUTPUT)0;
   
    vsOut.Pos                 =     mul(float4(inPos, 1), matWorldViewProj);
    vsOut.Normal              =     normalize(mul(float4(inNormal, 1), matWorld));
    vsOut.Tex                 =     inTex;
    vsOut.LightDir.xyz        =     LightPos  -  mul(float4(inPos, 1), matWorld);
   
    float    Dist             =     length(vsOut.LightDir.xyz);
    vsOut.LightDir.xyz       /=     Dist;

    vsOut.LightDir.w          =     saturate(1 / (LightAttenuation.x + LightAttenuation.y * Dist + LightAttenuation.z * Dist * Dist));


    vsOut.EyeDir              =     mul(float4(inPos, 1), matWorld)  -  EyePos;
   
    return      vsOut;
}






float4      main_ps(float3  inNormal       :  TEXCOORD0,
                    float4  inLightDir     :  TEXCOORD2,
                    float3  inEyeDir       :  TEXCOORD3
                    )  : COLOR
{
    float4           Color  =  float4(0, 0, 0, 0);

    //=============
    //Ambient

    Color      +=    LightColor * 0.2;
    //================
    //Diffuse

    float            Diff  =  saturate(dot(inNormal, inLightDir.xyz));
    Color      +=    LightColor * Diff * inLightDir.w;
    //=================
    //Specular
    Diff                   =  pow(saturate(dot(inLightDir.xyz, inEyeDir)), 16);
    Color      +=    LightColor * Diff * inLightDir.w;

    return  Color;
}

technique Phong
{
    pass p0
    {
        VertexShader = compile vs_2_0 main_vs();
        PixelShader = compile ps_2_0 main_ps();
    }  
}

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-19 21:51:00 | 显示全部楼层

Re:帮忙看看这个fx有没有问题

编译通过,至于逻辑有没有问题就不知道了.

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2009-3-20 12:06:00 | 显示全部楼层

Re:帮忙看看这个fx有没有问题

谢谢,请问大家有什么好的简单effect程序来看看吗,谢谢了

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-20 14:22:00 | 显示全部楼层

Re:帮忙看看这个fx有没有问题

Direct3D SDK里有不少吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 01:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表