zoukankan      html  css  js  c++  java
  • phong 光照模型。。

       前些日子 乘着有闲功夫,慢慢的hlsl看了起来,发现以前学的数学知识全用上了,只可惜忘得都差不多了,又要恶补数学了。
       做了个比较简单的 phong 光照模型。
       
    float4x4 Scal;
    float4x4 World;
    float4x4 View;
    float4x4 projection;
    float4x4 WorldViewProjection;
    float3 EyePosition;
    float3 LightDir;
    float4 LightColor;

    struct VertexInput
    {
        float4  Position : POSITION;
        float2  Tex : TEXCOORD0;
        float3  Normal : NORMAL;
    }
    ;


    struct VertexOutput
    {
        float4  Position : POSITION;
        float2    Tex    : TEXCOORD0;
        float3    Normal : TEXCOORD1;
        float3  View     : TEXCOORD2;        
    }
    ;


    VertexOutput VertexMain(VertexInput input)
    {
        VertexOutput output 
    = (VertexOutput)0;
        
         WorldViewProjection 
    = mul(mul(View, World), projection);
         
         output.Position 
    = mul(mul(input.Position, Scal), WorldViewProjection);
         output.Tex 
    = input.Tex;
         output.Normal 
    = mul(input.Normal, World);
         output.View  
    = EyePosition - mul(input.Position,  World);
         
         
    return output;
    }


    float4 PixelMain(VertexOutput input) : COLOR0
    {
        
    float diffsum;
        
    float specularsum;
        float4 color;
        
    float sunshinepower;
        float4 amibent 
    = float4(0.1f0.1f0.1f1.0f);
        sunshinepower 
    = 16.0f;
        
        diffsum 
    = specularsum = 0;
        
        
    //漫反射
        LightDir = normalize(LightDir);
        diffsum 
    = saturate(dot(LightDir, input.Normal));
        
        
    //镜面反射
        float3 L = -LightDir;
        float3 R 
    = normalize(reflect(L, input.Normal));
        float3 V 
    = normalize(input.View);
        
        specularsum 
    = pow(saturate(dot(R, V)), sunshinepower);
        
        color 
    = specularsum + diffsum * LightColor + amibent;

        
        
    return color;
    }


    technique techR 
    {
        pass p0
        
    {
            VertexShader 
    = compile vs_2_0 VertexMain();
            PixelShader 
    = compile ps_2_0 PixelMain();
        }

    }

    转自: http://www.cppblog.com/AstaTus/

  • 相关阅读:
    www.insidesql.org
    kevinekline----------------- SQLSERVER MVP
    Sys.dm_os_wait_stats Sys.dm_performance_counters
    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
    VITAM POST MORTEM – ANALYZING DEADLOCKED SCHEDULERS MINI DUMP FROM SQL SERVER
    Cargo, Rust’s Package Manager
    建筑识图入门(初学者 入门)
    Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge
    Microsoft SQL Server R Services
    The Rambling DBA: Jonathan Kehayias
  • 原文地址:https://www.cnblogs.com/iapp/p/3631873.html
Copyright © 2011-2022 走看看