Hi, Im having some problem with moving out my Position Clip space calculation out of the shader and in to cpu space. That is creating a WorldViewProjection matrix and use that in the shaders.
The following shader code works fine
PS Shader.
struct PS_INPUT
{
float4 PositionSS : SV_POSITION;
float2 TexCoord : TEXCOORD0;
};
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
PSOutput main(in PS_INPUT input)
{
PSOutput output;
if (isTextured)
output.Color = txDiffuse.Sample(samLinear, input.TexCoord);
else
output.Color = diffuse;
return output;
}
cbuffer VSConstants : register(cb0 )
{
matrix World;
matrix View;
matrix Projection;
matrix WordViewProjection;
}
//--------------------------------------------------------------------------------------
struct VS_INPUT
{
float3 Position : POSITION;
float2 TexCoord : TEXCOORD0;
float3 Normal : NORMAL;
};
struct VS_OUTPUT
{
float4 PositionCS : SV_POSITION;
float2 TexCoord : TEXCOORD0;
};
//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
VS_OUTPUT main(in VS_INPUT input)
{
VS_OUTPUT output = (VS_OUTPUT)0;
float4 position = float4(input.Position, 1.0f);
output.PositionCS = mul(position, World);
output.PositionCS = mul(output.PositionCS, View);
output.PositionCS = mul(output.PositionCS, Projection);
output.TexCoord = input.TexCoord;
return output;
}
But I want to replace
output.PositionCS = mul(output.PositionCS, View);
output.PositionCS = mul(output.PositionCS, Projection);
with
output.PositionCS = mul(position, WordViewProjection);
and my calculations for ConstantBuffer is
VSC_WORLD PipelineManagerDX11::CalculateModelSpace(const IRenderable3D &renderble)
{
XMMATRIX model_matrix = renderble.World.GetTransformationMatrix();
VSC_WORLD vsS;
vsS.mWorld = XMMatrixTranspose(model_matrix);
vsS.mView = XMMatrixTranspose(this->m_View);
vsS.mProjection = XMMatrixTranspose(this->m_Projection);
XMMATRIX WorldView = model_matrix*this->m_View;
XMMATRIX ViewProjection = this->m_View*this->m_Projection;
vsS.mWordViewProjection = XMMatrixTranspose(WorldView*ViewProjection);;
return vsS;
}
Im not sure what I'm doing wrong here. But its not working, my output is completely black so something is going badly wrong with the PositionCS Calc. Im pretty sure I'm missing something basic, not sure what though.
All the help is much appreciated.