• 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:

    //--------------------------------------------------------------------------------------
    // 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(); 
        }
    }
  • 相关阅读:
    阮一峰的网络日志
    解决Windows路径太长的目录以及文件名超长删除的问题
    LVM扩容根分区
    Centos7 搭建prometheus+Grafana监控
    python3 读取txt文件数据,绘制趋势图,matplotlib模块
    linux python3安装whl包时报错解决:is not a supported wheel on this platform
    堆排序
    nginx: [emerg] "upstream" directive is not allowed here in .../.../.../*.conf
    Github私有仓库使用设置
    AWK处理重复Hosts
  • 原文地址:https://www.cnblogs.com/zengqh/p/2574043.html
Copyright © 2020-2023  润新知