Hi there,
I am very new to rendering, and i have a problem displaying a quad on the top left corner of my screen.
The issue is that the quad shows, but way off the -x axis and up the y axis. So i actually have to move my camera down the -z axis and tilt it to the left to see the quad.
Camera position and aiming when starting :
After going way back and turning a on the left
I just want it to stick in front of my camera in the top left corner of my screen.
My guts tell me there is something wrong with my view matrix, or at least, it is not setup the way the rastertek tutorial expected it, but i can't find exactly what it is.
Vertex Shader
cbuffer PerFrameBuffer
{
float4x4 gWorldViewProj;
};
PixelInputType VS(VertexInputType input)
{
PixelInputType output;
// Change the position vector to be 4 units for proper matrix calculations.
input.position.w = 1.0f;
// Calculate the position of the vertex against the world, view, and projection matrices.
output.position = mul(float4(input.position.xyz, 1.0f), gWorldViewProj);
// Store the texture coordinates for the pixel shader.
output.tex = input.tex;
return output;
}
Quad code sending the matrix
XMMATRIX worldViewProj = world * camera->View() * camera->Proj();
mTextureEffect->mfxWorldViewProj->SetMatrix(reinterpret_cast<float*>(&(worldViewProj)));
XMMATRIX Camera::View()const
{
return XMLoadFloat4x4(&mView);
}
void Camera::UpdateViewMatrix()
{
XMVECTOR R = XMLoadFloat3(&mRight);
XMVECTOR U = XMLoadFloat3(&mUp);
XMVECTOR L = XMLoadFloat3(&mLook);
XMVECTOR P = XMLoadFloat3(&mPosition);
// Keep camera's axes orthogonal to each other and of unit length.
L = XMVector3Normalize(L);
U = XMVector3Normalize(XMVector3Cross(L, R));
// U, L already ortho-normal, so no need to normalize cross product.
R = XMVector3Cross(U, L);
// Fill in the view matrix entries.
float x = -XMVectorGetX(XMVector3Dot(P, R));
float y = -XMVectorGetX(XMVector3Dot(P, U));
float z = -XMVectorGetX(XMVector3Dot(P, L));
XMStoreFloat3(&mRight, R);
XMStoreFloat3(&mUp, U);
XMStoreFloat3(&mLook, L);
mView(0,0) = mRight.x;
mView(1,0) = mRight.y;
mView(2,0) = mRight.z;
mView(3,0) = x;
mView(0,1) = mUp.x;
mView(1,1) = mUp.y;
mView(2,1) = mUp.z;
mView(3,1) = y;
mView(0,2) = mLook.x;
mView(1,2) = mLook.y;
mView(2,2) = mLook.z;
mView(3,2) = z;
mView(0,3) = 0.0f;
mView(1,3) = 0.0f;
mView(2,3) = 0.0f;
mView(3,3) = 1.0f;
}
The shader output vertices with very big negative values, when my camera is almost centered at the world origin, so there is no way it can see those.
So i am a bit confused about how i am supposed to use the view transformation (if the problem indeed lies there) so i can always see my quad no matter where i look.
Any help or suggestion would be greatly appreciated :-)
Thanks !