Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Run Tests

on:
pull_request:
branches: [ "main" ]

jobs:
tests:
runs-on: ubuntu-latest
steps:

- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive

- name: SDL Deps
run: |
sudo apt-get install libgl1-mesa-dev build-essential git make \
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev \
libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev

- name: Configure CMake
# Configure CMake in a 'build' subdirectory.
run: cmake --preset debug

- name: Build
# Build your program with the given configuration
run: cmake --build --preset tests-debug

- name: Test
working-directory: ${{github.workspace}}/build/debug
# Execute tests
run: ./tests
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ native
Debug
Release

ccache
.cache
# .zed
38 changes: 0 additions & 38 deletions events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,44 +13,6 @@

using namespace mym;

Vec2 getPointerClickInClipSpace(const int mouse_x, const int mouse_y, const int canvas_width, const int canvas_height) {
// Convert from window coordinates to normalized device coordinates (clip space)
const float x = static_cast<float>(mouse_x) / static_cast<float>(canvas_width) * 2.0f - 1.0f;
const float y = static_cast<float>(mouse_y) / static_cast<float>(canvas_height) * -2.0f + 1.0f;
return { x, y };
}

Ray getWorldRayFromClipSpaceAndCamera(
Vec2 clipSpacePoint,
Camera camera) {

float x = clipSpacePoint.x;
float y = clipSpacePoint.y;

Vec3 nearPoint = {x, y, -1.f};
Vec3 farPoint = {x, y, 1};

const Mat4 viewMatrix = inverse(camera.transform);
const Mat4 projectionMatrix = getProjectionMatrix(camera);
const Mat4 viewProjInverse = inverse(multiplied(projectionMatrix, viewMatrix));

const Vec3 worldNear = positionMultiplied(nearPoint, viewProjInverse);
const Vec3 worldFar = positionMultiplied(farPoint, viewProjInverse);

auto rayOrigin = worldNear;

const Vec3 rayDirection = subtractVectors(worldFar, worldNear);

auto rayDirNorm = normalize(rayDirection);

Ray worldRay = {
.origin = rayOrigin,
.direction = rayDirNorm
};

return worldRay;
}

void processEvents(WindowState& window, Camera& camera, InputState& input, Scene& scene)
{
ZoneScoped;
Expand Down
10 changes: 10 additions & 0 deletions lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,18 @@ project(NativeRendererLib)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# find_package(OpenGL REQUIRED)
set(SDL_ALSA OFF)
set(SDL_ALSA_SHARED OFF)
set(SDL_RENDER_GPU OFF)
set(SDL_VULKAN OFF)
add_subdirectory(../third_party/SDL SDL3)

set(ASSIMP_BUILD_TESTS OFF)
set(ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT OFF)
set(ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT OFF)
set(ASSIMP_BUILD_GLTF_IMPORTER ON)
add_subdirectory(../third_party/assimp assimp)

add_subdirectory(../mym mym)

# lib (include is for templates)
Expand Down
4 changes: 4 additions & 0 deletions lib/include/raycast.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,8 @@ void sortBySceneDepth(
Camera camera
);

Vec2 getPointerClickInClipSpace(const int mouse_x, const int mouse_y, const int canvas_width, const int canvas_height);

Ray getWorldRayFromClipSpaceAndCamera(Vec2 clipSpacePoint, Camera camera);

#endif
37 changes: 37 additions & 0 deletions lib/raycast.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,43 @@
#include <algorithm>
#include "mystl.hpp"

Vec2 getPointerClickInClipSpace(const int mouse_x, const int mouse_y, const int canvas_width, const int canvas_height) {
// Convert from window coordinates to normalized device coordinates (clip space)
const float x = static_cast<float>(mouse_x) / static_cast<float>(canvas_width) * 2.0f - 1.0f;
const float y = static_cast<float>(mouse_y) / static_cast<float>(canvas_height) * -2.0f + 1.0f;
return { x, y };
}

Ray getWorldRayFromClipSpaceAndCamera(
Vec2 clipSpacePoint,
Camera camera) {

float x = clipSpacePoint.x;
float y = clipSpacePoint.y;

Vec3 nearPoint = {x, y, -1.f};
Vec3 farPoint = {x, y, 1};

const Mat4 viewMatrix = inverse(camera.transform);
const Mat4 projectionMatrix = getProjectionMatrix(camera);
const Mat4 viewProjInverse = inverse(multiplied(projectionMatrix, viewMatrix));

const Vec3 worldNear = positionMultiplied(nearPoint, viewProjInverse);
const Vec3 worldFar = positionMultiplied(farPoint, viewProjInverse);

auto rayOrigin = worldNear;

const Vec3 rayDirection = subtractVectors(worldFar, worldNear);

auto rayDirNorm = normalize(rayDirection);

Ray worldRay = {
.origin = rayOrigin,
.direction = rayDirNorm
};

return worldRay;
}

Vec3Result rayIntersectsTriangle(Ray ray, Triangle triangle) {

Expand Down
3 changes: 0 additions & 3 deletions lib/scene.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
#include "scene.h"
#include "mat4.h"
#include "camera.h"



size_t sceneNodeCounter = 0;

Expand Down