diff --git a/demos/optical_bench/src/controller_overlay.cpp b/demos/optical_bench/src/controller_overlay.cpp new file mode 100644 index 0000000000000000000000000000000000000000..df45dfe4bad080e6a097993346a359fe4436a094 --- /dev/null +++ b/demos/optical_bench/src/controller_overlay.cpp @@ -0,0 +1,166 @@ +//------------------------------------------------------------------------------ +// Project Phoenix +// +// Copyright (c) 2017-2018 RWTH Aachen University, Germany, +// Virtual Reality & Immersive Visualization Group. +//------------------------------------------------------------------------------ +// License +// +// Licensed under the 3-Clause BSD License (the "License"); +// you may not use this file except in compliance with the License. +// See the file LICENSE for the full text. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/BSD-3-Clause +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//------------------------------------------------------------------------------ + +#include <string> + +#include "controller_overlay.hpp" +#include "phx/rendering/components/material_handle.hpp" +#include "phx/rendering/components/transform.hpp" +#include "phx/resources/loaders/scene_loader.hpp" +#include "phx/resources/resource_utils.hpp" +#include "phx/resources/types/image.hpp" +#include "phx/suppress_warnings.hpp" + +SUPPRESS_WARNINGS_BEGIN +#include "glm/gtc/matrix_transform.hpp" +SUPPRESS_WARNINGS_END + +namespace phx { +ControllerOverlay::ControllerOverlay(phx::Entity* controller, + phx::Scene* scene) { + auto controller_overlay = phx::SceneLoader::InsertModelIntoScene( + "models/opticalBench/controller_overlay/Controller_Buttons.obj", scene); + + controller_overlay->GetFirstComponent<phx::Transform>()->SetParent( + controller->GetFirstComponent<phx::Transform>()); + + // select entitys + auto transform = controller_overlay->GetFirstComponent<phx::Transform>(); + for (auto i = 0u; i < transform->GetChildCount(); i++) { + auto entity = transform->GetChild(i)->GetEntity(); + auto handle = entity->GetFirstComponent<phx::MaterialHandle>(); + + if (handle->GetMaterial()->GetName().compare("Grip_Left") == 0) + grip_left_ = entity; + else if (handle->GetMaterial()->GetName().compare("Grip_Right") == 0) + grip_right_ = entity; + else if (handle->GetMaterial()->GetName().compare("Trigger") == 0) + grip_trigger_ = entity; + else if (handle->GetMaterial()->GetName().compare("Trackpad") == 0) + grip_trackpad_ = entity; + } + + // store/load images + grip_images_.push_back(grip_left_->GetFirstComponent<phx::MaterialHandle>() + ->GetMaterial() + ->GetAmbientImage()); + grip_images_.push_back(phx::ResourceUtils::LoadResourceFromFile<phx::Image>( + "models/opticalBench/controller_overlay/menu_images/Grip_Select.png")); + grip_images_.push_back(phx::ResourceUtils::LoadResourceFromFile<phx::Image>( + "models/opticalBench/controller_overlay/menu_images/Grip1.png")); + grip_images_.push_back(phx::ResourceUtils::LoadResourceFromFile<phx::Image>( + "models/opticalBench/controller_overlay/menu_images/Grip2.png")); + grip_images_.push_back(phx::ResourceUtils::LoadResourceFromFile<phx::Image>( + "models/opticalBench/controller_overlay/menu_images/Grip3.png")); + + trigger_images_.push_back( + grip_trigger_->GetFirstComponent<phx::MaterialHandle>() + ->GetMaterial() + ->GetAmbientImage()); + trigger_images_.push_back(phx::ResourceUtils::LoadResourceFromFile< + phx::Image>( + "models/opticalBench/controller_overlay/menu_images/Trigger_Grab.png")); + trigger_images_.push_back( + phx::ResourceUtils::LoadResourceFromFile<phx::Image>( + "models/opticalBench/controller_overlay/menu_images/" + "Trigger_Grabbed.png")); + + trackpad_images_.push_back( + grip_trackpad_->GetFirstComponent<phx::MaterialHandle>() + ->GetMaterial() + ->GetAmbientImage()); + trackpad_images_.push_back( + phx::ResourceUtils::LoadResourceFromFile<phx::Image>( + "models/opticalBench/controller_overlay/menu_images/" + "Trackpad_Rotate.png")); +} + +std::string ControllerOverlay::ToString() const { return "Controller Overlay"; } + +void ControllerOverlay::SetGripMode(GripMode m) { + if (m == current_grip_mode_) return; + switch (m) { + case EMPTY: + setEntityImage(grip_left_, grip_images_[3]); + setEntityImage(grip_right_, grip_images_[3]); + break; + case ROTATION: + setEntityImage(grip_left_, grip_images_[4]); + setEntityImage(grip_right_, grip_images_[4]); + break; + case TRANSLATION: + setEntityImage(grip_left_, grip_images_[2]); + setEntityImage(grip_right_, grip_images_[2]); + break; + case RESET: + setEntityImage(grip_left_, grip_images_[0]); + setEntityImage(grip_right_, grip_images_[0]); + break; + case SELECT: + setEntityImage(grip_left_, grip_images_[1]); + setEntityImage(grip_right_, grip_images_[1]); + break; + }; + current_grip_mode_ = m; +} + +void ControllerOverlay::SetTrackpadRotate(bool activate) { + if (activate == current_trackpad_rotate_) return; + if (activate) { + setEntityImage(grip_trackpad_, trackpad_images_[1]); + } else { + setEntityImage(grip_trackpad_, trackpad_images_[0]); + } + current_trackpad_rotate_ = activate; +} + +void ControllerOverlay::SetTrackpadAngle(float angle) { + if (current_angle_ == angle) return; + grip_trackpad_->GetFirstComponent<phx::Transform>()->SetLocalMatrix( + glm::translate(glm::mat4(), glm::vec3(0, -0.00509f, 0.04835f)) * + glm::rotate(glm::mat4(), angle, glm::vec3(0, 0.9935f, 0.1138f)) * + glm::translate(glm::mat4(), glm::vec3(0, 0.00509f, -0.04835f))); + current_angle_ = angle; +} + +void ControllerOverlay::SetTriggerMode(TriggerMode m) { + if (m == current_trigger_mode_) return; + switch (m) { + case NORMAL: + setEntityImage(grip_trigger_, trigger_images_[0]); + break; + case GRAB: + setEntityImage(grip_trigger_, trigger_images_[1]); + break; + case GRABBED: + setEntityImage(grip_trigger_, trigger_images_[2]); + break; + }; + current_trigger_mode_ = m; +} + +void phx::ControllerOverlay::setEntityImage( + phx::Entity* e, phx::ResourcePointer<phx::Image> i) { + e->GetFirstComponent<phx::MaterialHandle>()->GetMaterial()->SetAmbientImage( + i); +} +} // namespace phx diff --git a/demos/optical_bench/src/controller_overlay.hpp b/demos/optical_bench/src/controller_overlay.hpp new file mode 100644 index 0000000000000000000000000000000000000000..98dfc26b6d3f69788ff557263fc518cb12e20723 --- /dev/null +++ b/demos/optical_bench/src/controller_overlay.hpp @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// Project Phoenix +// +// Copyright (c) 2017-2018 RWTH Aachen University, Germany, +// Virtual Reality & Immersive Visualization Group. +//------------------------------------------------------------------------------ +// License +// +// Licensed under the 3-Clause BSD License (the "License"); +// you may not use this file except in compliance with the License. +// See the file LICENSE for the full text. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/BSD-3-Clause +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//------------------------------------------------------------------------------ + +#ifndef OPTICAL_BENCH_CONTROLLER_OVERLAY_HPP_ +#define OPTICAL_BENCH_CONTROLLER_OVERLAY_HPP_ + +#include <functional> +#include <string> +#include <vector> +#include "phx/core/component.hpp" +#include "phx/core/entity.hpp" +#include "phx/core/scene.hpp" +#include "phx/resources/resource_pointer.hpp" +#include "phx/resources/types/image.hpp" +#include "phx/suppress_warnings.hpp" + +namespace phx { +class ControllerOverlay : public Component { + public: + enum GripMode { + EMPTY = 0, + ROTATION = 1, + TRANSLATION = 2, + RESET = 3, + SELECT = 4 + }; + enum TriggerMode { NORMAL = 0, GRAB = 1, GRABBED = 2 }; + explicit ControllerOverlay(phx::Entity* entity, phx::Scene* scene); + virtual ~ControllerOverlay() = default; + + std::string ToString() const override; + + void SetGripMode(GripMode m); + void SetTrackpadRotate(bool activate); + void SetTrackpadAngle(float angle); + void SetTriggerMode(TriggerMode m); + + private: + phx::Entity* grip_left_; + phx::Entity* grip_right_; + phx::Entity* grip_trigger_; + phx::Entity* grip_trackpad_; + + GripMode current_grip_mode_ = GripMode::RESET; + TriggerMode current_trigger_mode_ = TriggerMode::NORMAL; + bool current_grip_select_ = false; + bool current_trackpad_rotate_ = false; + float current_angle_ = 0.0f; + + std::vector<phx::ResourcePointer<phx::Image>> grip_images_; + std::vector<phx::ResourcePointer<phx::Image>> trigger_images_; + std::vector<phx::ResourcePointer<phx::Image>> trackpad_images_; + + void setEntityImage(phx::Entity* e, phx::ResourcePointer<phx::Image> i); +}; + +} // namespace phx + +#endif // OPTICAL_BENCH_CONTROLLER_OVERLAY_HPP_ diff --git a/demos/optical_bench/src/hmd_navigation_behavior.cpp b/demos/optical_bench/src/hmd_navigation_behavior.cpp index e8ac0a7e353504b298cc3137495162d8362939a5..7f685a8d4522fdb9e3cbb8b0b0c90e60bb257372 100644 --- a/demos/optical_bench/src/hmd_navigation_behavior.cpp +++ b/demos/optical_bench/src/hmd_navigation_behavior.cpp @@ -21,6 +21,7 @@ //------------------------------------------------------------------------------ #include "hmd_navigation_behavior.hpp" +#include "controller_overlay.hpp" #include "ray_pass.hpp" #include "selection_mark_handler.hpp" #include "selector.hpp" @@ -101,6 +102,11 @@ HMDNavigationBehavior::HMDNavigationBehavior( phx::RuntimeComponent<phx::RIGHT_CONTROLLER>>()[0] ->GetFirstComponent<phx::Transform>(); + auto controller_entity = scene_->GetEntitiesWithComponents< + phx::RuntimeComponent<phx::RIGHT_CONTROLLER>>()[0]; + controller_overlay_ = controller_entity->AddComponent<phx::ControllerOverlay>( + controller_entity, scene); + // Prepare helpers pointer_rod_ = phx::SceneLoader::InsertModelIntoScene( "models/opticalBench/rod/pointerRod.obj", scene); @@ -135,7 +141,7 @@ void HMDNavigationBehavior::OnUpdate() { static bool trigger_pressed = false; - // Change selected or grabbed entities + // Change selected or hovered entities if (right_controller_->GetAxesValue(phx::VRController::AXES_TRIGGER).x == 1.0f) { if (!trigger_pressed) { // Trigger pressed @@ -153,20 +159,54 @@ void HMDNavigationBehavior::OnUpdate() { } // update rotator + static float angle = 0; if (last_selected_ != nullptr && last_selected_->GetFirstComponent<phx::TurnHandler>() != nullptr) { - last_selected_->GetFirstComponent<phx::TurnHandler>()->Turn( - getTouchpadRotationDelta()); + controller_overlay_->SetTrackpadRotate(true); + float delta = getTouchpadRotationDelta(); + last_selected_->GetFirstComponent<phx::TurnHandler>()->Turn(delta); + angle += delta; + } else { + controller_overlay_->SetTrackpadRotate(false); + angle = 0; } + controller_overlay_->SetTrackpadAngle(-angle); if (select_->GetIntersectionDistance() < INFINITY && - select_->GetIntersectionDistance() > 0.05f) { + select_->GetIntersectionDistance() >= 0.0f) { pointer_rod_->GetFirstComponent<phx::Transform>()->SetLocalScale( - glm::vec3(1, 1, select_->GetIntersectionDistance())); + glm::vec3(1, 1, select_->GetIntersectionDistance() + 0.015f)); //+15mm } else { pointer_rod_->GetFirstComponent<phx::Transform>()->SetLocalScale( glm::vec3(1, 1, 0.05f)); } + + // Change Grip Images + if (!trigger_pressed) { + if (manipulationHelperAttachable(select_->GetHovered())) { + controller_overlay_->SetGripMode(phx::ControllerOverlay::SELECT); + } else if (last_selected_ == nullptr) { + controller_overlay_->SetGripMode(phx::ControllerOverlay::RESET); + } else if (last_selected_ != nullptr && + manipulationHelperAttachable(last_selected_)) { + controller_overlay_->SetGripMode( + static_cast<phx::ControllerOverlay::GripMode>(grip_mode % 3)); + } + } else { + controller_overlay_->SetGripMode(phx::ControllerOverlay::RESET); + } + + // Change Trigger Images + if (trigger_pressed && select_->GetGrabbed() != nullptr && + select_->GetGrabbed()->GetFirstComponent<phx::Selector>() != nullptr) { + controller_overlay_->SetTriggerMode(phx::ControllerOverlay::GRABBED); + } else if (!trigger_pressed && select_->GetHovered() != nullptr && + select_->GetHovered()->GetFirstComponent<phx::Selector>() != + nullptr) { + controller_overlay_->SetTriggerMode(phx::ControllerOverlay::GRAB); + } else { + controller_overlay_->SetTriggerMode(phx::ControllerOverlay::NORMAL); + } } void HMDNavigationBehavior::update_helpers() { @@ -262,15 +302,22 @@ void HMDNavigationBehavior::updateInsersectionData() { void HMDNavigationBehavior::buttonChange( phx::VRController::ButtonId& id, phx::VRController::ButtonEvent& event) { if (id == phx::VRController::ButtonId::k_EButton_Grip && - event == phx::VRController::ButtonEvent::BUTTON_PRESSED && - select_->GetGrabbed() == nullptr) { - if (select_->GetHovered() == nullptr) { + event == phx::VRController::ButtonEvent::BUTTON_PRESSED) { + if (select_->GetHovered() == nullptr && + manipulationHelperAttachable(last_selected_)) { grip_mode = grip_mode + 1 % 3; + update_helpers(); } else { setLastSelected(select_->GetHovered()); - update_helpers(); + if (grip_mode == 0) grip_mode = 1; // Hover without feedback sucks + update_helpers(); } } } + +bool HMDNavigationBehavior::manipulationHelperAttachable(phx::Entity* e) { + return e != nullptr && e->GetFirstComponent<phx::Selector>() != nullptr && + e->GetFirstComponent<phx::Selector>()->manipulation_helper_attachable_; +} diff --git a/demos/optical_bench/src/hmd_navigation_behavior.hpp b/demos/optical_bench/src/hmd_navigation_behavior.hpp index f825ec7b7914c46f2dd27cc11b2c00f5384acc2b..ba6bdb099fb8a83ec2fb32a72bf10deaf400b9db 100644 --- a/demos/optical_bench/src/hmd_navigation_behavior.hpp +++ b/demos/optical_bench/src/hmd_navigation_behavior.hpp @@ -23,6 +23,7 @@ #ifndef OPTICAL_BENCH_HMD_NAVIGATION_BEHAVIOR_HPP_ #define OPTICAL_BENCH_HMD_NAVIGATION_BEHAVIOR_HPP_ +#include "controller_overlay.hpp" #include "phx/core/engine.hpp" #include "phx/core/entity.hpp" #include "phx/core/scene.hpp" @@ -65,6 +66,7 @@ class HMDNavigationBehavior : public phx::Behavior { phx::VRController* right_controller_; phx::Transform* right_controller_transform_; + phx::ControllerOverlay* controller_overlay_; unsigned int grip_mode = 0; void update_helpers(); @@ -78,6 +80,7 @@ class HMDNavigationBehavior : public phx::Behavior { void updateInsersectionData(); void buttonChange(phx::VRController::ButtonId& id, phx::VRController::ButtonEvent& event); + bool manipulationHelperAttachable(phx::Entity* e); }; #endif // OPTICAL_BENCH_HMD_NAVIGATION_BEHAVIOR_HPP_ diff --git a/resources/models/opticalBench/controller_overlay/Button_Menu.png b/resources/models/opticalBench/controller_overlay/Button_Menu.png new file mode 100644 index 0000000000000000000000000000000000000000..291752bd52497c88c747b014ca0b9b712299fa6b --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/Button_Menu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96871ce30dcaaa426510bf306f374f227f77f61eb291fb420a7924bdf2cb0914 +size 2235 diff --git a/resources/models/opticalBench/controller_overlay/Button_Power.png b/resources/models/opticalBench/controller_overlay/Button_Power.png new file mode 100644 index 0000000000000000000000000000000000000000..97209a1692e29c20ad7d9dc4ae5563385b369391 --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/Button_Power.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b54f6bab64b4cb3cc7f5f112ea4e2eb897aa55615ad8a5b18060407bca82c24 +size 2326 diff --git a/resources/models/opticalBench/controller_overlay/Controller_Buttons.mtl b/resources/models/opticalBench/controller_overlay/Controller_Buttons.mtl new file mode 100644 index 0000000000000000000000000000000000000000..8d8051376a6822a62e84651551a5ecfa3fe44572 --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/Controller_Buttons.mtl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c00107d0edbf4a1a27ac930c3bc3eea7619380592778dc5e1c2121803cb93452 +size 854 diff --git a/resources/models/opticalBench/controller_overlay/Controller_Buttons.obj b/resources/models/opticalBench/controller_overlay/Controller_Buttons.obj new file mode 100644 index 0000000000000000000000000000000000000000..423dc4a2b49c1ae22c2ecdc6e292df938669fb89 --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/Controller_Buttons.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59090fb8e67446b6f68bd1de0e7b21a6639f2a6a035117ca27f82552b5bb80e5 +size 71915 diff --git a/resources/models/opticalBench/controller_overlay/Grip.png b/resources/models/opticalBench/controller_overlay/Grip.png new file mode 100644 index 0000000000000000000000000000000000000000..3178c129b5ce98a7da8c01b1b26c43cc3b7a691e --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/Grip.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76aa8aebe6b6d096b0c4996d8090f9cc65bae64f93cc263d1b0572336a6c0a02 +size 2283 diff --git a/resources/models/opticalBench/controller_overlay/Trackpad.png b/resources/models/opticalBench/controller_overlay/Trackpad.png new file mode 100644 index 0000000000000000000000000000000000000000..48c9f65ad6ace5c3bbfd4ca1b54c258c439eff0f --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/Trackpad.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:988abf00cc3a3a2a18776b75b6931b3986214cce28e03f7f1cb37bb10857c58a +size 4547 diff --git a/resources/models/opticalBench/controller_overlay/Trigger.png b/resources/models/opticalBench/controller_overlay/Trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..509c1683ce7645992bf0c33acf30eb995d5a1432 --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/Trigger.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ec8f758984ba58427ef40c18422207242352ad34915d4df91fd3cc2b86ffa44 +size 2398 diff --git a/resources/models/opticalBench/controller_overlay/menu_images/Grip1.png b/resources/models/opticalBench/controller_overlay/menu_images/Grip1.png new file mode 100644 index 0000000000000000000000000000000000000000..10b92aaa6a8fff098825e580f992ee2bb4ebecd7 --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/menu_images/Grip1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c7e92357d408ec48fe26d3197fe918fec6b73688e878378193c93cbe51cce30 +size 2554 diff --git a/resources/models/opticalBench/controller_overlay/menu_images/Grip2.png b/resources/models/opticalBench/controller_overlay/menu_images/Grip2.png new file mode 100644 index 0000000000000000000000000000000000000000..db58e5bdb6997faeb67a72ed26f998e41da514dd --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/menu_images/Grip2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82ccfb0231d5fc4d2e3d0c7d8d2c6665c16c8a09fdaf508438e917079c5ff016 +size 2642 diff --git a/resources/models/opticalBench/controller_overlay/menu_images/Grip3.png b/resources/models/opticalBench/controller_overlay/menu_images/Grip3.png new file mode 100644 index 0000000000000000000000000000000000000000..b6620e671cc14f3a70a9520414450c551512c6fb --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/menu_images/Grip3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64f0adf5e543db0e1b7bd54a006da59b7465e15cbc9028974f70b73bdec134eb +size 2291 diff --git a/resources/models/opticalBench/controller_overlay/menu_images/Grip_Select.png b/resources/models/opticalBench/controller_overlay/menu_images/Grip_Select.png new file mode 100644 index 0000000000000000000000000000000000000000..c24a637ab9c56a4d92c477a39cebdc4304614a46 --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/menu_images/Grip_Select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90e1a0be70598d991b383a8399cf419d4ef1f6c140d454063084c7587b306166 +size 2430 diff --git a/resources/models/opticalBench/controller_overlay/menu_images/Trackpad_Rotate.png b/resources/models/opticalBench/controller_overlay/menu_images/Trackpad_Rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..3a933c9def0a8efae7078766e3e2b534ae04745d --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/menu_images/Trackpad_Rotate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55227d1718bfa8b363443edeec576ff6540c9d552b985cec76e62e33b6ca6427 +size 38447 diff --git a/resources/models/opticalBench/controller_overlay/menu_images/Trigger_Grab.png b/resources/models/opticalBench/controller_overlay/menu_images/Trigger_Grab.png new file mode 100644 index 0000000000000000000000000000000000000000..e7395bc7f559265d0c72e6906bdbf47a7e84f936 --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/menu_images/Trigger_Grab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78b46ec7b6619b78af851376473b86fe0bef869a27c2741f22a66a2659c2bd0d +size 3585 diff --git a/resources/models/opticalBench/controller_overlay/menu_images/Trigger_Grabbed.png b/resources/models/opticalBench/controller_overlay/menu_images/Trigger_Grabbed.png new file mode 100644 index 0000000000000000000000000000000000000000..f470b3ef054b1e4b28e2a7ebe1dda9dd89fcb076 --- /dev/null +++ b/resources/models/opticalBench/controller_overlay/menu_images/Trigger_Grabbed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd613282eb6d96e017ecf61115e5a074e71020c42ec80891917b96a1261d24be +size 3649 diff --git a/resources/models/opticalBench/controller_overlay/untitled.blend b/resources/models/opticalBench/controller_overlay/untitled.blend new file mode 100644 index 0000000000000000000000000000000000000000..84bc3918ff9f0f97fac915b65cbc23b4cf35d1b4 Binary files /dev/null and b/resources/models/opticalBench/controller_overlay/untitled.blend differ diff --git a/resources/models/opticalBench/controller_overlay/untitled.blend1 b/resources/models/opticalBench/controller_overlay/untitled.blend1 new file mode 100644 index 0000000000000000000000000000000000000000..246bf64ec65e0e9368c27bb50f65e1f96e3b7ba4 Binary files /dev/null and b/resources/models/opticalBench/controller_overlay/untitled.blend1 differ diff --git a/resources/shader/phong.frag b/resources/shader/phong.frag index 58f0eab21f73db2f8f2b5f2e9065b5ce9eb47c44..966591796dd634621d0f55a281709f5c987ad2d8 100644 --- a/resources/shader/phong.frag +++ b/resources/shader/phong.frag @@ -53,6 +53,7 @@ layout(std140, binding = 0) uniform Lights { out vec4 frag_color; void main() { + if(material.texture_toggle.x != 0 && texture(material.ambient_tex , in_tex_coord).a == 0) discard; vec4 color_out = vec4(0.0, 0.0, 0.0, 1.0);