Reverse Y axis (+Y is now up)

This commit is contained in:
Jérôme Leclercq 2021-06-06 15:59:25 +02:00
parent 86097b331b
commit b85cb174ce
6 changed files with 61 additions and 66 deletions

View File

@ -62,7 +62,7 @@ fn main(input: VertIn) -> VertOut
let output: VertOut; let output: VertOut;
output.position = viewerData.projectionMatrix * rotationMat * vec4<f32>(input.position, 1.0); output.position = viewerData.projectionMatrix * rotationMat * vec4<f32>(input.position, 1.0);
output.uvw = vec3<f32>(input.position.xy * -1.0, input.position.z); output.uvw = input.position.xyz;
return output; return output;
} }

View File

@ -84,7 +84,7 @@ int main()
Nz::MeshParams meshParams; Nz::MeshParams meshParams;
meshParams.storage = Nz::DataStorage::Software; meshParams.storage = Nz::DataStorage::Software;
meshParams.center = true; meshParams.center = true;
meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 180.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f)); meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 0.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f));
meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV); meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV);
std::shared_ptr<Nz::RenderDevice> device = Nz::Graphics::Instance()->GetRenderDevice(); std::shared_ptr<Nz::RenderDevice> device = Nz::Graphics::Instance()->GetRenderDevice();
@ -116,7 +116,7 @@ int main()
std::shared_ptr<Nz::Mesh> planeMesh = std::make_shared<Nz::Mesh>(); std::shared_ptr<Nz::Mesh> planeMesh = std::make_shared<Nz::Mesh>();
planeMesh->CreateStatic(); planeMesh->CreateStatic();
planeMesh->BuildSubMesh(Nz::Primitive::Plane(Nz::Vector2f(25.f, 25.f), Nz::Vector2ui(0u), Nz::Matrix4f::Rotate(Nz::EulerAnglesf(180.f, 0.f, 0.f)), Nz::Rectf(0.f, 0.f, 10.f, 10.f)), meshPrimitiveParams); planeMesh->BuildSubMesh(Nz::Primitive::Plane(Nz::Vector2f(25.f, 25.f), Nz::Vector2ui(0u), Nz::Matrix4f::Identity(), Nz::Rectf(0.f, 0.f, 10.f, 10.f)), meshPrimitiveParams);
//planeMesh->BuildSubMesh(Nz::Primitive::Cone(1.f, 1.f, 16, Nz::Matrix4f::Rotate(Nz::EulerAnglesf(90.f, 0.f, 0.f))), planeParams); //planeMesh->BuildSubMesh(Nz::Primitive::Cone(1.f, 1.f, 16, Nz::Matrix4f::Rotate(Nz::EulerAnglesf(90.f, 0.f, 0.f))), planeParams);
planeMesh->SetMaterialCount(1); planeMesh->SetMaterialCount(1);
@ -225,19 +225,18 @@ int main()
Nz::ViewerInstance viewerInstance; Nz::ViewerInstance viewerInstance;
viewerInstance.UpdateTargetSize(Nz::Vector2f(windowSize)); viewerInstance.UpdateTargetSize(Nz::Vector2f(windowSize));
viewerInstance.UpdateProjViewMatrices(Nz::Matrix4f::Perspective(Nz::DegreeAnglef(70.f), float(windowSize.x) / windowSize.y, 0.1f, 1000.f), Nz::Matrix4f::Translate(Nz::Vector3f::Backward() * 1)); viewerInstance.UpdateProjViewMatrices(Nz::Matrix4f::Perspective(Nz::DegreeAnglef(70.f), float(windowSize.x) / windowSize.y, 0.1f, 1000.f), Nz::Matrix4f::Translate(Nz::Vector3f::Up() * 1));
Nz::ModelInstance modelInstance1(spaceshipMat->GetSettings()); Nz::ModelInstance modelInstance1(spaceshipMat->GetSettings());
spaceshipMat->UpdateShaderBinding(modelInstance1.GetShaderBinding()); spaceshipMat->UpdateShaderBinding(modelInstance1.GetShaderBinding());
modelInstance1.UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Forward() * 2 + Nz::Vector3f::Right())); modelInstance1.UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Left() + Nz::Vector3f::Up()));
Nz::ModelInstance modelInstance2(spaceshipMat->GetSettings()); Nz::ModelInstance modelInstance2(spaceshipMat->GetSettings());
spaceshipMat->UpdateShaderBinding(modelInstance2.GetShaderBinding()); spaceshipMat->UpdateShaderBinding(modelInstance2.GetShaderBinding());
modelInstance2.UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Forward() * 2 + Nz::Vector3f::Right() * 3.f)); modelInstance2.UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Right() + Nz::Vector3f::Up()));
Nz::ModelInstance planeInstance(planeMat->GetSettings()); Nz::ModelInstance planeInstance(planeMat->GetSettings());
planeMat->UpdateShaderBinding(planeInstance.GetShaderBinding()); planeMat->UpdateShaderBinding(planeInstance.GetShaderBinding());
planeInstance.UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Up() * 2.f));
std::shared_ptr<Nz::AbstractBuffer> viewerDataUBO = Nz::Graphics::Instance()->GetViewerDataUBO(); std::shared_ptr<Nz::AbstractBuffer> viewerDataUBO = Nz::Graphics::Instance()->GetViewerDataUBO();
@ -325,10 +324,10 @@ int main()
std::random_device rng; std::random_device rng;
std::mt19937 randomEngine(rng()); std::mt19937 randomEngine(rng());
std::uniform_int_distribution<unsigned int> colorDis(0, 255); std::uniform_int_distribution<unsigned int> colorDis(0, 255);
std::uniform_real_distribution<float> heightDis(1.5f, 1.95f); std::uniform_real_distribution<float> heightDis(0.15f, 1.f);
std::uniform_real_distribution<float> posDis(-10.f, 10.f); std::uniform_real_distribution<float> posDis(-10.f, 10.f);
std::uniform_real_distribution<float> dirDis(-1.f, 1.f); std::uniform_real_distribution<float> dirDis(-1.f, 1.f);
std::uniform_real_distribution<float> dirYDis(0.0f, 0.33f); std::uniform_real_distribution<float> dirYDis(-0.33f, 0.f);
std::uniform_real_distribution<float> radiusDis(1.f, 5.f); std::uniform_real_distribution<float> radiusDis(1.f, 5.f);
for (std::size_t i = 0; i < 1000; ++i) for (std::size_t i = 0; i < 1000; ++i)
@ -946,9 +945,9 @@ int main()
RebuildCommandBuffer(); RebuildCommandBuffer();
Nz::Vector3f viewerPos = Nz::Vector3f::Backward() * 10.f + Nz::Vector3f::Up() * -3.f; Nz::Vector3f viewerPos = Nz::Vector3f::Backward() * 10.f + Nz::Vector3f::Up() * 3.f;
Nz::EulerAnglesf camAngles(30.f, 0.f, 0.f); Nz::EulerAnglesf camAngles(-30.f, 0.f, 0.f);
Nz::Quaternionf camQuat(camAngles); Nz::Quaternionf camQuat(camAngles);
window.EnableEventPolling(true); window.EnableEventPolling(true);
@ -1009,7 +1008,7 @@ int main()
camAngles.yaw.Normalize(); camAngles.yaw.Normalize();
// Idem, mais pour éviter les problèmes de calcul de la matrice de vue, on restreint les angles // Idem, mais pour éviter les problèmes de calcul de la matrice de vue, on restreint les angles
camAngles.pitch = Nz::Clamp(camAngles.pitch + event.mouseMove.deltaY*sensitivity, -89.f, 89.f); camAngles.pitch = Nz::Clamp(camAngles.pitch - event.mouseMove.deltaY*sensitivity, -89.f, 89.f);
camQuat = camAngles; camQuat = camAngles;
break; break;
@ -1040,7 +1039,7 @@ int main()
case Nz::WindowEventType::Resized: case Nz::WindowEventType::Resized:
{ {
Nz::Vector2ui windowSize = window.GetSize(); Nz::Vector2ui windowSize = window.GetSize();
viewerInstance.UpdateProjViewMatrices(Nz::Matrix4f::Perspective(Nz::DegreeAnglef(70.f), float(windowSize.x) / windowSize.y, 0.1f, 1000.f), Nz::Matrix4f::Translate(Nz::Vector3f::Backward() * 1)); viewerInstance.UpdateProjectionMatrix(Nz::Matrix4f::Perspective(Nz::DegreeAnglef(70.f), float(windowSize.x) / windowSize.y, 0.1f, 1000.f));
break; break;
} }
@ -1087,8 +1086,6 @@ int main()
if (frame.IsFramebufferInvalidated()) if (frame.IsFramebufferInvalidated())
RebuildCommandBuffer(); RebuildCommandBuffer();
if (lightAnimation || lightUpdate)
{
Nz::UploadPool& uploadPool = frame.GetUploadPool(); Nz::UploadPool& uploadPool = frame.GetUploadPool();
frame.Execute([&](Nz::CommandBufferBuilder& builder) frame.Execute([&](Nz::CommandBufferBuilder& builder)
@ -1139,7 +1136,6 @@ int main()
} }
builder.EndDebugRegion(); builder.EndDebugRegion();
}, Nz::QueueType::Transfer); }, Nz::QueueType::Transfer);
}
bakedGraph.Execute(frame); bakedGraph.Execute(frame);
frame.SubmitCommandBuffer(drawCommandBuffer.get(), Nz::QueueType::Graphics); frame.SubmitCommandBuffer(drawCommandBuffer.get(), Nz::QueueType::Graphics);

