I've come across this stupid problem with my camera and it is driving me nuts ![]()
Maybe someone has an idea of what's going wrong...
This is basically a standard camera I create:
StaticCamera::StaticCamera(CameraDescription desc) : BaseCamera(desc)
{
// Assign values
this->fov = desc.FoV;
this->aspectRatio = desc.Aspect;
this->nearClip = desc.nearClip;
this->farClip = desc.farClip;
this->camPosition = XMFLOAT4(desc.cameraPosition.x, desc.cameraPosition.y, desc.cameraPosition.z, 1.0f);
this->camTarget = XMFLOAT4(desc.cameraTarget.x, desc.cameraTarget.y, desc.cameraTarget.z, 1.0f);
this->camUp = XMFLOAT4(desc.cameraUp.x, desc.cameraUp.y, desc.cameraUp.z, 1.0f);
// Create our perspective projection
this->CreateViewProjection();
}
void StaticCamera::CreateViewProjection()
{
XMVECTOR tempPos = XMLoadFloat4(&this->camPosition);
XMVECTOR tempTarget = XMLoadFloat4(&this->camTarget);
XMVECTOR tempUp = XMLoadFloat4(&this->camUp);
XMMATRIX tempView = XMMatrixLookToLH(tempPos, tempTarget, tempUp);
XMMATRIX tempProj = XMMatrixPerspectiveFovLH(this->fov, this->aspectRatio,
this->nearClip, this->farClip);
XMMATRIX tempViewProjection = XMMatrixMultiply(tempView, tempProj);
// Store results
XMStoreFloat4x4(&this->viewProjection, tempViewProjection);
XMStoreFloat4x4(&this->view, tempView);
XMStoreFloat4x4(&this->projection, tempProj);
}
Here I set the data to my constant buffer:
D3D11_MAPPED_SUBRESOURCE mappedResource; // Lock the constant buffer so it can be written to this->deviceContext->Map(this->cbGBTransformsConstBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); // Get a pointer to the data in the constant buffer. cbGBufferTransforms* pTransformData = (cbGBufferTransforms*)mappedResource.pData; // Set each objects world transform matrix and draw it this->cbGBTransforms.World = this->opaquePrimitives.at(i)->GetTransform(); XMMATRIX transposed = XMLoadFloat4x4(&this->cbGBTransforms.World); XMMATRIX worldViewProj = transposed * this->engine->GetCamera()->GetViewProjectionMatrix(); XMStoreFloat4x4(&pTransformData->WorldViewProjection, XMMatrixTranspose(worldViewProj));
struct VSI
{
float4 Position : POSITION;
float2 UV : TEXCOORD0;
float3 Normal : NORMAL;
float3 BiTangent : BINORMAL;
float3 Tangent : TANGENT;
};
PSI VS(VSI input)
{
PSI output = (PSI)0;
// Transform geometry for 3D projection
output.Position = mul(input.Position, WorldViewProjection);
// Transform to clip space position of previous frame
output.PrevPositionCS = mul(float4(input.Position.xyz, 1.0f), PrevWorldViewProjection);
output.PositionCS = output.Position;
// Modify Tiling factor of textures
output.UV = input.UV * TexCoordModifier;
// Transform Tangent-BiTangent-Normal into world space
output.Tangent = mul(input.Tangent, (float3x3)World);
output.BiTangent = mul(input.BiTangent, (float3x3)World);
output.Normal = mul(input.Normal, (float3x3)World);
return output;
}
Now for some reason my camera is always inverted (upside down and when using camera movement rotation is also wrong/inverted).
Looks like this:
Edited by lipsryme, 12 February 2013 - 05:43 PM.






