From a56bbe6f762aca2ebb8905c090086815093e14cd Mon Sep 17 00:00:00 2001 From: basil Date: Fri, 5 Jun 2026 19:22:48 +0800 Subject: [PATCH] finish build in linux --- .gitignore | 3 +- src/main.cpp | 96 ++++++++++++++++++++++++++-------------------------- 2 files changed, 50 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index 11a7f3f..d402ad4 100644 --- a/.gitignore +++ b/.gitignore @@ -55,4 +55,5 @@ AGENTS.md omc omx -build-win \ No newline at end of file +build-win +build-linux \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 18a9ab1..6dac311 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,9 +43,9 @@ struct CubeTriangle }; static ProjectedVertex ProjectToScreen( - const Math::Vector3& vertex, - const Math::Matrix4x4& mvp, - const Math::Matrix4x4& viewport) + const Math::Vector3 &vertex, + const Math::Matrix4x4 &mvp, + const Math::Matrix4x4 &viewport) { using namespace Math; @@ -66,45 +66,49 @@ static ProjectedVertex ProjectToScreen( } const Vector4 screen = viewport * Vector4(ndcX, ndcY, ndcZ, 1.0f); - return { Math::Vector3(screen.x, screen.y, screen.z), true }; + ProjectedVertex result; + result.screen = Vector3(screen.x, screen.y, screen.z); + result.visible = true; + return result; } -static bool IsFaceVisible(const CubeFace& face, const std::array& viewSpaceVertices) +static bool IsFaceVisible(const CubeFace &face, const std::array &viewSpaceVertices) { using namespace Math; - const Vector3& v0 = viewSpaceVertices[face.vertices[0]]; - const Vector3& v1 = viewSpaceVertices[face.vertices[1]]; - const Vector3& v2 = viewSpaceVertices[face.vertices[2]]; + const Vector3 &v0 = viewSpaceVertices[face.vertices[0]]; + const Vector3 &v1 = viewSpaceVertices[face.vertices[1]]; + const Vector3 &v2 = viewSpaceVertices[face.vertices[2]]; const Vector3 faceNormal = (v1 - v0).cross(v2 - v0); const Vector3 faceCenter = (viewSpaceVertices[face.vertices[0]] + - viewSpaceVertices[face.vertices[1]] + - viewSpaceVertices[face.vertices[2]] + - viewSpaceVertices[face.vertices[3]]) / 4.0f; + viewSpaceVertices[face.vertices[1]] + + viewSpaceVertices[face.vertices[2]] + + viewSpaceVertices[face.vertices[3]]) / + 4.0f; return faceNormal.dot(faceCenter) > 0.0f; } -static bool IsTriangleVisible(const CubeTriangle& triangle, const std::array& viewSpaceVertices) +static bool IsTriangleVisible(const CubeTriangle &triangle, const std::array &viewSpaceVertices) { using namespace Math; - const Vector3& v0 = viewSpaceVertices[triangle.vertices[0]]; - const Vector3& v1 = viewSpaceVertices[triangle.vertices[1]]; - const Vector3& v2 = viewSpaceVertices[triangle.vertices[2]]; + const Vector3 &v0 = viewSpaceVertices[triangle.vertices[0]]; + const Vector3 &v1 = viewSpaceVertices[triangle.vertices[1]]; + const Vector3 &v2 = viewSpaceVertices[triangle.vertices[2]]; const Vector3 faceNormal = (v1 - v0).cross(v2 - v0); const Vector3 faceCenter = (v0 + v1 + v2) / 3.0f; return faceNormal.dot(faceCenter) > 0.0f; } -int main(int argc, char* argv[]) +int main(int argc, char *argv[]) { #ifdef USE_FRAMEBUFFER - Platform::IDisplay* display = new Platform::FBDisplay(); + Platform::IDisplay *display = new Platform::FBDisplay(); #else - Platform::IDisplay* display = new Platform::SDLDisplay(); + Platform::IDisplay *display = new Platform::SDLDisplay(); #endif if (!display->init(width, height)) @@ -113,8 +117,8 @@ int main(int argc, char* argv[]) return -1; } - Core::FrameBuffer* frameBuffer = new Core::FrameBuffer(width, height); - Core::DepthBuffer* depthBuffer = new Core::DepthBuffer(width, height); + Core::FrameBuffer *frameBuffer = new Core::FrameBuffer(width, height); + Core::DepthBuffer *depthBuffer = new Core::DepthBuffer(width, height); Rasterizer::Rasterizer rasterizer(frameBuffer, depthBuffer); Rasterizer::TriangleRasterizer triangleRasterizer(frameBuffer, depthBuffer); @@ -130,25 +134,22 @@ int main(int argc, char* argv[]) Math::Vector3(-0.5f, -0.5f, 0.5f), Math::Vector3(0.5f, -0.5f, 0.5f), Math::Vector3(0.5f, 0.5f, 0.5f), - Math::Vector3(-0.5f, 0.5f, 0.5f) - }; + Math::Vector3(-0.5f, 0.5f, 0.5f)}; const std::array cubeFaces = { - CubeFace{ { 0, 3, 2, 1 } }, - CubeFace{ { 4, 5, 6, 7 } }, - CubeFace{ { 0, 4, 7, 3 } }, - CubeFace{ { 1, 2, 6, 5 } }, - CubeFace{ { 0, 1, 5, 4 } }, - CubeFace{ { 3, 7, 6, 2 } } - }; + CubeFace{{0, 3, 2, 1}}, + CubeFace{{4, 5, 6, 7}}, + CubeFace{{0, 4, 7, 3}}, + CubeFace{{1, 2, 6, 5}}, + CubeFace{{0, 1, 5, 4}}, + CubeFace{{3, 7, 6, 2}}}; const std::array cubeTriangles = { - CubeTriangle{ { 0, 3, 2 } }, CubeTriangle{ { 0, 2, 1 } }, - CubeTriangle{ { 4, 5, 6 } }, CubeTriangle{ { 4, 6, 7 } }, - CubeTriangle{ { 0, 4, 7 } }, CubeTriangle{ { 0, 7, 3 } }, - CubeTriangle{ { 1, 2, 6 } }, CubeTriangle{ { 1, 6, 5 } }, - CubeTriangle{ { 0, 1, 5 } }, CubeTriangle{ { 0, 5, 4 } }, - CubeTriangle{ { 3, 7, 6 } }, CubeTriangle{ { 3, 6, 2 } } - }; + CubeTriangle{{0, 3, 2}}, CubeTriangle{{0, 2, 1}}, + CubeTriangle{{4, 5, 6}}, CubeTriangle{{4, 6, 7}}, + CubeTriangle{{0, 4, 7}}, CubeTriangle{{0, 7, 3}}, + CubeTriangle{{1, 2, 6}}, CubeTriangle{{1, 6, 5}}, + CubeTriangle{{0, 1, 5}}, CubeTriangle{{0, 5, 4}}, + CubeTriangle{{3, 7, 6}}, CubeTriangle{{3, 6, 2}}}; const RenderData::Color clearColor(18, 18, 24, 255); const RenderData::Color cubeColor(240, 240, 240, 255); @@ -188,31 +189,30 @@ int main(int argc, char* argv[]) std::array drawTriangles; size_t drawCommandCount = 0; - for (const CubeTriangle& cubeTriangle : cubeTriangles) + for (const CubeTriangle &cubeTriangle : cubeTriangles) { if (!IsTriangleVisible(cubeTriangle, viewSpaceVertices)) { continue; } - const ProjectedVertex& v0 = projectedVertices[cubeTriangle.vertices[0]]; - const ProjectedVertex& v1 = projectedVertices[cubeTriangle.vertices[1]]; - const ProjectedVertex& v2 = projectedVertices[cubeTriangle.vertices[2]]; + const ProjectedVertex &v0 = projectedVertices[cubeTriangle.vertices[0]]; + const ProjectedVertex &v1 = projectedVertices[cubeTriangle.vertices[1]]; + const ProjectedVertex &v2 = projectedVertices[cubeTriangle.vertices[2]]; if (!v0.visible || !v1.visible || !v2.visible) { continue; } - const Math::Vector3& viewV0 = viewSpaceVertices[cubeTriangle.vertices[0]]; - const Math::Vector3& viewV1 = viewSpaceVertices[cubeTriangle.vertices[1]]; - const Math::Vector3& viewV2 = viewSpaceVertices[cubeTriangle.vertices[2]]; + const Math::Vector3 &viewV0 = viewSpaceVertices[cubeTriangle.vertices[0]]; + const Math::Vector3 &viewV1 = viewSpaceVertices[cubeTriangle.vertices[1]]; + const Math::Vector3 &viewV2 = viewSpaceVertices[cubeTriangle.vertices[2]]; drawTriangles[drawCommandCount++] = RenderData::Triangle( Scene::Vertex(v0.screen), Scene::Vertex(v1.screen), - Scene::Vertex(v2.screen) - ); + Scene::Vertex(v2.screen)); } for (size_t i = 0; i < drawCommandCount; ++i) @@ -227,13 +227,13 @@ int main(int argc, char* argv[]) continue; } - const CubeFace& face = cubeFaces[faceIndex]; + const CubeFace &face = cubeFaces[faceIndex]; for (size_t edgeOffset = 0; edgeOffset < face.vertices.size(); ++edgeOffset) { const int startIndex = face.vertices[edgeOffset]; const int endIndex = face.vertices[(edgeOffset + 1) % face.vertices.size()]; - const ProjectedVertex& start = projectedVertices[startIndex]; - const ProjectedVertex& end = projectedVertices[endIndex]; + const ProjectedVertex &start = projectedVertices[startIndex]; + const ProjectedVertex &end = projectedVertices[endIndex]; if (!start.visible || !end.visible) { continue;