📄 mv_render.fx.bak
字号:
//-------- 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 + -