diff --git a/ege/CollisionShapeCreator.cpp b/ege/CollisionShapeCreator.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/ege/CollisionShapeCreator.hpp b/ege/CollisionShapeCreator.hpp deleted file mode 100644 index e69de29..0000000 diff --git a/ege/physics/Component.cpp b/ege/physics/Component.cpp index 9c8bba1..ad3a6b1 100644 --- a/ege/physics/Component.cpp +++ b/ege/physics/Component.cpp @@ -80,7 +80,7 @@ void ege::physics::Component::generate() { continue; } switch (it->getType()) { - case ege::physics::Shape::type::box : { + case ege::physics::Shape::type::box: { EGE_DEBUG(" Box"); const ege::physics::shape::Box* tmpElement = it->toBox(); if (tmpElement == nullptr) { @@ -106,15 +106,15 @@ void ege::physics::Component::generate() { m_listProxyShape.push_back(proxyShape); break; } - case ege::physics::Shape::type::cylinder : { + case ege::physics::Shape::type::cylinder: { EGE_DEBUG(" Cylinder"); const ege::physics::shape::Cylinder* tmpElement = it->toCylinder(); if (tmpElement == nullptr) { EGE_ERROR(" Cylinder ==> can not cast in Cylinder"); continue; } - // Create the box shape - rp3d::CylinderShape* shape = new rp3d::CylinderShape(tmpElement->getSize().x(), tmpElement->getSize().y()); + // Create the Cylinder shape + rp3d::CylinderShape* shape = new rp3d::CylinderShape(tmpElement->getRadius(), tmpElement->getSize()); rp3d::Vector3 position(it->getOrigin().x(), it->getOrigin().y(), it->getOrigin().z()); @@ -127,49 +127,49 @@ void ege::physics::Component::generate() { m_listProxyShape.push_back(proxyShape); break; } - case ege::physics::Shape::type::capsule : { + case ege::physics::Shape::type::capsule: { EGE_DEBUG(" Capsule"); const ege::physics::shape::Capsule* tmpElement = it->toCapsule(); if (tmpElement == nullptr) { EGE_ERROR(" Capsule ==> can not cast in Capsule"); continue; } - /* - btCollisionShape* tmpShape = new btCapsuleShape(tmpElement->getRadius(), tmpElement->getHeight()); - if (tmpShape != nullptr) { - if (outputShape == nullptr) { - return tmpShape; - } else { - vec4 qqq = tmpElement->getQuaternion(); - const btTransform localTransform(btQuaternion(qqq.x(),qqq.y(),qqq.z(),qqq.w()), tmpElement->getOrigin()); - outputShape->addChildShape(localTransform, tmpShape); - } - } - */ + // Create the Capsule shape + rp3d::CapsuleShape* shape = new rp3d::CapsuleShape(tmpElement->getRadius(), tmpElement->getSize()); + rp3d::Vector3 position(it->getOrigin().x(), + it->getOrigin().y(), + it->getOrigin().z()); + rp3d::Quaternion orientation(it->getQuaternion().x(), + it->getQuaternion().y(), + it->getQuaternion().z(), + it->getQuaternion().w()); + rp3d::Transform transform(position, orientation); + rp3d::ProxyShape* proxyShape = m_rigidBody->addCollisionShape(shape, transform, it->getMass()); + m_listProxyShape.push_back(proxyShape); break; } - case ege::physics::Shape::type::cone : { + case ege::physics::Shape::type::cone: { EGE_DEBUG(" Cone"); const ege::physics::shape::Cone* tmpElement = it->toCone(); if (tmpElement == nullptr) { EGE_ERROR(" Cone ==> can not cast in Cone"); continue; } - /* - btCollisionShape* tmpShape = new btConeShape(tmpElement->getRadius(), tmpElement->getHeight()); - if (tmpShape != nullptr) { - if (outputShape == nullptr) { - return tmpShape; - } else { - vec4 qqq = tmpElement->getQuaternion(); - const btTransform localTransform(btQuaternion(qqq.x(),qqq.y(),qqq.z(),qqq.w()), tmpElement->getOrigin()); - outputShape->addChildShape(localTransform, tmpShape); - } - } - */ + // Create the Cone shape + rp3d::ConeShape* shape = new rp3d::ConeShape(tmpElement->getRadius(), tmpElement->getSize()); + rp3d::Vector3 position(it->getOrigin().x(), + it->getOrigin().y(), + it->getOrigin().z()); + rp3d::Quaternion orientation(it->getQuaternion().x(), + it->getQuaternion().y(), + it->getQuaternion().z(), + it->getQuaternion().w()); + rp3d::Transform transform(position, orientation); + rp3d::ProxyShape* proxyShape = m_rigidBody->addCollisionShape(shape, transform, it->getMass()); + m_listProxyShape.push_back(proxyShape); break; } - case ege::physics::Shape::type::sphere : { + case ege::physics::Shape::type::sphere: { EGE_DEBUG(" Sphere"); const ege::physics::shape::Sphere* tmpElement = it->toSphere(); if (tmpElement == nullptr) { @@ -188,21 +188,9 @@ void ege::physics::Component::generate() { rp3d::Transform transform(position, orientation); rp3d::ProxyShape* proxyShape = m_rigidBody->addCollisionShape(shape, transform, it->getMass()); m_listProxyShape.push_back(proxyShape); - /* - btCollisionShape* tmpShape = new btSphereShape(tmpElement->getRadius()); - if (tmpShape != nullptr) { - if (outputShape == nullptr) { - return tmpShape; - } else { - vec4 qqq = tmpElement->getQuaternion(); - const btTransform localTransform(btQuaternion(qqq.x(),qqq.y(),qqq.z(),qqq.w()), tmpElement->getOrigin()); - outputShape->addChildShape(localTransform, tmpShape); - } - } - */ break; } - case ege::physics::Shape::type::convexHull : { + case ege::physics::Shape::type::convexHull: { EGE_DEBUG(" convexHull"); const ege::physics::shape::ConvexHull* tmpElement = it->toConvexHull(); if (tmpElement == nullptr) { @@ -225,7 +213,7 @@ void ege::physics::Component::generate() { } default : EGE_DEBUG(" ???"); - // TODO : UNKNOW type ... + // TODO: UNKNOW type ... break; } } @@ -352,7 +340,7 @@ void ege::physics::Component::drawShape(ememory::SharedPtrdrawSquare(tmpElement->getSize(), transformationMatrixLocal, tmpColor); break; } - case ege::physics::Shape::type::cylinder : { + case ege::physics::Shape::type::cylinder: { EGE_DEBUG(" Cylinder"); const ege::physics::shape::Cylinder* tmpElement = it->toCylinder(); if (tmpElement == nullptr) { @@ -364,52 +352,40 @@ void ege::physics::Component::drawShape(ememory::SharedPtrdrawSphere(radius, 10, 10, _transformationMatrix, tmpColor); + _draw->drawCylinder(tmpElement->getRadius(), tmpElement->getSize(), 10, 10, transformationMatrixLocal, tmpColor); break; } - case ege::physics::Shape::type::capsule : { + case ege::physics::Shape::type::capsule: { EGE_DEBUG(" Capsule"); const ege::physics::shape::Capsule* tmpElement = it->toCapsule(); if (tmpElement == nullptr) { EGE_ERROR(" Capsule ==> can not cast in Capsule"); continue; } - /* - btCollisionShape* tmpShape = new btCapsuleShape(tmpElement->getRadius(), tmpElement->getHeight()); - if (tmpShape != nullptr) { - if (outputShape == nullptr) { - return tmpShape; - } else { - vec4 qqq = tmpElement->getQuaternion(); - const btTransform localTransform(btQuaternion(qqq.x(),qqq.y(),qqq.z(),qqq.w()), tmpElement->getOrigin()); - outputShape->addChildShape(localTransform, tmpShape); - } - } - */ + etk::Transform3D transformLocal(it->getOrigin(), it->getOrientation()); + transformLocal.getOpenGLMatrix(mmm); + mat4 transformationMatrixLocal(mmm); + transformationMatrixLocal.transpose(); + transformationMatrixLocal = transformationMatrix * transformationMatrixLocal; + _draw->drawCapsule(tmpElement->getRadius(), tmpElement->getSize(), 10, 10, transformationMatrixLocal, tmpColor); break; } - case ege::physics::Shape::type::cone : { + case ege::physics::Shape::type::cone: { EGE_DEBUG(" Cone"); const ege::physics::shape::Cone* tmpElement = it->toCone(); if (tmpElement == nullptr) { EGE_ERROR(" Cone ==> can not cast in Cone"); continue; } - /* - btCollisionShape* tmpShape = new btConeShape(tmpElement->getRadius(), tmpElement->getHeight()); - if (tmpShape != nullptr) { - if (outputShape == nullptr) { - return tmpShape; - } else { - vec4 qqq = tmpElement->getQuaternion(); - const btTransform localTransform(btQuaternion(qqq.x(),qqq.y(),qqq.z(),qqq.w()), tmpElement->getOrigin()); - outputShape->addChildShape(localTransform, tmpShape); - } - } - */ + etk::Transform3D transformLocal(it->getOrigin(), it->getOrientation()); + transformLocal.getOpenGLMatrix(mmm); + mat4 transformationMatrixLocal(mmm); + transformationMatrixLocal.transpose(); + transformationMatrixLocal = transformationMatrix * transformationMatrixLocal; + _draw->drawCone(tmpElement->getRadius(), tmpElement->getSize(), 10, 10, transformationMatrixLocal, tmpColor); break; } - case ege::physics::Shape::type::sphere : { + case ege::physics::Shape::type::sphere: { EGE_DEBUG(" Sphere"); const ege::physics::shape::Sphere* tmpElement = it->toSphere(); if (tmpElement == nullptr) { @@ -424,7 +400,7 @@ void ege::physics::Component::drawShape(ememory::SharedPtrdrawSphere(tmpElement->getRadius(), 10, 10, transformationMatrixLocal, tmpColor); break; } - case ege::physics::Shape::type::convexHull : { + case ege::physics::Shape::type::convexHull: { EGE_DEBUG(" convexHull"); const ege::physics::shape::ConvexHull* tmpElement = it->toConvexHull(); if (tmpElement == nullptr) { @@ -447,7 +423,7 @@ void ege::physics::Component::drawShape(ememory::SharedPtr& _color=etk::color::green, int32_t _lats = 10, int32_t _longs = 10); - static ememory::SharedPtr createCylinder(float _size=1.0f, + static ememory::SharedPtr createCylinder(float _radius = 1.0f, + float _size = 1.0f, const std::string& _materialName="basics", - const etk::Color& _color=etk::color::green); + const etk::Color& _color=etk::color::green, + int32_t _lats = 10, + int32_t _longs = 10); + static ememory::SharedPtr createCapsule(float _radius = 1.0f, + float _size = 1.0f, + const std::string& _materialName="basics", + const etk::Color& _color=etk::color::green, + int32_t _lats = 10, + int32_t _longs = 10); + static ememory::SharedPtr createCone(float _radius = 1.0f, + float _size = 1.0f, + const std::string& _materialName="basics", + const etk::Color& _color=etk::color::green, + int32_t _lats = 10, + int32_t _longs = 10); public: /** * @not_in_doc diff --git a/ege/resource/MeshCapsule.cpp b/ege/resource/MeshCapsule.cpp new file mode 100644 index 0000000..225f876 --- /dev/null +++ b/ege/resource/MeshCapsule.cpp @@ -0,0 +1,104 @@ +/** @file + * @author Edouard DUPIN + * @copyright 2011, Edouard DUPIN, all right reserved + * @license MPL v2.0 (see license file) + */ + +#include +#include + +ememory::SharedPtr ege::resource::Mesh::createCapsule(float _radius, float _size, const std::string& _materialName, const etk::Color& _color, int32_t _lats, int32_t _longs) { + EGE_VERBOSE(" create a capsule _size=" << _size << " _materialName=" << _materialName << " _color=" << _color); + ememory::SharedPtr out = ege::resource::Mesh::create("---", "DATA:color3.prog"); + if (out != nullptr) { + ememory::SharedPtr material = ememory::makeShared(); + // set the element material properties : + material->setAmbientFactor(vec4(1,1,1,1)); + material->setDiffuseFactor(vec4(0,0,0,1)); + material->setSpecularFactor(vec4(0,0,0,1)); + material->setShininess(1); + material->setRenderMode(gale::openGL::renderMode::triangle); + out->addMaterial(_materialName, material); + + out->addFaceIndexing(_materialName); + + // center to border (TOP) + float offset = _size*0.5f; + for(int32_t iii=_lats/2+1; iii<=_lats; ++iii) { + float lat0 = M_PI * (-0.5f + float(iii - 1) / _lats); + float y0 = _radius*sin(lat0); + float yr0 = _radius*cos(lat0); + + float lat1 = M_PI * (-0.5f + float(iii) / _lats); + float y1 = _radius*sin(lat1); + float yr1 = _radius*cos(lat1); + + for(int32_t jjj=0; jjj<_longs; ++jjj) { + float lng = 2.0f * M_PI * float(jjj - 1) / _longs; + float x = cos(lng); + float z = sin(lng); + vec3 v1 = vec3(x * yr1, y1+offset, z * yr1); + vec3 v4 = vec3(x * yr0, y0+offset, z * yr0); + + lng = 2 * M_PI * float(jjj) / _longs; + x = cos(lng); + z = sin(lng); + vec3 v2 = vec3(x * yr1, y1+offset, z * yr1); + vec3 v3 = vec3(x * yr0, y0+offset, z * yr0); + out->addQuad(_materialName, v1, v2, v3, v4, _color); + } + } + // Cylinder + for(int32_t jjj=0; jjj<_longs; ++jjj) { + float lng = 2.0f * M_PI * float(jjj - 1) / _longs; + + float y = _size*0.5f; + + float x = cos(lng)*_radius; + float z = sin(lng)*_radius; + vec3 v2 = vec3(x, y, z); + vec3 v2b = vec3(x, -y, z); + + lng = 2.0f * M_PI * float(jjj) / _longs; + x = cos(lng)*_radius; + z = sin(lng)*_radius; + vec3 v3 = vec3(x, y, z); + vec3 v3b = vec3(x, -y, z); + + out->addQuad(_materialName, v2, v3, v3b, v2b, _color); + } + // center to border (BUTTOM) + offset = -_size*0.5f; + for(int32_t iii=0; iii<=_lats/2; ++iii) { + float lat0 = M_PI * (-0.5f + float(iii - 1) / _lats); + float y0 = _radius*sin(lat0); + float yr0 = _radius*cos(lat0); + + float lat1 = M_PI * (-0.5f + float(iii) / _lats); + float y1 = _radius*sin(lat1); + float yr1 = _radius*cos(lat1); + + for(int32_t jjj=0; jjj<_longs; ++jjj) { + float lng = 2.0f * M_PI * float(jjj - 1) / _longs; + float x = cos(lng); + float z = sin(lng); + vec3 v1 = vec3(x * yr1, y1+offset, z * yr1); + vec3 v4 = vec3(x * yr0, y0+offset, z * yr0); + + lng = 2 * M_PI * float(jjj) / _longs; + x = cos(lng); + z = sin(lng); + vec3 v2 = vec3(x * yr1, y1+offset, z * yr1); + vec3 v3 = vec3(x * yr0, y0+offset, z * yr0); + out->addQuad(_materialName, v1, v2, v3, v4, _color); + } + } + out->setNormalMode(ege::resource::Mesh::normalMode::face); + out->calculateNormaleFace(_materialName); + // generate the VBO + out->generateVBO(); + } else { + EGE_ERROR("can not create the basic mesh interface"); + } + return out; +} \ No newline at end of file diff --git a/ege/resource/MeshCone.cpp b/ege/resource/MeshCone.cpp new file mode 100644 index 0000000..c0b1e3c --- /dev/null +++ b/ege/resource/MeshCone.cpp @@ -0,0 +1,64 @@ +/** @file + * @author Edouard DUPIN + * @copyright 2011, Edouard DUPIN, all right reserved + * @license MPL v2.0 (see license file) + */ + +#include +#include + +ememory::SharedPtr ege::resource::Mesh::createCone(float _radius, float _size, const std::string& _materialName, const etk::Color& _color, int32_t _lats, int32_t _longs) { + EGE_VERBOSE(" create a cylinder _size=" << _size << " _materialName=" << _materialName << " _color=" << _color); + ememory::SharedPtr out = ege::resource::Mesh::create("---", "DATA:color3.prog"); + if (out != nullptr) { + ememory::SharedPtr material = ememory::makeShared(); + // set the element material properties : + material->setAmbientFactor(vec4(1,1,1,1)); + material->setDiffuseFactor(vec4(0,0,0,1)); + material->setSpecularFactor(vec4(0,0,0,1)); + material->setShininess(1); + material->setRenderMode(gale::openGL::renderMode::triangle); + out->addMaterial(_materialName, material); + + out->addFaceIndexing(_materialName); + + // center to border (TOP) + for(int32_t jjj=0; jjj<_longs; ++jjj) { + float lng = 2.0f * M_PI * float(jjj - 1) / _longs; + vec3 v1 = vec3(0.0f, -_size/2, 0.0f); + + float x = cos(lng)*_radius; + float z = sin(lng)*_radius; + vec3 v2 = vec3(x, _size/2, z); + + lng = 2.0f * M_PI * float(jjj) / _longs; + x = cos(lng)*_radius; + z = sin(lng)*_radius; + vec3 v3 = vec3(x, _size/2, z); + out->addTriangle(_materialName, v1, v2, v3, _color); + } + // center to border (BUTTOM) + for(int32_t jjj=0; jjj<_longs; ++jjj) { + float lng = 2.0f * M_PI * float(jjj - 1) / _longs; + + vec3 v1 = vec3(0.0f, _size/2, 0.0f); + + float x = cos(lng)*_radius; + float z = sin(lng)*_radius; + vec3 v2 = vec3(x, _size/2, z); + + lng = 2.0f * M_PI * float(jjj) / _longs; + x = cos(lng)*_radius; + z = sin(lng)*_radius; + vec3 v3 = vec3(x, _size/2, z); + out->addTriangle(_materialName, v1, v3, v2, _color); + } + out->setNormalMode(ege::resource::Mesh::normalMode::face); + out->calculateNormaleFace(_materialName); + // generate the VBO + out->generateVBO(); + } else { + EGE_ERROR("can not create the basic mesh interface"); + } + return out; +} \ No newline at end of file diff --git a/ege/resource/MeshCylinder.cpp b/ege/resource/MeshCylinder.cpp index 3a0886b..187e7af 100644 --- a/ege/resource/MeshCylinder.cpp +++ b/ege/resource/MeshCylinder.cpp @@ -7,8 +7,8 @@ #include #include -ememory::SharedPtr ege::resource::Mesh::createCylinder(float _size, const std::string& _materialName, const etk::Color& _color) { - EGE_VERBOSE(" create a cube _size=" << _size << " _materialName=" << _materialName << " _color=" << _color); +ememory::SharedPtr ege::resource::Mesh::createCylinder(float _radius, float _size, const std::string& _materialName, const etk::Color& _color, int32_t _lats, int32_t _longs) { + EGE_VERBOSE(" create a cylinder _size=" << _size << " _materialName=" << _materialName << " _color=" << _color); ememory::SharedPtr out = ege::resource::Mesh::create("---", "DATA:color3.prog"); if (out != nullptr) { ememory::SharedPtr material = ememory::makeShared(); @@ -22,12 +22,59 @@ ememory::SharedPtr ege::resource::Mesh::createCylinder(floa out->addFaceIndexing(_materialName); - out->addQuad(_materialName, vec3(-1,-1,-1)*_size, vec3(-1, 1,-1)*_size, vec3( 1, 1,-1)*_size, vec3( 1,-1,-1)*_size, _color); - out->addQuad(_materialName, vec3(-1, 1, 1)*_size, vec3(-1,-1, 1)*_size, vec3( 1,-1, 1)*_size, vec3( 1, 1, 1)*_size, _color); - out->addQuad(_materialName, vec3(-1,-1,-1)*_size, vec3(-1,-1, 1)*_size, vec3(-1, 1, 1)*_size, vec3(-1, 1,-1)*_size, _color); - out->addQuad(_materialName, vec3( 1,-1, 1)*_size, vec3( 1,-1,-1)*_size, vec3( 1, 1,-1)*_size, vec3( 1, 1, 1)*_size, _color); - out->addQuad(_materialName, vec3(-1,-1, 1)*_size, vec3(-1,-1,-1)*_size, vec3( 1,-1,-1)*_size, vec3( 1,-1, 1)*_size, _color); - out->addQuad(_materialName, vec3(-1, 1,-1)*_size, vec3(-1, 1, 1)*_size, vec3( 1, 1, 1)*_size, vec3( 1, 1,-1)*_size, _color); + // center to border (TOP) + for(int32_t jjj=0; jjj<_longs; ++jjj) { + float lng = 2.0f * M_PI * float(jjj - 1) / _longs; + + float y = _size*0.5f; + vec3 v1 = vec3(0.0f, y, 0.0f); + + float x = cos(lng)*_radius; + float z = sin(lng)*_radius; + vec3 v2 = vec3(x, y, z); + + lng = 2.0f * M_PI * float(jjj) / _longs; + x = cos(lng)*_radius; + z = sin(lng)*_radius; + vec3 v3 = vec3(x, y, z); + out->addTriangle(_materialName, v1, v3, v2, _color); + } + // Cylinder + for(int32_t jjj=0; jjj<_longs; ++jjj) { + float lng = 2.0f * M_PI * float(jjj - 1) / _longs; + + float y = _size*0.5f; + + float x = cos(lng)*_radius; + float z = sin(lng)*_radius; + vec3 v2 = vec3(x, y, z); + vec3 v2b = vec3(x, -y, z); + + lng = 2.0f * M_PI * float(jjj) / _longs; + x = cos(lng)*_radius; + z = sin(lng)*_radius; + vec3 v3 = vec3(x, y, z); + vec3 v3b = vec3(x, -y, z); + + out->addQuad(_materialName, v2, v3, v3b, v2b, _color); + } + // center to border (BUTTOM) + for(int32_t jjj=0; jjj<_longs; ++jjj) { + float lng = 2.0f * M_PI * float(jjj - 1) / _longs; + + float y = _size*-0.5f; + vec3 v1 = vec3(0.0f, y, 0.0f); + + float x = cos(lng)*_radius; + float z = sin(lng)*_radius; + vec3 v2 = vec3(x, y, z); + + lng = 2.0f * M_PI * float(jjj) / _longs; + x = cos(lng)*_radius; + z = sin(lng)*_radius; + vec3 v3 = vec3(x, y, z); + out->addTriangle(_materialName, v1, v2, v3, _color); + } out->setNormalMode(ege::resource::Mesh::normalMode::face); out->calculateNormaleFace(_materialName); // generate the VBO diff --git a/ege/resource/MeshSphere.cpp b/ege/resource/MeshSphere.cpp index b2993b6..f837edb 100644 --- a/ege/resource/MeshSphere.cpp +++ b/ege/resource/MeshSphere.cpp @@ -21,31 +21,30 @@ ememory::SharedPtr ege::resource::Mesh::createSphere(float out->addMaterial(_materialName, material); out->addFaceIndexing(_materialName); - for(int32_t iii=0; iii<=_lats; ++iii) { float lat0 = M_PI * (-0.5f + float(iii - 1) / _lats); - float z0 = _radius*sin(lat0); - float zr0 = _radius*cos(lat0); + float y0 = _radius*sin(lat0); + float yr0 = _radius*cos(lat0); float lat1 = M_PI * (-0.5f + float(iii) / _lats); - float z1 = _radius*sin(lat1); - float zr1 = _radius*cos(lat1); + float y1 = _radius*sin(lat1); + float yr1 = _radius*cos(lat1); for(int32_t jjj=0; jjj<_longs; ++jjj) { float lng = 2.0f * M_PI * float(jjj - 1) / _longs; float x = cos(lng); - float y = sin(lng); - vec3 v1 = vec3(x * zr1, y * zr1, z1); - vec3 v4 = vec3(x * zr0, y * zr0, z0); + float z = sin(lng); + vec3 v1 = vec3(x * yr1, y1, z * yr1); + vec3 v4 = vec3(x * yr0, y0, z * yr0); lng = 2 * M_PI * float(jjj) / _longs; x = cos(lng); - y = sin(lng); - vec3 v2 = vec3(x * zr1, y * zr1, z1); - vec3 v3 = vec3(x * zr0, y * zr0, z0); + z = sin(lng); + vec3 v2 = vec3(x * yr1, y1, z * yr1); + vec3 v3 = vec3(x * yr0, y0, z * yr0); - out->addTriangle(_materialName, v1, v3, v2, _color); - out->addTriangle(_materialName, v1, v4, v3, _color); + out->addTriangle(_materialName, v1, v2, v3, _color); + out->addTriangle(_materialName, v1, v3, v4, _color); } } out->setNormalMode(ege::resource::Mesh::normalMode::face); diff --git a/lutin_ege.py b/lutin_ege.py index bbce8c3..38021ca 100644 --- a/lutin_ege.py +++ b/lutin_ege.py @@ -54,6 +54,8 @@ def configure(target, my_module): 'ege/resource/MeshCube.cpp', 'ege/resource/MeshSphere.cpp', 'ege/resource/MeshCylinder.cpp', + 'ege/resource/MeshCapsule.cpp', + 'ege/resource/MeshCone.cpp', 'ege/resource/MeshObj.cpp', 'ege/resource/ParticuleMesh.cpp', 'ege/resource/tools/icoSphere.cpp', diff --git a/sample/Collision/appl/Windows.cpp b/sample/Collision/appl/Windows.cpp index 56e1c23..cf35882 100644 --- a/sample/Collision/appl/Windows.cpp +++ b/sample/Collision/appl/Windows.cpp @@ -18,6 +18,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -189,6 +192,75 @@ void appl::Windows::init() { // add it .. m_env->addEntity(element); } + myMesh = ege::resource::Mesh::createCylinder(4, 8, "basics", etk::color::blue); + if (myMesh != nullptr) { + ememory::SharedPtr element = ememory::makeShared(m_env); + // add all component: + // 1st Position component: + etk::Transform3D transform(vec3(20,10,10), etk::Quaternion::identity()); + //ememory::SharedPtr componentPosition = ememory::makeShared(transform); + //element->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + element->addComponent(componentRender); + // 3rd some physic: + ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); + ememory::SharedPtr physic = ememory::makeShared(); + physic->setRadius(4.01); + physic->setSize(8.01); + physic->setMass(500000); + componentPhysics->addShape(physic); + componentPhysics->generate(); + element->addComponent(componentPhysics); + // add it .. + m_env->addEntity(element); + } + myMesh = ege::resource::Mesh::createCapsule(4, 8, "basics", etk::color::purple); + if (myMesh != nullptr) { + ememory::SharedPtr element = ememory::makeShared(m_env); + // add all component: + // 1st Position component: + etk::Transform3D transform(vec3(20,-10,-10), etk::Quaternion::identity()); + //ememory::SharedPtr componentPosition = ememory::makeShared(transform); + //element->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + element->addComponent(componentRender); + // 3rd some physic: + ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); + ememory::SharedPtr physic = ememory::makeShared(); + physic->setRadius(4.01); + physic->setSize(8.01); + physic->setMass(500000); + componentPhysics->addShape(physic); + componentPhysics->generate(); + element->addComponent(componentPhysics); + // add it .. + m_env->addEntity(element); + } + myMesh = ege::resource::Mesh::createCone(4, 8, "basics", etk::color::purple); + if (myMesh != nullptr) { + ememory::SharedPtr element = ememory::makeShared(m_env); + // add all component: + // 1st Position component: + etk::Transform3D transform(vec3(20, 20,-10), etk::Quaternion::identity()); + //ememory::SharedPtr componentPosition = ememory::makeShared(transform); + //element->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + element->addComponent(componentRender); + // 3rd some physic: + ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); + ememory::SharedPtr physic = ememory::makeShared(); + physic->setRadius(4.01); + physic->setSize(8.01); + physic->setMass(500000); + componentPhysics->addShape(physic); + componentPhysics->generate(); + element->addComponent(componentPhysics); + // add it .. + m_env->addEntity(element); + } m_env->propertyStatus.set(ege::gameStart); } /*