From 0182a6d8954d390773f1cbba6a53a41b95ec7d94 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 30 Apr 2014 11:12:49 -0700 Subject: [PATCH] models working end to end --- assignment-client/src/AssignmentFactory.cpp | 3 +++ interface/CMakeLists.txt | 2 +- interface/src/Application.cpp | 20 +++++++++++++++++++ interface/src/Application.h | 7 ++++++- interface/src/Menu.cpp | 3 ++- interface/src/Menu.h | 4 +--- .../{ => particles}/ParticleTreeRenderer.cpp | 0 .../{ => particles}/ParticleTreeRenderer.h | 0 libraries/networking/src/PacketHeaders.h | 2 +- libraries/script-engine/src/ScriptEngine.cpp | 13 ++++++++---- 10 files changed, 43 insertions(+), 11 deletions(-) rename interface/src/{ => particles}/ParticleTreeRenderer.cpp (100%) rename interface/src/{ => particles}/ParticleTreeRenderer.h (100%) diff --git a/assignment-client/src/AssignmentFactory.cpp b/assignment-client/src/AssignmentFactory.cpp index cdf5c591e1..d2c2016328 100644 --- a/assignment-client/src/AssignmentFactory.cpp +++ b/assignment-client/src/AssignmentFactory.cpp @@ -16,6 +16,7 @@ #include "audio/AudioMixer.h" #include "avatars/AvatarMixer.h" #include "metavoxels/MetavoxelServer.h" +#include "models/ModelServer.h" #include "particles/ParticleServer.h" #include "voxels/VoxelServer.h" @@ -41,6 +42,8 @@ ThreadedAssignment* AssignmentFactory::unpackAssignment(const QByteArray& packet return new ParticleServer(packet); case Assignment::MetavoxelServerType: return new MetavoxelServer(packet); + case Assignment::ModelServerType: + return new ModelServer(packet); default: return NULL; } diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index f7c39a7479..0a56109260 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -49,7 +49,7 @@ configure_file(InterfaceVersion.h.in "${PROJECT_BINARY_DIR}/includes/InterfaceVe # grab the implementation and header files from src dirs file(GLOB INTERFACE_SRCS src/*.cpp src/*.h) -foreach(SUBDIR avatar devices renderer ui starfield location scripting voxels) +foreach(SUBDIR avatar devices renderer ui starfield location scripting voxels particles models) file(GLOB_RECURSE SUBDIR_SRCS src/${SUBDIR}/*.cpp src/${SUBDIR}/*.h) set(INTERFACE_SRCS ${INTERFACE_SRCS} "${SUBDIR_SRCS}") endforeach(SUBDIR) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 71bf02cf97..8014ba6161 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -1665,6 +1666,9 @@ void Application::init() { _particles.init(); _particles.setViewFrustum(getViewFrustum()); + _models.init(); + _models.setViewFrustum(getViewFrustum()); + _metavoxels.init(); _particleCollisionSystem.init(&_particleEditSender, _particles.getTree(), _voxels.getTree(), &_audio, &_avatarManager); @@ -1995,6 +1999,8 @@ void Application::update(float deltaTime) { _particles.update(); // update the particles... _particleCollisionSystem.update(); // collide the particles... + _models.update(); // update the models... + _overlays.update(deltaTime); // let external parties know we're updating @@ -2335,6 +2341,7 @@ void Application::updateShadowMap() { _avatarManager.renderAvatars(Avatar::SHADOW_RENDER_MODE); _particles.render(); + _models.render(); glPopMatrix(); @@ -2501,6 +2508,13 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly) { _particles.render(); } + // render models... + if (Menu::getInstance()->isOptionChecked(MenuOption::Models)) { + PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), + "Application::displaySide() ... models..."); + _models.render(); + } + // render the ambient occlusion effect if enabled if (Menu::getInstance()->isOptionChecked(MenuOption::AmbientOcclusion)) { PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), @@ -3095,6 +3109,9 @@ void Application::domainChanged(const QString& domainHostname) { // reset the particle renderer _particles.clear(); + // reset the model renderer + _models.clear(); + // reset the voxels renderer _voxels.killLocalVoxels(); } @@ -3428,6 +3445,9 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript scriptEngine->getParticlesScriptingInterface()->setPacketSender(&_particleEditSender); scriptEngine->getParticlesScriptingInterface()->setParticleTree(_particles.getTree()); + scriptEngine->getModelsScriptingInterface()->setPacketSender(&_modelEditSender); + scriptEngine->getModelsScriptingInterface()->setModelTree(_models.getTree()); + // hook our avatar object into this script engine scriptEngine->setAvatarData(_myAvatar, "MyAvatar"); // leave it as a MyAvatar class to expose thrust features diff --git a/interface/src/Application.h b/interface/src/Application.h index 3fe30a1b08..a220525bc3 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -51,7 +52,6 @@ #include "Menu.h" #include "MetavoxelSystem.h" #include "PacketHeaders.h" -#include "ParticleTreeRenderer.h" #include "Stars.h" #include "avatar/Avatar.h" #include "avatar/AvatarManager.h" @@ -60,6 +60,8 @@ #include "devices/Faceshift.h" #include "devices/SixenseManager.h" #include "devices/Visage.h" +#include "models/ModelTreeRenderer.h" +#include "particles/ParticleTreeRenderer.h" #include "renderer/AmbientOcclusionEffect.h" #include "renderer/GeometryCache.h" #include "renderer/GlowEffect.h" @@ -416,6 +418,8 @@ private: ParticleTreeRenderer _particles; ParticleCollisionSystem _particleCollisionSystem; + ModelTreeRenderer _models; + QByteArray _voxelsFilename; bool _wantToKillLocalVoxels; @@ -493,6 +497,7 @@ private: VoxelHideShowThread _voxelHideShowThread; VoxelEditPacketSender _voxelEditSender; ParticleEditPacketSender _particleEditSender; + ModelEditPacketSender _modelEditSender; int _packetsPerSecond; int _bytesPerSecond; diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index e194734928..296706c90e 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -280,8 +280,9 @@ Menu::Menu() : addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Shadows, 0, false); addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Metavoxels, 0, true); - addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::BuckyBalls, 0, true); + addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::BuckyBalls, 0, false); addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Particles, 0, true); + addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Models, 0, true); addActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::LodTools, Qt::SHIFT | Qt::Key_L, this, SLOT(lodTools())); QMenu* voxelOptionsMenu = developerMenu->addMenu("Voxel Options"); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 967312dca9..e99649438d 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -276,9 +276,6 @@ namespace MenuOption { const QString AudioSpatialProcessingWithDiffusions = "With Diffusions"; const QString AudioSpatialProcessingDontDistanceAttenuate = "Don't calculate distance attenuation"; const QString AudioSpatialProcessingAlternateDistanceAttenuate = "Alternate distance attenuation"; - - - const QString Avatars = "Avatars"; const QString Bandwidth = "Bandwidth Display"; const QString BandwidthDetails = "Bandwidth Details"; @@ -330,6 +327,7 @@ namespace MenuOption { const QString MetavoxelEditor = "Metavoxel Editor..."; const QString Metavoxels = "Metavoxels"; const QString Mirror = "Mirror"; + const QString Models = "Models"; const QString MoveWithLean = "Move with Lean"; const QString MuteAudio = "Mute Microphone"; const QString NameLocation = "Name this location"; diff --git a/interface/src/ParticleTreeRenderer.cpp b/interface/src/particles/ParticleTreeRenderer.cpp similarity index 100% rename from interface/src/ParticleTreeRenderer.cpp rename to interface/src/particles/ParticleTreeRenderer.cpp diff --git a/interface/src/ParticleTreeRenderer.h b/interface/src/particles/ParticleTreeRenderer.h similarity index 100% rename from interface/src/ParticleTreeRenderer.h rename to interface/src/particles/ParticleTreeRenderer.h diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index e69bc341be..c6b4e3b9e5 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -74,7 +74,7 @@ const QSet NON_VERIFIED_PACKETS = QSet() << PacketTypeDomainServerRequireDTLS << PacketTypeDomainConnectRequest << PacketTypeDomainList << PacketTypeDomainListRequest << PacketTypeCreateAssignment << PacketTypeRequestAssignment << PacketTypeStunResponse - << PacketTypeNodeJsonStats << PacketTypeVoxelQuery << PacketTypeParticleQuery; + << PacketTypeNodeJsonStats << PacketTypeVoxelQuery << PacketTypeParticleQuery << PacketTypeModelQuery; const int NUM_BYTES_MD5_HASH = 16; const int NUM_STATIC_HEADER_BYTES = sizeof(PacketVersion) + NUM_BYTES_RFC4122_UUID; diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index f7d01863cc..92376cf358 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -20,15 +20,14 @@ #include #include #include +#include #include #include +#include +#include #include #include #include -#include -#include - -#include #include "AnimationObject.h" #include "MenuItemProperties.h" @@ -205,6 +204,11 @@ void ScriptEngine::init() { qScriptRegisterMetaType(&_engine, ParticlePropertiesToScriptValue, ParticlePropertiesFromScriptValue); qScriptRegisterMetaType(&_engine, ParticleIDtoScriptValue, ParticleIDfromScriptValue); qScriptRegisterSequenceMetaType >(&_engine); + + qScriptRegisterMetaType(&_engine, ModelItemPropertiesToScriptValue, ModelItemPropertiesFromScriptValue); + qScriptRegisterMetaType(&_engine, ModelItemIDtoScriptValue, ModelItemIDfromScriptValue); + qScriptRegisterSequenceMetaType >(&_engine); + qScriptRegisterSequenceMetaType >(&_engine); qScriptRegisterSequenceMetaType >(&_engine); qScriptRegisterSequenceMetaType >(&_engine); @@ -225,6 +229,7 @@ void ScriptEngine::init() { registerGlobalObject("Script", this); registerGlobalObject("Audio", &_audioScriptingInterface); registerGlobalObject("Controller", _controllerScriptingInterface); + registerGlobalObject("Models", &_modelsScriptingInterface); registerGlobalObject("Particles", &_particlesScriptingInterface); registerGlobalObject("Quat", &_quatLibrary); registerGlobalObject("Vec3", &_vec3Library);