summaryrefslogtreecommitdiff
path: root/src/util/mini_math.h
AgeCommit message (Collapse)Author
2026-03-08fix: negate Y in perspective() to correct rasterized 3D orientationskal
The fullscreen post-process VS uses Y-up UVs (uv.y=0 = bottom), so textureSample() Y-flips any rasterized offscreen texture. SDF effects author their content Y-down and look correct after the flip. Rasterized effects (RotatingCube, Hybrid3D) must pre-flip their geometry: - mat4::perspective(): m[5] = -t (negated Y scale) - Pipelines with cullMode=Back: frontFace = WGPUFrontFace_CW (Y-flip reverses winding, so CW becomes the visible face) - Remove incorrect transposes from GlobalUniforms::make(), ObjectData::make(), and Uniforms::make() — mini_math is column-major, no transpose needed for GPU upload - Document the convention in doc/3D.md under "Rasterized 3D and the Y-flip rule" handoff(Gemini): Y-flip rule now documented; all rasterized 3D pipelines must follow it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21feat(math): Add vec3::rotate methods for quaternion and axis-angle rotationskal
Adds two convenient methods to the struct: - : Rotates the vector by a given quaternion. - : Rotates the vector around a given axis by an angle in radians. These functions provide a more intuitive and streamlined syntax for vector rotation, improving code readability and usability.
2026-02-21feat: Add vec3::rotate function for quaternion rotation.skal
2026-02-06fix(math): Normalize axis in quat::from_axis to prevent scaling artifactsskal
Fixed critical bug causing mesh and bounding box stretching during rotation. ROOT CAUSE: quat::from_axis() did not normalize the input axis vector. When called with non-unit vectors (e.g., {0.5, 1.0, 0.0}), it created invalid quaternions that encoded scaling transformations instead of pure rotations. SYMPTOMS: - Mesh vertices stretched during rotation (non-uniform scaling) - Bounding boxes deformed and stretched - Transform matrices became non-orthogonal ISSUE LOCATIONS: - src/tests/test_mesh.cc:309 - axis {0.5, 1.0, 0.0} (length ≈1.118) - src/gpu/effects/flash_cube_effect.cc:79 - axis {0.3, 1, 0.2} (length ≈1.044) FIX: Added automatic normalization in quat::from_axis(): a = a.normalize(); // Ensure axis is unit vector RESULT: - All quaternions now represent pure rotations - No scaling artifacts during rotation - Bounding boxes remain orthogonal - Fixes Task A (test_mesh stretching bug) SAFETY: This change is backward compatible. Code that already passed normalized axes will work identically (normalizing a unit vector = identity). handoff(Claude): Rotation stretching bug fixed. Both shader normal transformation (previous commit) and quaternion creation (this commit) now work correctly. test_mesh should display properly rotated meshes without distortion.
2026-02-02fix(3d): Tighten torus proxy hull and ensure floor grid visibilityskal
- Adjusted Torus proxy hull in vs_main to 1.5x0.5x1.5 for better SDF fit. - Updated VisualDebug::add_box to use per-object local extents. - Standardized floor grid mapping in fs_main using planar p.xz projection. - Verified non-uniform scale and rotation robustness in test_3d_render.
2026-02-02fix(3d): Correct debug box transforms and restore object texturesskal
- Updated VisualDebug to accept mat4 transforms, enabling wireframes to follow rotating objects. - Restored SDF bump mapping and floor grid texture in the fragment shader. - Added vec4::xyz() helper to mini_math.h. - Fixed Renderer3D to pass the full model matrix for debug visualization.
2026-02-02fix(gpu): Resolve high-DPI squished rendering and 3D shadow bugsskal
- Implemented dynamic resolution support in all shaders and effects. - Added explicit viewport setting for all render passes to ensure correct scaling. - Fixed 3D shadow mapping by adding PLANE support and standardizing soft shadow logic. - Propagated resize events through the Effect hierarchy. - Applied project-wide code formatting.
2026-02-02feat(3d): Support non-uniform scale and shadows on rasterized objectsskal
- Implemented full support for non-uniform scaling by calculating and passing the 'model_inverse_transpose' matrix to the shader for correct normal transformation. - Added 'transpose()' and 'inverse()' methods to the 'mat4' class in 'mini_math.h'. - Refactored the shader to use the new matrix for lighting rasterized objects. - Updated the test scene to use a rasterized floor (CUBE) instead of an SDF one, ensuring it receives correct lighting and shadows even with non-uniform scale.
2026-02-01feat: Implement 3D system and procedural texture managerskal
- Extended mini_math.h with mat4 multiplication and affine transforms. - Implemented TextureManager for runtime procedural texture generation and GPU upload. - Added 3D system components: Camera, Object, Scene, and Renderer3D. - Created test_3d_render mini-demo for interactive 3D verification. - Fixed WebGPU validation errors regarding depthSlice and unimplemented WaitAny.
2026-02-01clang-formatskal
2026-01-31style: add vertical compression rules to clang-formatskal
- Enabled AllowShortFunctionsOnASingleLine: All - Enabled AllowShortBlocksOnASingleLine: Always - Enabled AllowShortIfStatementsOnASingleLine: Always - Enabled AllowShortLoopsOnASingleLine: true - Set MaxEmptyLinesToKeep: 1 - Applied formatting to all source files.
2026-01-31Implement procedural audio generation, spectral effects, and WebGPU particle ↵skal
system
2026-01-31enforce code styleskal
2026-01-30add mini_math.h header-only vector libskal