From 52191f922ccd8cd8d612e4159b07cd781082c64e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 6 May 2015 16:57:53 +0200 Subject: [PATCH] Render Sphere/Box zones --- .../src/RenderableZoneEntityItem.cpp | 55 ++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index 050fb364b4..6e4f4bae53 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -11,6 +11,7 @@ #include "RenderableZoneEntityItem.h" +#include #include #include #include @@ -90,13 +91,53 @@ void RenderableZoneEntityItem::updateGeometry() { void RenderableZoneEntityItem::render(RenderArgs* args) { if (_drawZoneBoundaries || true) { - updateGeometry(); - - if (_model && _model->isActive()) { - PerformanceTimer perfTimer("zone->render"); - glPushMatrix(); - _model->renderInScene(getLocalRenderAlpha(), args); - glPopMatrix(); + switch (getShapeType()) { + case SHAPE_TYPE_COMPOUND: { + updateGeometry(); + + if (_model && _model->isActive()) { + PerformanceTimer perfTimer("zone->renderCompound"); + glPushMatrix(); + _model->renderInScene(getLocalRenderAlpha(), args); + glPopMatrix(); + } + break; + } + case SHAPE_TYPE_BOX: + case SHAPE_TYPE_SPHERE: { + PerformanceTimer perfTimer("zone->renderPrimitive"); + glm::vec3 position = getPosition(); + glm::vec3 center = getCenter(); + glm::vec3 dimensions = getDimensions(); + glm::quat rotation = getRotation(); + + glm::vec4 DEFAULT_COLOR(1.0f, 1.0f, 1.0f, getLocalRenderAlpha()); + + glPushMatrix(); { + glTranslatef(position.x, position.y, position.z); + glm::vec3 axis = glm::axis(rotation); + glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); + glPushMatrix(); { + glm::vec3 positionToCenter = center - position; + glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); + glScalef(dimensions.x, dimensions.y, dimensions.z); + + auto deferredLightingEffect = DependencyManager::get(); + + if (getShapeType() == SHAPE_TYPE_SPHERE) { + const int SLICES = 15; + const int STACKS = 15; + deferredLightingEffect->renderWireSphere(0.5f, SLICES, STACKS, DEFAULT_COLOR); + } else { + deferredLightingEffect->renderWireCube(1.0f, DEFAULT_COLOR); + } + } glPopMatrix(); + } glPopMatrix(); + break; + } + default: + // Not handled + break; } } }