View File

@ -28,13 +28,13 @@ int main()
Nz::MeshParams meshParams; Nz::MeshParams meshParams;
meshParams.storage = Nz::DataStorage::Software; meshParams.storage = Nz::DataStorage::Software;
meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 180.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f)); meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 0.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f));
meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV); meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV);
std::shared_ptr<Nz::RenderDevice> device = Nz::Graphics::Instance()->GetRenderDevice(); std::shared_ptr<Nz::RenderDevice> device = Nz::Graphics::Instance()->GetRenderDevice();
std::string windowTitle = "Graphics Test"; std::string windowTitle = "Graphics Test";
if (!window.Create(device, Nz::VideoMode(800, 600, 32), windowTitle)) if (!window.Create(device, Nz::VideoMode(1920, 1080, 32), windowTitle))
{ {
std::cout << "Failed to create Window" << std::endl; std::cout << "Failed to create Window" << std::endl;
return __LINE__; return __LINE__;
@ -190,7 +190,7 @@ int main()
camAngles.yaw.Normalize(); camAngles.yaw.Normalize();
// Idem, mais pour éviter les problèmes de calcul de la matrice de vue, on restreint les angles // Idem, mais pour éviter les problèmes de calcul de la matrice de vue, on restreint les angles
camAngles.pitch = Nz::Clamp(camAngles.pitch + event.mouseMove.deltaY*sensitivity, -89.f, 89.f); camAngles.pitch = Nz::Clamp(camAngles.pitch - event.mouseMove.deltaY*sensitivity, -89.f, 89.f);
camQuat = camAngles; camQuat = camAngles;

View File

@ -87,7 +87,7 @@ int main()
Nz::RenderWindow window; Nz::RenderWindow window;
Nz::MeshParams meshParams; Nz::MeshParams meshParams;
meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 180.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f)); meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 0.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f));
meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV); meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV);
std::shared_ptr<Nz::RenderDevice> device = Nz::Renderer::Instance()->InstanciateRenderDevice(0); std::shared_ptr<Nz::RenderDevice> device = Nz::Renderer::Instance()->InstanciateRenderDevice(0);
@ -295,7 +295,7 @@ int main()
camAngles.yaw.Normalize(); camAngles.yaw.Normalize();
// Idem, mais pour éviter les problèmes de calcul de la matrice de vue, on restreint les angles // Idem, mais pour éviter les problèmes de calcul de la matrice de vue, on restreint les angles
camAngles.pitch = Nz::Clamp(camAngles.pitch + event.mouseMove.deltaY*sensitivity, -89.f, 89.f); camAngles.pitch = Nz::Clamp(camAngles.pitch - event.mouseMove.deltaY*sensitivity, -89.f, 89.f);
camQuat = camAngles; camQuat = camAngles;

View File

@ -914,15 +914,14 @@ namespace Nz
template<typename T> template<typename T>
Matrix4<T>& Matrix4<T>::MakePerspective(RadianAngle<T> angle, T ratio, T zNear, T zFar) Matrix4<T>& Matrix4<T>::MakePerspective(RadianAngle<T> angle, T ratio, T zNear, T zFar)
{ {
// https://docs.microsoft.com/fr-fr/windows/win32/direct3d10/d3d10-d3dxmatrixperspectivefovrh angle /= T(2.0);
angle = RadianAngle<T>(HalfPi<T>) - angle / T(2.0);
T yScale = angle.GetTan(); T yScale = angle.GetTan();
Set(yScale / ratio, T(0.0), T(0.0), T(0.0), Set(T(1.0) / (ratio * yScale), T(0.0), T(0.0), T(0.0),
T(0.0), yScale, T(0.0), T(0.0), T(0.0), T(-1.0) / (yScale), T(0.0), T(0.0),
T(0.0), T(0.0), zFar / (zNear - zFar), T(-1.0), T(0.0), T(0.0), zFar / (zNear - zFar), T(-1.0),
T(0.0), T(0.0), zNear * zFar / (zNear - zFar), T(0.0)); T(0.0), T(0.0), -(zNear * zFar) / (zFar - zNear), T(0.0));
return *this; return *this;
} }

View File

@ -21,7 +21,7 @@ namespace Nz
{ {
FaceFilling faceFilling = FaceFilling::Fill; FaceFilling faceFilling = FaceFilling::Fill;
FaceSide cullingSide = FaceSide::Back; FaceSide cullingSide = FaceSide::Back;
FrontFace frontFace = FrontFace::Clockwise; FrontFace frontFace = FrontFace::CounterClockwise;
RendererComparison depthCompare = RendererComparison::Less; RendererComparison depthCompare = RendererComparison::Less;
PrimitiveMode primitiveMode = PrimitiveMode::TriangleList; PrimitiveMode primitiveMode = PrimitiveMode::TriangleList;