Camera view rescaling

This commit is contained in:
JackCarterSmith 2024-10-10 20:10:13 +02:00
parent c5dc8f9987
commit 8b41f0f241
Signed by: JackCarterSmith
GPG Key ID: 832E52F4E23F8F24

View File

@ -6,7 +6,7 @@
// Rendering pipeline: // Rendering pipeline:
// model matrix (Object SRT) -> view matrix (camera matrix inverted) -> proj matrix -> clipping -> perspective divide -> viewport transformation -> Rasterizer (draw pixels inside projected triangles on 2D screen) // model matrix (Object SRT) -> view matrix (camera matrix inverted) -> proj matrix -> clipping -> perspective divide -> viewport transformation -> Rasterizer (draw pixels inside projected triangles on 2D screen)
// object coordinate -> world coordinate -> camera coordinate -> clip/screen coordinate // object space -> world space -> camera space -> homogeneous clip space -> NDC space -> raster space
// //
// Rasterizer inputs elements: // Rasterizer inputs elements:
// - texture-buffer (2D array of pixels color value) // - texture-buffer (2D array of pixels color value)
@ -16,11 +16,14 @@
// Refs: // Refs:
// * https://en.wikipedia.org/wiki/3D_projection // * https://en.wikipedia.org/wiki/3D_projection
// * https://www.scratchapixel.com/lessons/3d-basic-rendering/rasterization-practical-implementation/overview-rasterization-algorithm.html // * https://www.scratchapixel.com/lessons/3d-basic-rendering/rasterization-practical-implementation/overview-rasterization-algorithm.html
// * https://ktstephano.github.io/rendering/stratusgfx/aabbs
// * https://en.wikipedia.org/wiki/Clipping_(computer_graphics)
// * https://www.coranac.com/tonc/text/mode7.htm
Graphic3DRenderer::Graphic3DRenderer() { Graphic3DRenderer::Graphic3DRenderer() {
if (mMainCamera == nullptr) { if (mMainCamera == nullptr) {
mMainCamera = std::make_unique<Camera>(); mMainCamera = std::make_unique<Camera>();
mMainCamera->SetPosition(0.0f, 3.0f, -20.0f); mMainCamera->SetPosition(0.0f, 1.5f, -8.0f);
mMainCamera->SetFrustrum(90.0f, 1280.f/324.f, 1.0f, 100.f); mMainCamera->SetFrustrum(90.0f, 1280.f/324.f, 1.0f, 100.f);
mMainCamera->UpdateCamView(); mMainCamera->UpdateCamView();
} }
@ -28,17 +31,17 @@ Graphic3DRenderer::Graphic3DRenderer() {
// Fill world object list to render // Fill world object list to render
mRenderList.clear(); mRenderList.clear();
mRenderList.push_back(std::make_shared<ObjectDbgCube>()); mRenderList.push_back(std::make_shared<ObjectDbgCube>());
mRenderList.back()->SetPosition(0.f, 0.f, 50.f); mRenderList.back()->SetPosition(0.f, 0.f, 15.f);
mRenderList.back()->SetScale(10.0f); mRenderList.back()->SetScale(2.0f);
mRenderList.push_back(std::make_shared<ObjectDbgCube>()); mRenderList.push_back(std::make_shared<ObjectDbgCube>());
mRenderList.back()->SetPosition(24.f, 5.f, 12.f); mRenderList.back()->SetPosition(6.f, 2.f, 2.f);
mRenderList.back()->SetScale(10.0f); mRenderList.back()->SetScale(2.0f);
mRenderList.push_back(std::make_shared<ObjectDbgCube>()); mRenderList.push_back(std::make_shared<ObjectDbgCube>());
mRenderList.back()->SetPosition(-31.f, 16.f, 24.f); mRenderList.back()->SetPosition(-8.f, 5.f, 10.f);
mRenderList.back()->SetScale(10.0f); mRenderList.back()->SetScale(2.0f);
mRenderList.push_back(std::make_shared<Tank>()); mRenderList.push_back(std::make_shared<Tank>());
mRenderList.back()->SetPosition(0.f, 0.f, 0.f); mRenderList.back()->SetPosition(0.f, 0.f, 0.f);
mRenderList.back()->SetScale(25.0f); mRenderList.back()->SetScale(5.0f);
} }
Graphic3DRenderer::~Graphic3DRenderer() {} Graphic3DRenderer::~Graphic3DRenderer() {}