簡體   English   中英

如何在 Raylib 中制作具有厚度的 3D 三角形

[英]How to make 3D triangle with thickness in Raylib

我可以在 Raylib 中制作一個 3D 三角形,但現在我希望那個三角形有厚度。

Raylib 如何做到這一點?

這是 C# 中的代碼,它只顯示一個沒有厚度的三角形:

using System;
using Raylib_cs;
using System.Numerics;

namespace Triangle
{

    class Program
    {

        static void Main(string[] args)
        {



            Raylib.InitWindow(800, 480, "Hello World");
            Camera3D camera;
            camera.position = new Vector3(10.0f, 10.0f, 10.0f); // Camera3D position
            camera.target = new Vector3(0.0f, 0.0f, 0.0f);      // Camera3D looking at point
            camera.up = new Vector3(0.0f, 1.0f, 0.0f);          // Camera3D up vector (rotation towards target)
            camera.fovy = 120.0f;                                // Camera3D field-of-view Y
            camera.type = CameraType.CAMERA_PERSPECTIVE;        // Camera3D mode type



            Vector3 point1 = new Vector3(0.0f, 0.0f, 0.0f);
            Vector3 point2 = new Vector3(10.0f, 0.0f, 0.0f);
            Vector3 point3 = new Vector3(10.0f, 10.0f, 0.0f);

            Raylib.SetCameraMode(camera, CameraMode.CAMERA_FREE); // Set a free camera mode
            Raylib.SetTargetFPS(60);

            Rlgl.rlDisableBackfaceCulling();
            while (!Raylib.WindowShouldClose())
            {
                Raylib.UpdateCamera(ref camera);
                Raylib.BeginDrawing();
                Raylib.ClearBackground(Color.RAYWHITE);

                Raylib.BeginMode3D(camera);


                Raylib.DrawTriangle3D(point1, point2, point3, Color.BLACK);



                Raylib.EndMode3D();


                //text
                Raylib.DrawRectangle(10, 10, 320, 133, Raylib.ColorAlpha(Color.SKYBLUE, 0.5f));
                Raylib.DrawRectangleLines(10, 10, 320, 133, Color.BLUE);

                Raylib.DrawText("Free camera default controls:", 20, 20, 10, Color.BLACK);
                Raylib.DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, Color.DARKGRAY);
                Raylib.DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, Color.DARKGRAY);
                Raylib.DrawText("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, Color.DARKGRAY);
                Raylib.DrawText("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom", 40, 100, 10, Color.DARKGRAY);


                Raylib.EndDrawing();
            }

            Raylib.CloseWindow();
        }
    }
}

如果有人知道如何實現這一點,我將不勝感激。

我不太清楚你所說的 3D 三角形是什么意思,但我假設你的意思是三角棱鏡。 為此,您需要明確地繪制每個面。 要繪制矩形邊,您需要繪制兩個三角形。 此外,由於我們只使用三角形的正面,我們不需要禁用背面剔除。 繪制三角形時,需要排列點,以便在看臉時,點 go 按順時針順序排列。

這是 C++ 實現,但它應該給你的想法;

    Camera3D camera;
    camera.position = (Vector3){10.0f, 10.0f, 10.0f}; // Camera3D position
    camera.target = (Vector3){0.0f, 0.0f, 0.0f};      // Camera3D looking at point
    camera.up = (Vector3){0.0f, 1.0f, 0.0f};          // Camera3D up vector (rotation towards target)
    camera.fovy = 120.0f;                                // Camera3D field-of-view Y
    camera.type = CAMERA_PERSPECTIVE;        // Camera3D mode type

    Vector3 point1 = (Vector3){0.0f, 0.0f, 0.0f};
    Vector3 point2 = (Vector3){10.0f, 0.0f, 0.0f};
    Vector3 point3 = (Vector3){10.0f, 10.0f, 0.0f};

    Vector3 thickness = (Vector3){0, 0, -5.0f};

    Vector3 back1 = Vector3Add(point1, thickness);
    Vector3 back2 = Vector3Add(point2, thickness);
    Vector3 back3 = Vector3Add(point3, thickness);

    SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
    //rlDisableBackfaceCulling();       

    // Main game loop
    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        // Update
        //----------------------------------------------------------------------------------
        // TODO: Update your variables here
        //----------------------------------------------------------------------------------
        

        // Draw
        //----------------------------------------------------------------------------------
        UpdateCamera(&camera);
        BeginDrawing();
        ClearBackground(RAYWHITE);

        BeginMode3D(camera);

            // Front face
            DrawTriangle3D(point1, point2, point3, BLACK);

            // Back face
            DrawTriangle3D(back3, back2, back1, BLACK);

            // Slanted side
            DrawTriangle3D(back1, point1, back3, BLACK);
            DrawTriangle3D(point1, point3, back3, BLACK);

            // Back side
            DrawTriangle3D(point2, back2, back3, BLACK);
            DrawTriangle3D(back3, point3, point2, BLACK);

            // Bottom side
            DrawTriangle3D(back1, back2, point2, BLACK);
            DrawTriangle3D(point2, point1, back1, BLACK);


            DrawGrid(100, 10.0);
        EndMode3D();


        EndDrawing();
        //----------------------------------------------------------------------------------
    }

這是在軌道模式下的樣子。 三棱鏡的gif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM