Developer knowledge network · moderated exchange

Супольнасць UnreliableCode

Супольнасць распрацоўшчыкаў даследаванняў, зваротнага праектавання і кадавання

Knowledge indexжыць
4Categories
919Threads
2.8KПаведамленні
Tutorial

Drawing 3D Bounding Boxes with 8-corner World-to-Screen projection

matrix_math_guy
Math Specialist
MEMBER
прадстаўнік: 105
Дата далучэння: Aug 2018
Паведамленні: 52
Дзякуй: 41
1 месяцаў таму · Jul 1, 2026 8:30 AM
#1

How to render a true 3D oriented bounding box in Dear ImGui:

CPP
void Draw3DBox(Vector3 origin, Vector3 min, Vector3 max, float yaw, const Matrix4x4& vMatrix, ImU32 color) {
    Vector3 corners[8] = {
        { min.x, min.y, min.z }, { max.x, min.y, min.z },
        { max.x, max.y, min.z }, { min.x, max.y, min.z },
        { min.x, min.y, max.z }, { max.x, min.y, max.z },
        { max.x, max.y, max.z }, { min.x, max.y, max.z }
    };
    
    Vector2 screenCorners[8];
    for (int i = 0; i < 8; i++) {
        Vector3 rotated = RotateYaw(corners[i], yaw) + origin;
        if (!WorldToScreen(rotated, screenCorners[i], vMatrix, screenW, screenH)) return;
    }
    
    // Connect 12 edges with ImDrawList::AddLine
    ImDrawList* dl = ImGui::GetBackgroundDrawList();
    for (int i = 0; i < 4; i++) {
        dl->AddLine(ImVec2(screenCorners[i].x, screenCorners[i].y), ImVec2(screenCorners[(i+1)%4].x, screenCorners[(i+1)%4].y), color);
        dl->AddLine(ImVec2(screenCorners[i+4].x, screenCorners[i+4].y), ImVec2(screenCorners[((i+1)%4)+4].x, screenCorners[((i+1)%4)+4].y), color);
        dl->AddLine(ImVec2(screenCorners[i].x, screenCorners[i].y), ImVec2(screenCorners[i+4].x, screenCorners[i+4].y), color);
    }
}
imgui_artisan
UI Designer
MEMBER
прадстаўнік: 202
Дата далучэння: Apr 2019
Паведамленні: 54
Дзякуй: 28
1 месяцаў таму · Jul 1, 2026 2:21 PM
#2

Oriented 3D bounding boxes that rotate with player yaw look so much more professional than static 2D rectangles!

matrix_math_guy
Math Specialist
MEMBER
прадстаўнік: 105
Дата далучэння: Aug 2018
Паведамленні: 52
Дзякуй: 41
1 месяцаў таму · Jul 2, 2026 6:16 AM
#3

Clean math. Works in Source 2, UE5, and Unity.