mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-10 08:36:25 +02:00
More work on billboards.
This commit is contained in:
parent
0d0e9565ff
commit
18ea1d6a85
3 changed files with 25 additions and 12 deletions
|
@ -527,7 +527,7 @@ void Application::paintGL() {
|
||||||
_glowEffect.render();
|
_glowEffect.render();
|
||||||
|
|
||||||
if (Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) {
|
if (Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) {
|
||||||
renderRearViewMirror();
|
renderRearViewMirror(_mirrorViewRect);
|
||||||
|
|
||||||
} else if (Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)) {
|
} else if (Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)) {
|
||||||
_rearMirrorTools->render(true);
|
_rearMirrorTools->render(true);
|
||||||
|
@ -2679,10 +2679,20 @@ void Application::setupWorldLight() {
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage Application::renderAvatarBillboard() {
|
QImage Application::renderAvatarBillboard() {
|
||||||
renderRearViewMirror(true);
|
_textureCache.getPrimaryFramebufferObject()->bind();
|
||||||
|
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
|
const int BILLBOARD_SIZE = 128;
|
||||||
|
renderRearViewMirror(QRect(0, _glWidget->height() - BILLBOARD_SIZE, BILLBOARD_SIZE, BILLBOARD_SIZE), true);
|
||||||
|
|
||||||
|
QImage image(BILLBOARD_SIZE, BILLBOARD_SIZE, QImage::Format_ARGB32);
|
||||||
|
glReadPixels(0, 0, BILLBOARD_SIZE, BILLBOARD_SIZE, GL_BGRA, GL_UNSIGNED_BYTE, image.bits());
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
|
_textureCache.getPrimaryFramebufferObject()->release();
|
||||||
|
|
||||||
QImage image(_glWidget->width(), _glWidget->height(), QImage::Format_ARGB32);
|
|
||||||
glReadPixels(0, 0, _glWidget->width(), _glWidget->height(), GL_BGRA, GL_UNSIGNED_BYTE, image.bits());
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3603,9 +3613,13 @@ void Application::renderCoverageMapsRecursively(CoverageMap* map) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::renderRearViewMirror(bool billboard) {
|
void Application::renderRearViewMirror(const QRect& region, bool billboard) {
|
||||||
bool eyeRelativeCamera = false;
|
bool eyeRelativeCamera = false;
|
||||||
if (_rearMirrorTools->getZoomLevel() == BODY && !billboard) {
|
if (billboard) {
|
||||||
|
const float BILLBOARD_DISTANCE = 5.0f;
|
||||||
|
_mirrorCamera.setDistance(BILLBOARD_DISTANCE * _myAvatar->getScale());
|
||||||
|
_mirrorCamera.setTargetPosition(_myAvatar->getPosition());
|
||||||
|
} else if (_rearMirrorTools->getZoomLevel() == BODY) {
|
||||||
_mirrorCamera.setDistance(MIRROR_REARVIEW_BODY_DISTANCE * _myAvatar->getScale());
|
_mirrorCamera.setDistance(MIRROR_REARVIEW_BODY_DISTANCE * _myAvatar->getScale());
|
||||||
_mirrorCamera.setTargetPosition(_myAvatar->getChestPosition());
|
_mirrorCamera.setTargetPosition(_myAvatar->getChestPosition());
|
||||||
} else { // HEAD zoom level
|
} else { // HEAD zoom level
|
||||||
|
@ -3625,10 +3639,8 @@ void Application::renderRearViewMirror(bool billboard) {
|
||||||
_mirrorCamera.update(1.0f/_fps);
|
_mirrorCamera.update(1.0f/_fps);
|
||||||
|
|
||||||
// set the bounds of rear mirror view
|
// set the bounds of rear mirror view
|
||||||
glViewport(_mirrorViewRect.x(), _glWidget->height() - _mirrorViewRect.y() - _mirrorViewRect.height(),
|
glViewport(region.x(), _glWidget->height() - region.y() - region.height(), region.width(), region.height());
|
||||||
_mirrorViewRect.width(), _mirrorViewRect.height());
|
glScissor(region.x(), _glWidget->height() - region.y() - region.height(), region.width(), region.height());
|
||||||
glScissor(_mirrorViewRect.x(), _glWidget->height() - _mirrorViewRect.y() - _mirrorViewRect.height(),
|
|
||||||
_mirrorViewRect.width(), _mirrorViewRect.height());
|
|
||||||
bool updateViewFrustum = false;
|
bool updateViewFrustum = false;
|
||||||
updateProjectionMatrix(_mirrorCamera, updateViewFrustum);
|
updateProjectionMatrix(_mirrorCamera, updateViewFrustum);
|
||||||
glEnable(GL_SCISSOR_TEST);
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
|
|
@ -333,7 +333,7 @@ private:
|
||||||
void displayStats();
|
void displayStats();
|
||||||
void checkStatsClick();
|
void checkStatsClick();
|
||||||
void toggleStatsExpanded();
|
void toggleStatsExpanded();
|
||||||
void renderRearViewMirror(bool billboard = false);
|
void renderRearViewMirror(const QRect& region, bool billboard = false);
|
||||||
void renderViewFrustum(ViewFrustum& viewFrustum);
|
void renderViewFrustum(ViewFrustum& viewFrustum);
|
||||||
|
|
||||||
void checkBandwidthMeterClick();
|
void checkBandwidthMeterClick();
|
||||||
|
|
|
@ -53,7 +53,8 @@ enum PacketType {
|
||||||
PacketTypeParticleErase,
|
PacketTypeParticleErase,
|
||||||
PacketTypeParticleAddResponse,
|
PacketTypeParticleAddResponse,
|
||||||
PacketTypeMetavoxelData,
|
PacketTypeMetavoxelData,
|
||||||
PacketTypeAvatarIdentity
|
PacketTypeAvatarIdentity,
|
||||||
|
PacketTypeAvatarBillboard
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef char PacketVersion;
|
typedef char PacketVersion;
|
||||||
|
|
Loading…
Reference in a new issue