don't render avatar boundary shapes in first person

This commit is contained in:
Andrew Meadows 2014-04-11 17:44:51 -07:00
parent 2fdb8d935b
commit 0ad841edfb
5 changed files with 26 additions and 11 deletions

View file

@ -228,14 +228,18 @@ void Avatar::render(const glm::vec3& cameraPosition, RenderMode renderMode) {
_skeletonModel.renderJointCollisionShapes(0.7f); _skeletonModel.renderJointCollisionShapes(0.7f);
} }
if (Menu::getInstance()->isOptionChecked(MenuOption::RenderHeadCollisionShapes)) { if (Menu::getInstance()->isOptionChecked(MenuOption::RenderHeadCollisionShapes)) {
getHead()->getFaceModel().updateShapePositions(); if (shouldRenderHead(cameraPosition, renderMode)) {
getHead()->getFaceModel().renderJointCollisionShapes(0.7f); getHead()->getFaceModel().updateShapePositions();
getHead()->getFaceModel().renderJointCollisionShapes(0.7f);
}
} }
if (Menu::getInstance()->isOptionChecked(MenuOption::RenderBoundingCollisionShapes)) { if (Menu::getInstance()->isOptionChecked(MenuOption::RenderBoundingCollisionShapes)) {
getHead()->getFaceModel().updateShapePositions(); if (shouldRenderHead(cameraPosition, renderMode)) {
getHead()->getFaceModel().renderBoundingCollisionShapes(0.7f); getHead()->getFaceModel().updateShapePositions();
_skeletonModel.updateShapePositions(); getHead()->getFaceModel().renderBoundingCollisionShapes(0.7f);
_skeletonModel.renderBoundingCollisionShapes(0.7f); _skeletonModel.updateShapePositions();
_skeletonModel.renderBoundingCollisionShapes(0.7f);
}
} }
// quick check before falling into the code below: // quick check before falling into the code below:
@ -344,6 +348,10 @@ void Avatar::renderBody(RenderMode renderMode) {
getHand()->render(false); getHand()->render(false);
} }
bool Avatar::shouldRenderHead(const glm::vec3& cameraPosition, RenderMode renderMode) const {
return true;
}
void Avatar::updateJointMappings() { void Avatar::updateJointMappings() {
// no-op; joint mappings come from skeleton model // no-op; joint mappings come from skeleton model
} }

View file

@ -195,6 +195,7 @@ protected:
void renderDisplayName(); void renderDisplayName();
virtual void renderBody(RenderMode renderMode); virtual void renderBody(RenderMode renderMode);
virtual bool shouldRenderHead(const glm::vec3& cameraPosition, RenderMode renderMode) const;
virtual void updateJointMappings(); virtual void updateJointMappings();

View file

@ -78,7 +78,7 @@ public:
const bool getReturnToCenter() const { return _returnHeadToCenter; } // Do you want head to try to return to center (depends on interface detected) const bool getReturnToCenter() const { return _returnHeadToCenter; } // Do you want head to try to return to center (depends on interface detected)
float getAverageLoudness() const { return _averageLoudness; } float getAverageLoudness() const { return _averageLoudness; }
glm::vec3 calculateAverageEyePosition() { return _leftEyePosition + (_rightEyePosition - _leftEyePosition ) * ONE_HALF; } glm::vec3 calculateAverageEyePosition() const { return _leftEyePosition + (_rightEyePosition - _leftEyePosition ) * ONE_HALF; }
/// \return the point about which scaling occurs. /// \return the point about which scaling occurs.
glm::vec3 getScalePivot() const; glm::vec3 getScalePivot() const;

View file

@ -647,15 +647,20 @@ void MyAvatar::renderBody(RenderMode renderMode) {
_skeletonModel.render(1.0f, modelRenderMode); _skeletonModel.render(1.0f, modelRenderMode);
// Render head so long as the camera isn't inside it // Render head so long as the camera isn't inside it
const float RENDER_HEAD_CUTOFF_DISTANCE = 0.50f; if (shouldRenderHead(Application::getInstance()->getCamera()->getPosition(), renderMode)) {
Camera* myCamera = Application::getInstance()->getCamera();
if (renderMode != NORMAL_RENDER_MODE || (glm::length(myCamera->getPosition() - getHead()->calculateAverageEyePosition()) >
RENDER_HEAD_CUTOFF_DISTANCE * _scale)) {
getHead()->render(1.0f, modelRenderMode); getHead()->render(1.0f, modelRenderMode);
} }
getHand()->render(true); getHand()->render(true);
} }
const float RENDER_HEAD_CUTOFF_DISTANCE = 0.50f;
bool MyAvatar::shouldRenderHead(const glm::vec3& cameraPosition, RenderMode renderMode) const {
const Head* head = getHead();
return (renderMode != NORMAL_RENDER_MODE) ||
(glm::length(cameraPosition - head->calculateAverageEyePosition()) > RENDER_HEAD_CUTOFF_DISTANCE * _scale);
}
void MyAvatar::updateThrust(float deltaTime) { void MyAvatar::updateThrust(float deltaTime) {
// //
// Gather thrust information from keyboard and sensors to apply to avatar motion // Gather thrust information from keyboard and sensors to apply to avatar motion

View file

@ -41,6 +41,7 @@ public:
void render(const glm::vec3& cameraPosition, RenderMode renderMode = NORMAL_RENDER_MODE); void render(const glm::vec3& cameraPosition, RenderMode renderMode = NORMAL_RENDER_MODE);
void renderBody(RenderMode renderMode); void renderBody(RenderMode renderMode);
bool shouldRenderHead(const glm::vec3& cameraPosition, RenderMode renderMode) const;
void renderDebugBodyPoints(); void renderDebugBodyPoints();
void renderHeadMouse() const; void renderHeadMouse() const;