fixed camera viewport bug and implemented basic flow of rays

This commit is contained in:
Benjamin Kyd
2023-10-16 14:30:39 +01:00
parent 8db675acf6
commit dc946e77f2
8 changed files with 249 additions and 215 deletions

View File

@@ -1,5 +1,7 @@
#include <scene/camera.hpp>
#include <graphics.hpp>
namespace inferno::graphics {
Camera* camera_create()
@@ -35,6 +37,54 @@ void camera_cleanup(Camera* camera)
delete camera;
}
void camera_draw_ui(Camera* camera)
{
ImGui::PushItemWidth(100);
ImGui::Text("Camera Position X,Y,Z");
bool positionUpdated = false;
ImGui::DragFloat("X", &camera->Position.x, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
ImGui::SameLine();
if (ImGui::IsItemEdited())
positionUpdated = true;
ImGui::DragFloat("Y", &camera->Position.y, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
ImGui::SameLine();
if (ImGui::IsItemEdited())
positionUpdated = true;
ImGui::DragFloat("Z", &camera->Position.z, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
if (ImGui::IsItemEdited())
positionUpdated = true;
if (positionUpdated)
graphics::camera_set_position(camera, graphics::camera_get_position(camera));
bool viewUpdated = false;
ImGui::Text("Camera Look Yaw, Pitch, Roll");
ImGui::DragFloat("Yaw", &camera->Yaw, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
ImGui::SameLine();
if (ImGui::IsItemEdited())
viewUpdated = true;
ImGui::DragFloat("Pitch", &camera->Pitch, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
ImGui::SameLine();
if (ImGui::IsItemEdited())
viewUpdated = true;
ImGui::DragFloat("Roll", &camera->Roll, 0.01f, -FLT_MAX, FLT_MAX, "%.2f", ImGuiSliderFlags_None);
if (ImGui::IsItemEdited())
viewUpdated = true;
ImGui::PopItemWidth();
ImGui::PushItemWidth(300);
ImGui::Text("Camera Zoom");
ImGui::DragFloat("Zoom", &camera->FOV, -0.1f, 0.01f, 180.0f, "%.2f", ImGuiSliderFlags_None);
ImGui::SameLine();
if (ImGui::IsItemEdited())
viewUpdated = true;
if (viewUpdated)
graphics::camera_update(camera);
ImGui::PopItemWidth();
}
void camera_update(Camera* camera)
{
glm::mat4 matRoll = glm::mat4(1.0f);
@@ -100,7 +150,7 @@ glm::mat4 camera_get_look(Camera* camera)
return camera->LookMatrix;
}
void raster_set_viewport(Camera* camera, glm::ivec2 viewport)
void camera_raster_set_viewport(Camera* camera, glm::ivec2 viewport)
{
std::lock_guard<std::mutex> lock(camera->_impl->CamMutex);
camera->Views.Raster = viewport;
@@ -111,19 +161,19 @@ void raster_set_viewport(Camera* camera, glm::ivec2 viewport)
1000.0f);
}
glm::ivec2 raster_get_viewport(Camera* camera)
glm::ivec2 camera_raster_get_viewport(Camera* camera)
{
std::lock_guard<std::mutex> lock(camera->_impl->CamMutex);
return camera->Views.Raster;
}
void ray_set_viewport(Camera* camera, glm::ivec2 viewport)
void camera_ray_set_viewport(Camera* camera, glm::ivec2 viewport)
{
std::lock_guard<std::mutex> lock(camera->_impl->CamMutex);
camera->Views.Ray = viewport;
}
glm::ivec2 ray_get_viewport(Camera* camera)
glm::ivec2 camera_ray_get_viewport(Camera* camera)
{
std::lock_guard<std::mutex> lock(camera->_impl->CamMutex);
return camera->Views.Ray;