hlsl之diffuse

很简单的hlsl,真没有时间去写得详细。

方向光从(1, 1, 1)。

D3DXCOLOR colorMtrlDiffuse(0.5f, 0.5f, 0.5f, 1.0f);

    D3DXCOLOR colorMtrlAmbient(0.5f, 0.5f, 0.1f, 1.0f);

    D3DXCOLOR colorLightAmbient(1.0f, 0.5f, 0.1f, 1.0f);

    D3DXCOLOR colorLightDiffuse(1.0f, 1.0f, 1.0f, 1.0f);

    D3DXVECTOR3 lightDir(1.0f, 1.0f, 1.0f);



    V_RETURN( g_pEffect9->SetValue( "g_MaterialAmbientColor", &colorMtrlAmbient, sizeof( D3DXCOLOR ) ) );

    V_RETURN( g_pEffect9->SetValue( "g_MaterialDiffuseColor", &colorMtrlDiffuse, sizeof( D3DXCOLOR ) ) );

    V_RETURN( g_pEffect9->SetValue( "g_LightAmbient", &colorLightAmbient, sizeof( D3DXCOLOR ) ) );

    V_RETURN( g_pEffect9->SetValue( "g_LightDiffuse", &colorLightDiffuse, sizeof( D3DXCOLOR ) ) );

    V_RETURN( g_pEffect9->SetValue( "g_LightDir", &lightDir, sizeof( D3DXVECTOR3 ) ) );

hlsl之diffuse

hlsl:

//--------------------------------------------------------------------------------------

// File: SimpleSample.fx

//

// The effect file for the SimpleSample sample.  

// 

// Copyright (c) Microsoft Corporation. All rights reserved.

//--------------------------------------------------------------------------------------





//--------------------------------------------------------------------------------------

// Global variables

//--------------------------------------------------------------------------------------

float4 g_MaterialAmbientColor;      // Material's ambient color

float4 g_MaterialDiffuseColor;      // Material's diffuse color

float4 g_LightAmbient;              // Light's diffuse color

float3 g_LightDir;                  // Light's direction in world space

float4 g_LightDiffuse;              // Light's diffuse color

texture g_MeshTexture;              // Color texture for mesh



float    g_fTime;                   // App's time in seconds

float4x4 g_mWorld;                  // World matrix for object

float4x4 g_mWorldViewProjection;    // World * View * Projection matrix







//--------------------------------------------------------------------------------------

// Texture samplers

//--------------------------------------------------------------------------------------

sampler MeshTextureSampler = 

sampler_state

{

    Texture = <g_MeshTexture>;

    MipFilter = LINEAR;

    MinFilter = LINEAR;

    MagFilter = LINEAR;

};





//--------------------------------------------------------------------------------------

// Vertex shader output structure

//--------------------------------------------------------------------------------------

struct VS_OUTPUT

{

    float4 Position   : POSITION;   // vertex position 

    float4 Diffuse    : COLOR0;     // vertex diffuse color (note that COLOR0 is clamped from 0..1)

    float2 TextureUV  : TEXCOORD0;  // vertex texture coords 

};





//--------------------------------------------------------------------------------------

// This shader computes standard transform and lighting

//--------------------------------------------------------------------------------------

VS_OUTPUT RenderSceneVS( float4 vPos : POSITION, 

                         float3 vNormal : NORMAL,

                         float2 vTexCoord0 : TEXCOORD0 )

{

    VS_OUTPUT Output;

    float3 vNormalWorldSpace;

    

    // Transform the position from object space to homogeneous projection space

    Output.Position = mul(vPos, g_mWorldViewProjection);

    

    // Transform the normal from object space to world space    

    vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space)



    // Calc diffuse color

    float4 ambientColor = g_MaterialAmbientColor * g_LightAmbient;  

    Output.Diffuse.rgb = ambientColor + g_LightDiffuse * saturate(dot(g_LightDir, vNormalWorldSpace));   

    Output.Diffuse.a = 1.0f; 

    

    // Just copy the texture coordinate through

    Output.TextureUV = vTexCoord0; 

    

    return Output;    

}





//--------------------------------------------------------------------------------------

// Pixel shader output structure

//--------------------------------------------------------------------------------------

struct PS_OUTPUT

{

    float4 RGBColor : COLOR0;  // Pixel color    

};





//--------------------------------------------------------------------------------------

// This shader outputs the pixel's color by modulating the texture's

// color with diffuse material color

//--------------------------------------------------------------------------------------

PS_OUTPUT RenderScenePS( VS_OUTPUT In ) 

{ 

    PS_OUTPUT Output;



    // Lookup mesh texture and modulate it with diffuse

    Output.RGBColor = tex2D(MeshTextureSampler, In.TextureUV) * In.Diffuse;



    return Output;

}





//--------------------------------------------------------------------------------------

// Renders scene 

//--------------------------------------------------------------------------------------

technique RenderScene

{

    pass P0

    {          

        VertexShader = compile vs_2_0 RenderSceneVS();

        PixelShader  = compile ps_2_0 RenderScenePS(); 

    }

}

你可能感兴趣的:(diff)