summaryrefslogtreecommitdiff
path: root/src/3d
diff options
context:
space:
mode:
Diffstat (limited to 'src/3d')
-rw-r--r--src/3d/object.h8
-rw-r--r--src/3d/renderer.cc8
-rw-r--r--src/3d/renderer_mesh.cc2
-rw-r--r--src/3d/visual_debug.cc2
-rw-r--r--src/3d/visual_debug.h1
5 files changed, 14 insertions, 7 deletions
diff --git a/src/3d/object.h b/src/3d/object.h
index a7ce0b8..c2d9ba1 100644
--- a/src/3d/object.h
+++ b/src/3d/object.h
@@ -5,7 +5,7 @@
#pragma once
#include "util/mini_math.h"
-#include "util/asset_manager.h"
+#include "util/asset_manager_dcl.h"
enum class ObjectType {
CUBE,
@@ -40,12 +40,14 @@ class Object3D {
bool is_static;
AssetId mesh_asset_id;
+ vec3 local_extent; // Half-extents for AABB (used by meshes for shadows)
void* user_data; // For tool-specific data, not for general use
Object3D(ObjectType t = ObjectType::CUBE)
: position(0, 0, 0), rotation(0, 0, 0, 1), scale(1, 1, 1), type(t),
color(1, 1, 1, 1), velocity(0, 0, 0), mass(1.0f), restitution(0.5f),
- is_static(false), mesh_asset_id((AssetId)0), user_data(nullptr) {
+ is_static(false), mesh_asset_id((AssetId)0), local_extent(1, 1, 1),
+ user_data(nullptr) {
}
mat4 get_model_matrix() const {
@@ -61,6 +63,8 @@ class Object3D {
BoundingVolume get_local_bounds() const {
if (type == ObjectType::TORUS)
return {{-1.5f, -0.5f, -1.5f}, {1.5f, 0.5f, 1.5f}};
+ if (type == ObjectType::MESH)
+ return {-local_extent, local_extent};
// Simple defaults for unit primitives
return {{-1, -1, -1}, {1, 1, 1}};
}
diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc
index 513b6f6..eea3ff0 100644
--- a/src/3d/renderer.cc
+++ b/src/3d/renderer.cc
@@ -174,7 +174,7 @@ void Renderer3D::update_uniforms(const Scene& scene, const Camera& camera,
type_id = 4.0f;
else if (obj.type == ObjectType::MESH)
type_id = 5.0f;
- data.params = vec4(type_id, 0, 0, 0);
+ data.params = vec4(type_id, obj.local_extent.x, obj.local_extent.y, obj.local_extent.z);
obj_data.push_back(data);
if (obj_data.size() >= kMaxObjects)
break;
@@ -285,7 +285,7 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene,
for (uint32_t i = 0; i < instance_count; ++i) {
const auto& obj = scene.objects[i];
if (obj.type == ObjectType::MESH) {
- const MeshGpuData* mesh = get_or_create_mesh(obj.mesh_asset_id);
+ const MeshGpuData* mesh = temp_mesh_override_ ? temp_mesh_override_ : get_or_create_mesh(obj.mesh_asset_id);
if (mesh) {
wgpuRenderPassEncoderSetVertexBuffer(pass, 0, mesh->vertex_buffer, 0,
WGPU_WHOLE_SIZE);
@@ -303,9 +303,11 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene,
#if !defined(STRIP_ALL)
if (s_debug_enabled_) {
for (const auto& obj : scene.objects) {
- vec3 extent(1.0f, 1.0f, 1.0f);
+ vec3 extent = obj.local_extent;
if (obj.type == ObjectType::TORUS) {
extent = vec3(1.5f, 0.5f, 1.5f);
+ } else if (obj.type != ObjectType::MESH) {
+ extent = vec3(1.0f, 1.0f, 1.0f);
}
visual_debug_.add_box(obj.get_model_matrix(), extent,
vec3(1.0f, 1.0f, 0.0f)); // Yellow boxes
diff --git a/src/3d/renderer_mesh.cc b/src/3d/renderer_mesh.cc
index 97b91d3..0a098ef 100644
--- a/src/3d/renderer_mesh.cc
+++ b/src/3d/renderer_mesh.cc
@@ -4,7 +4,7 @@
#include "3d/renderer.h"
#include "generated/assets.h"
#include "gpu/effects/shader_composer.h"
-#include "util/asset_manager.h"
+#include "util/asset_manager_utils.h"
#include <cstring>
#include <vector>
diff --git a/src/3d/visual_debug.cc b/src/3d/visual_debug.cc
index 009a1e1..9667d87 100644
--- a/src/3d/visual_debug.cc
+++ b/src/3d/visual_debug.cc
@@ -6,7 +6,7 @@
#if !defined(STRIP_ALL)
#include "generated/assets.h"
-#include "util/asset_manager.h"
+#include "util/asset_manager_utils.h"
#include <cstdio>
#include <cstring>
diff --git a/src/3d/visual_debug.h b/src/3d/visual_debug.h
index ebccf45..505a799 100644
--- a/src/3d/visual_debug.h
+++ b/src/3d/visual_debug.h
@@ -8,6 +8,7 @@
#include "gpu/gpu.h"
#include "util/mini_math.h"
+#include "util/asset_manager_utils.h"
#include "3d/object.h"
#include <vector>