[DEV] better rayscale and add callback on debug display
This commit is contained in:
parent
2ffa87dd73
commit
9fb437ed21
23
ege/Ray.cpp
23
ege/Ray.cpp
@ -9,6 +9,9 @@
|
||||
#include <ege/Ray.h>
|
||||
#include <ege/debug.h>
|
||||
|
||||
#include <BulletDynamics/Dynamics/btDynamicsWorld.h>
|
||||
#include <BulletCollision/CollisionDispatch/btCollisionWorld.h>
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "Ray"
|
||||
|
||||
@ -36,4 +39,22 @@ std::ostream& ege::operator <<(std::ostream& _os, const ege::Ray& _obj) {
|
||||
_os << _obj.getDirection();
|
||||
_os << "}";
|
||||
return _os;
|
||||
}
|
||||
}
|
||||
|
||||
void ege::Ray::testRay(ege::physics::Engine& _engine) {
|
||||
vec3 start = m_origin;
|
||||
vec3 stop = m_origin+m_direction*1000.0f;
|
||||
// Start and End are vectors
|
||||
btCollisionWorld::ClosestRayResultCallback rayCallback(start, stop);
|
||||
EGE_ERROR("Process Raycast :");
|
||||
// Perform raycast
|
||||
_engine.getDynamicWorld()->rayTest(start, stop, rayCallback);
|
||||
if(rayCallback.hasHit()) {
|
||||
vec3 end = rayCallback.m_hitPointWorld;
|
||||
vec3 normal = rayCallback.m_hitNormalWorld;
|
||||
EGE_ERROR(" hit at point=" << end << " normal=" << normal);
|
||||
} else {
|
||||
EGE_ERROR(" No Hit");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,10 @@
|
||||
#define __EGE_RAY_H__
|
||||
|
||||
#include <etk/math/Vector3D.h>
|
||||
namespace ege {
|
||||
class Ray;
|
||||
};
|
||||
#include <ege/physics/Engine.h>
|
||||
|
||||
namespace ege {
|
||||
class Ray {
|
||||
@ -61,6 +65,8 @@ namespace ege {
|
||||
* @param[in] _direction The ray's direction.
|
||||
*/
|
||||
void set(const vec3& _origin, const vec3& _direction);
|
||||
public:
|
||||
void testRay(ege::physics::Engine& _engine);
|
||||
};
|
||||
std::ostream& operator <<(std::ostream& _os, const ege::Ray& _obj);
|
||||
};
|
||||
|
@ -9,6 +9,11 @@
|
||||
#ifndef __EGE_PHYSICS_ENGINE_H__
|
||||
#define __EGE_PHYSICS_ENGINE_H__
|
||||
|
||||
namespace ege {
|
||||
namespace physics {
|
||||
class Engine;
|
||||
};
|
||||
};
|
||||
#include <etk/types.h>
|
||||
#include <etk/math/Vector3D.h>
|
||||
#include <etk/math/Matrix4.h>
|
||||
|
@ -29,9 +29,15 @@
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "Scene"
|
||||
namespace etk {
|
||||
template<> std::string to_string<std::shared_ptr<ewol::resource::Colored3DObject> >(const std::shared_ptr<ewol::resource::Colored3DObject>& _value) {
|
||||
return "{{ERROR}}";
|
||||
}
|
||||
};
|
||||
|
||||
ege::widget::Scene::Scene() :
|
||||
m_cameraName("default") {
|
||||
signalDisplayDebug(*this, "drawDebug", "Call to draw debug after all elements"),
|
||||
m_cameraName("default") {
|
||||
addObjectType("ege::widget::Scene");
|
||||
}
|
||||
|
||||
@ -114,6 +120,7 @@ void ege::widget::Scene::onDraw() {
|
||||
for (int32_t iii=m_displayElementOrdered.size()-1; iii >= 0; iii--) {
|
||||
m_displayElementOrdered[iii].element->drawDebug(m_debugDrawProperty, camera);
|
||||
}
|
||||
signalDisplayDebug.emit(m_debugDrawProperty);
|
||||
} else {
|
||||
EGE_WARNING("No Dynamic world ...");
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ class btDynamicsWorld;
|
||||
#include <LinearMath/btScalar.h>
|
||||
class btVector3;
|
||||
#include <ewol/widget/Widget.h>
|
||||
#include <ewol/signal/Signal.h>
|
||||
|
||||
namespace ege {
|
||||
namespace widget {
|
||||
@ -39,6 +40,8 @@ namespace ege {
|
||||
protected:
|
||||
std::shared_ptr<ege::Environement> m_env;
|
||||
std::shared_ptr<ewol::resource::Colored3DObject> m_debugDrawProperty;
|
||||
public:
|
||||
ewol::Signal<std::shared_ptr<ewol::resource::Colored3DObject>/*, std::shared_ptr<ege::Camera>*/> signalDisplayDebug;
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor of the widget classes
|
||||
|
@ -82,6 +82,7 @@ void appl::Windows::init() {
|
||||
tmpWidget->setFill(bvec2(true,true));
|
||||
tmpWidget->setCamera("basic");
|
||||
setSubWidget(tmpWidget);
|
||||
tmpWidget->signalDisplayDebug.bind(shared_from_this(), &appl::Windows::onCallbackDisplayDebug);
|
||||
}
|
||||
std::shared_ptr<ege::resource::Mesh> myMesh;
|
||||
// Create an external box :
|
||||
@ -151,26 +152,22 @@ bool appl::Windows::onEventInput(const ewol::event::Input& _event) {
|
||||
vec2 pos = relativePosition(_event.getPos());
|
||||
ege::Ray ray = m_camera->getRayFromScreenPosition(pos, m_size);
|
||||
APPL_INFO("pos=" << pos << " ray = " << ray);
|
||||
ray.testRay(m_env->getPhysicEngine());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/*
|
||||
btCollisionWorld::ClosestRayResultCallback RayCallback(
|
||||
btVector3(out_origin.x, out_origin.y, out_origin.z),
|
||||
btVector3(out_direction.x, out_direction.y, out_direction.z)
|
||||
);
|
||||
dynamicsWorld->rayTest(
|
||||
btVector3(out_origin.x, out_origin.y, out_origin.z),
|
||||
btVector3(out_direction.x, out_direction.y, out_direction.z),
|
||||
RayCallback
|
||||
);
|
||||
|
||||
if(RayCallback.hasHit()) {
|
||||
std::ostringstream oss;
|
||||
oss << "mesh " << (int)RayCallback.m_collisionObject->getUserPointer();
|
||||
message = oss.str();
|
||||
}else{
|
||||
message = "background";
|
||||
|
||||
void appl::Windows::onCallbackDisplayDebug(const std::shared_ptr<ewol::resource::Colored3DObject>& _obj) {
|
||||
EWOL_INFO("draw user debug");
|
||||
etk::Color<float> tmpColor(0.0, 1.0, 0.0, 0.3);
|
||||
std::vector<vec3> vertices;
|
||||
vertices.push_back(vec3(100,0,0));
|
||||
vertices.push_back(vec3(100,100,0));
|
||||
vertices.push_back(vec3(100,100,100));
|
||||
mat4 mat;
|
||||
mat.identity();
|
||||
mat.translate(vec3(0,0,0));
|
||||
_obj->draw(vertices, tmpColor, mat);
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <ewol/widget/Windows.h>
|
||||
#include <ege/Environement.h>
|
||||
#include <ege/camera/View.h>
|
||||
#include <ewol/resource/Colored3DObject.h>
|
||||
|
||||
namespace appl {
|
||||
class Windows : public ewol::widget::Windows {
|
||||
@ -27,6 +28,7 @@ namespace appl {
|
||||
private:
|
||||
void onCallbackPeriodicUpdateCamera(const ewol::event::Time& _event);
|
||||
bool onEventInput(const ewol::event::Input& _event);
|
||||
void onCallbackDisplayDebug(const std::shared_ptr<ewol::resource::Colored3DObject>& _obj);
|
||||
};
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user