mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 00:08:53 +02:00
Render Sphere/Box zones
This commit is contained in:
parent
6d2fe945af
commit
52191f922c
1 changed files with 48 additions and 7 deletions
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "RenderableZoneEntityItem.h"
|
#include "RenderableZoneEntityItem.h"
|
||||||
|
|
||||||
|
#include <DeferredLightingEffect.h>
|
||||||
#include <DependencyManager.h>
|
#include <DependencyManager.h>
|
||||||
#include <GeometryCache.h>
|
#include <GeometryCache.h>
|
||||||
#include <PerfStat.h>
|
#include <PerfStat.h>
|
||||||
|
@ -90,13 +91,53 @@ void RenderableZoneEntityItem::updateGeometry() {
|
||||||
|
|
||||||
void RenderableZoneEntityItem::render(RenderArgs* args) {
|
void RenderableZoneEntityItem::render(RenderArgs* args) {
|
||||||
if (_drawZoneBoundaries || true) {
|
if (_drawZoneBoundaries || true) {
|
||||||
updateGeometry();
|
switch (getShapeType()) {
|
||||||
|
case SHAPE_TYPE_COMPOUND: {
|
||||||
if (_model && _model->isActive()) {
|
updateGeometry();
|
||||||
PerformanceTimer perfTimer("zone->render");
|
|
||||||
glPushMatrix();
|
if (_model && _model->isActive()) {
|
||||||
_model->renderInScene(getLocalRenderAlpha(), args);
|
PerformanceTimer perfTimer("zone->renderCompound");
|
||||||
glPopMatrix();
|
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<DeferredLightingEffect>();
|
||||||
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue