Support mesh intersection for camera orbit (#982)
* wip support for mesh intersection with intersector bus * WIP camera mesh intersection orbit logic * remove unneeded template argument * add bus connect/disconnect * fix intersection logic * small updates, additional comments, some tidy-up * update formatting options slightly * use aznumeric_cast * temp workaround for negative distances with RayIntersection
This commit is contained in:
committed by
GitHub
parent
c9f7cd03bb
commit
36ceff84c9
@@ -13,11 +13,13 @@
|
||||
#pragma once
|
||||
|
||||
#include <AzCore/Component/Component.h>
|
||||
#include <AzCore/Component/ComponentBus.h>
|
||||
#include <AzCore/Component/TransformBus.h>
|
||||
#include <AzCore/Component/NonUniformScaleBus.h>
|
||||
|
||||
#include <AtomCore/Instance/InstanceDatabase.h>
|
||||
|
||||
#include <AzFramework/Render/GeometryIntersectionBus.h>
|
||||
#include <AzFramework/Visibility/BoundsBus.h>
|
||||
|
||||
#include <Atom/RPI.Public/Model/Model.h>
|
||||
@@ -32,9 +34,7 @@ namespace AZ
|
||||
{
|
||||
namespace Render
|
||||
{
|
||||
/**
|
||||
* A configuration structure for the MeshComponentController
|
||||
*/
|
||||
//! A configuration structure for the MeshComponentController
|
||||
class MeshComponentConfig final
|
||||
: public AZ::ComponentConfig
|
||||
{
|
||||
@@ -57,6 +57,7 @@ namespace AZ
|
||||
class MeshComponentController final
|
||||
: private MeshComponentRequestBus::Handler
|
||||
, public AzFramework::BoundsRequestBus::Handler
|
||||
, public AzFramework::RenderGeometry::IntersectionRequestBus::Handler
|
||||
, private TransformNotificationBus::Handler
|
||||
, private MaterialReceiverRequestBus::Handler
|
||||
, private MaterialComponentNotificationBus::Handler
|
||||
@@ -77,7 +78,7 @@ namespace AZ
|
||||
MeshComponentController() = default;
|
||||
MeshComponentController(const MeshComponentConfig& config);
|
||||
|
||||
void Activate(AZ::EntityId entityId);
|
||||
void Activate(const AZ::EntityComponentIdPair& entityComponentIdPair);
|
||||
void Deactivate();
|
||||
void SetConfiguration(const MeshComponentConfig& config);
|
||||
const MeshComponentConfig& GetConfiguration() const;
|
||||
@@ -103,10 +104,13 @@ namespace AZ
|
||||
void SetVisibility(bool visible) override;
|
||||
bool GetVisibility() const override;
|
||||
|
||||
// BoundsRequestBus and MeshComponentRequestBus ...
|
||||
// BoundsRequestBus and MeshComponentRequestBus overrides ...
|
||||
AZ::Aabb GetWorldBounds() override;
|
||||
AZ::Aabb GetLocalBounds() override;
|
||||
|
||||
// IntersectionRequestBus overrides ...
|
||||
AzFramework::RenderGeometry::RayResult RenderGeometryIntersect(const AzFramework::RenderGeometry::RayRequest& ray) override;
|
||||
|
||||
// TransformNotificationBus::Handler overrides ...
|
||||
void OnTransformChanged(const AZ::Transform& local, const AZ::Transform& world) override;
|
||||
|
||||
@@ -134,7 +138,7 @@ namespace AZ
|
||||
Render::MeshFeatureProcessorInterface* m_meshFeatureProcessor = nullptr;
|
||||
Render::MeshFeatureProcessorInterface::MeshHandle m_meshHandle;
|
||||
TransformInterface* m_transformInterface = nullptr;
|
||||
AZ::EntityId m_entityId;
|
||||
AZ::EntityComponentIdPair m_entityComponentIdPair;
|
||||
bool m_isVisible = true;
|
||||
MeshComponentConfig m_configuration;
|
||||
AZ::Vector3 m_cachedNonUniformScale = AZ::Vector3::CreateOne();
|
||||
|
||||
Reference in New Issue
Block a user