1 か月前 · Jun 30, 2026 5:50 AM
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);
}
}