⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mv_render.fx.bak

📁 virtual reality project. This algorithm for building large image to Volume rendering. Using directx
💻 BAK
📖 第 1 页 / 共 2 页
字号:
//-------- global (uniform) var. -----------------------------------------------------------------
float isFrontFace;  // front face : 1 / back face : -1 / else : 0 ( used in EmptySkipVertexShader )                  
float3 lightVec;    // ( used in VolumeRenderPShader )
//float3 viewVec;
float4 faceNormal;  // object face normal (in object space, used in EmptySkipVertexShader )
float4x4 objectTransMatrix;  // texture coordinate transformation matrix ( used in EmptySkipVertexShader )
float4x4 viewProjMatrix;              // view projection matrix ( used in VolumeRenderVShader )
float4x4 textureTransMatrix;          // texture coordinate transformation matrix ( used in VolumeRenderVShader )
row_major float4x4 clipPlaneMatrix; // clip plane matrix 
float4x4 meshTransMatrix; // Mesh coordinate transformation matrix



// sampler register 绊沥
sampler VolumeDenSampler:     register(s0);                                // volume data (L16)
sampler GradientSampler:      register(s1);                                // gradient data (rgb : gradient)
sampler PreIntOtfSampler:     register(s2);                                // pre-integrated texture
sampler RenderTargetSampler:  register(s3);  
sampler MinMaxVolumeSampler:  register(s4);                                // volume data (rgb : gradient, a : den)

sampler MeshSampler:	register(s7);

/*
texture tMinMaxVolume;
texture tVolumeDen;
texture tGradient;
texture tPreIntOtf;
texture tRenderTarget;

// ( used in EmptySkipPShader )
sampler3D MinMaxVolumeSampler = sampler_state
{
    Texture = (tMinMaxVolume);

    MinFilter = Point; // Linear;
    MagFilter = Point; // Linear;
    BorderColor = 0x00000000;
    AddressU = Border;
    AddressV = Border;
    AddressW = Border;
};                       

// volume data (L16)
sampler3D VolumeDenSampler = sampler_state
{
    Texture = (tVolumeDen);

    MinFilter = Linear;
    MagFilter = Linear;
    BorderColor = 0x00000000;
    AddressU = Border;
    AddressV = Border;
    AddressW = Border;
};       

// gradient data (rgb : gradient)
sampler3D GradientSampler = sampler_state
{
    Texture = (tGradient);

    MinFilter = Linear;
    MagFilter = Linear;
    BorderColor = 0x00000000;
    AddressU = Border;
    AddressV = Border;
    AddressW = Border;
};              

// pre-integrated texture
sampler2D PreIntOtfSampler = sampler_state
{
    Texture = (tPreIntOtf);

    MinFilter = Linear; // Point;
    MagFilter = Linear;    // Point;
    AddressU = Clamp;
    AddressV = Clamp;
//    BorderColor = 0x00000000;
//    AddressU = Border;
//    AddressV = Border;
};            

// render target (intermediate) texture
sampler2D RenderTargetSampler = sampler_state
{
    Texture = (tRenderTarget);

    MinFilter = Linear;
    MagFilter = Linear;    
    AddressU = Clamp;
    AddressV = Clamp;
};                           
*/

struct VS_OUTPUT0
{
     float4 Pos           : POSITION;          // position 
     float4 FrontSliceTex : TEXCOORD0;        // Front slice Texture Coordinate 
     float4 OutInterTex      : TEXCOORD2;
     float4 ClipTex       : TEXCOORD7;      // clip plane texture coordinate
};

struct VS_OUTPUT1
{
     float4 Pos           : POSITION;          // position 
     float4 FrontSliceTex : TEXCOORD0;        // Front slice Texture Coordinate 
     float4 BackSliceTex  : TEXCOORD1;      // Back slice Texture Coordinate 
     float4 ClipTex       : TEXCOORD7;      // clip plane texture coordinate
};

struct VS_OUTPUT2
{
     float4 Pos           : POSITION;          // position 
     float4 OutInterTex      : TEXCOORD2;
};

struct VS_OUTPUT3
{
	float4 Pos 			: POSITION;
	float3 TextureCoord : TEXCOORD0;
};

struct PS_OUTPUT0
{
    float4 Color : COLOR0;
    float Depth  : DEPTH;
};

struct PS_OUTPUT1
{
    float4 Color : COLOR0;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------- EmptySkipVShader (vs_pass0) -------------------------------------------------------
VS_OUTPUT0 EmptySkipVShader( float4 inPos        : POSITION,
        float4 inFrontTex   : TEXCOORD0     )
{
     VS_OUTPUT0 Out = (VS_OUTPUT0) 0;

     float4 ttt = inPos + sign(isFrontFace)*faceNormal;    // < 0.270632939
//          float4 ttt = inPos + sign(isFrontFace)*0.26800*faceNormal;

     Out.Pos = mul( ttt, objectTransMatrix );              // transform vertices by objectTransMatrix matrix
     Out.FrontSliceTex = inFrontTex;

    // to NDC
    Out.OutInterTex = Out.Pos;        
	
	Out.ClipTex.x = dot( clipPlaneMatrix[0], Out.Pos );              // transform position by clipplane in 'world space'
    Out.ClipTex.y = dot( clipPlaneMatrix[1], Out.Pos );
  //   Out.ClipTex.z = dot( clipPlaneMatrix[2], Out.Pos );

    return Out;
}
//-------------------------------------------------------------------------------------------------------------

//---------------------- VolumeRenderVShader (vs_pass1) -------------------------------------------------------
VS_OUTPUT1 VolumeRenderVShader( float4 inPos        : POSITION,
        float4 inFrontTex   : TEXCOORD0,
        float4 inBackTex    : TEXCOORD1 )
{
     VS_OUTPUT1 Out = (VS_OUTPUT1) 0;

     Out.Pos = mul( inPos, viewProjMatrix );              // transform vertices by view/projection matrix
     Out.FrontSliceTex = mul( inFrontTex, textureTransMatrix );   // transform volume texture coordinate by Texture transformation matrix
     Out.BackSliceTex = mul( inBackTex, textureTransMatrix );     // transform volume texture coordinate by Texture transformation matrix

     Out.ClipTex.x = dot( clipPlaneMatrix[0], inPos );              // transform position by clipplane in 'world space'
     Out.ClipTex.y = dot( clipPlaneMatrix[1], inPos );
  //   Out.ClipTex.z = dot( clipPlaneMatrix[2], inPos );

     return Out;
}
//-------------------------------------------------------------------------------------------------------------

//---------------------- EarlyRayVShader (vs_pass2) -------------------------------------------------------
VS_OUTPUT2 EarlyRayVShader( float4 inPos        : POSITION )
{
     VS_OUTPUT2 Out = (VS_OUTPUT2) 0;

     Out.Pos = mul( inPos, viewProjMatrix );              // transform vertices by view/projection matrix
    // to NDC
    float4 ttt = Out.Pos;             
    // y 绵 谅钎 芭操肺,. and -1 ~ 1 -> 0 ~ 1 裹困肺.. 
    // ttt.x = ttt.x ;
    ttt.y = -ttt.y ;  
    Out.OutInterTex.xy = ((ttt.xy + 1)/2);
    Out.OutInterTex.zw = ttt.zw;             // z (depth) 绰 弊措肺..

     return Out;
}
//-------------------------------------------------------------------------------------------------------------

//---------------------- MeshRenderVShader -------------------------------------------------------
VS_OUTPUT3 MeshRenderVShader( float4 inPos        : POSITION,
		float2 textureCoord   : TEXCOORD0	 )
{
     VS_OUTPUT3 Out = (VS_OUTPUT3) 0;

	 Out.Pos = mul( inPos, meshTransMatrix );			
     Out.TextureCoord.xy = textureCoord.xy;
     return Out;
}

VS_OUTPUT3 MPRRenderVShader( float4 inPos        : POSITION,
		float3 textureCoord   : TEXCOORD0	 )
{
     VS_OUTPUT3 Out = (VS_OUTPUT3) 0;

	 Out.Pos = mul( inPos, objectTransMatrix );			
     Out.TextureCoord = textureCoord;
     return Out;
}
//-------------------------------------------------------------------------------------------------------------

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------- EmptySkipPShader (ps_pass0) ----------------------------------------------------------
PS_OUTPUT0 EmptySkipPShader(   float4 FrontSliceTex : TEXCOORD0,                      // front slice
                  float4 InterTex : TEXCOORD2,                     
             float4 ClipTest      : TEXCOORD7     )                    
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -