diff --git a/ege/Environement.h b/ege/Environement.h index a949ad0..65735f1 100644 --- a/ege/Environement.h +++ b/ege/Environement.h @@ -27,6 +27,8 @@ class btDynamicsWorld; #include #include #include +#include +#include namespace ege { enum property { @@ -116,7 +118,7 @@ namespace ege { m_status.set(_value); } protected: - ewol::parameter::List m_ratio; //!< Speed ratio + ewol::parameter::Value m_ratio; //!< Speed ratio public: /** * @brief Get the game speed ratio. @@ -135,7 +137,17 @@ namespace ege { protected: std::map> m_listCamera; //!< list of all camera in the world public: + /** + * @brief Add a camera in the camera pool. + * @param[in] _name Name of the camera. + * @param[in] _camera Pointer on the camera to add. + */ void addCamera(const std::string& _name, const std::shared_ptr& _camera); + /** + * @brief Get a specific camera. + * @param[in] _name Name of the camera. + * @return A pointer on the camera requested. + */ std::shared_ptr getCamera(const std::string& _name); public: /** @@ -239,6 +251,15 @@ namespace ege { private: void periodicCall(const ewol::event::Time& _event); + protected: + std::vector> m_listMeshToDrawFirst; + public: + void addStaticMeshToDraw(const std::shared_ptr& _mesh) { + m_listMeshToDrawFirst.push_back(_mesh); + } + const std::vector>& getStaticMeshToDraw() { + return m_listMeshToDrawFirst; + } }; }; diff --git a/ege/widget/Scene.cpp b/ege/widget/Scene.cpp index 176ee1f..be06f2e 100644 --- a/ege/widget/Scene.cpp +++ b/ege/widget/Scene.cpp @@ -30,15 +30,7 @@ #undef __class__ #define __class__ "Scene" -ege::widget::Scene::Scene() //: - //signalKillEnemy(*this, "kill-ennemy"), - //m_gameTime(0), - //m_angleView(M_PI/3.0), - //m_dynamicsWorld(nullptr), - //m_camera(nullptr), - //m_debugMode(false), - //m_debugDrawing(nullptr) -{ +ege::widget::Scene::Scene() { addObjectType("ege::widget::Scene"); } @@ -48,46 +40,10 @@ void ege::widget::Scene::init(std::shared_ptr _env) { setKeyboardRepeate(false); setCanHaveFocus(true); periodicCallEnable(); - - //m_debugDrawing = ewol::resource::Colored3DObject::create(); - - /* - m_ratioTime = 1.0f; - if (_setAutoBullet == true) { - setBulletConfig(); - } - if (_setAutoCamera == true) { - setCamera(); - } - */ } -/* -void ege::widget::Scene::setCamera(ege::Camera* _camera) { - if (nullptr != _camera) { - m_camera = _camera; - } else { - m_camera = new ege::Camera(vec3(0,0,0), 0, DEG_TO_RAD(45) ,50); - // SET THE STATION .. - m_camera->setEye(vec3(0,0,0)); - } -} -*/ ege::widget::Scene::~Scene() { - /* - ewol::resource::release(m_directDrawObject); - //cleanup in the reverse order of creation/initialization - //remove the rigidbodies from the dynamics world and delete them - for (int32_t iii=m_dynamicsWorld->getNumCollisionObjects()-1; iii >= 0 ;iii--) { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[iii]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - */ + } void ege::widget::Scene::onRegenerateDisplay() { @@ -112,6 +68,17 @@ void ege::widget::Scene::onDraw() { g_counterNbTimeDisplay++; g_startTime = ewol::getTime(); #endif + + // draw constant object : + { + mat4 tmpMatrix; + for (auto &it : m_env->getStaticMeshToDraw()) { + if (it != nullptr) { + it->draw(tmpMatrix); + } + } + } + // get camera : std::shared_ptr camera = m_env->getCamera(m_cameraName); //EGE_DEBUG("Draw (start)"); @@ -128,12 +95,7 @@ void ege::widget::Scene::onDraw() { } // note : the first pass is done at the reverse way to prevent multiple display od the same point in the screen // (and we remember that the first pass is to display all the non transparent elements) - #if 0 - // note : We keep this one for the test only ... - for (int32_t iii=0; iii= 0; iii--) { - #endif + for (int32_t iii=m_displayElementOrdered.size()-1; iii >= 0; iii--) { m_displayElementOrdered[iii].element->draw(0); } // for the other pass the user can draw transparent elements ... @@ -142,20 +104,6 @@ void ege::widget::Scene::onDraw() { m_displayElementOrdered[iii].element->draw(pass); } } - /* - for (size_t iii=0; iiidrawLife(m_debugDrawing, *m_camera); - } - */ - /* - #ifdef DEBUG - if (true == m_debugMode) { - for (size_t iii=0; iiidrawDebug(m_debugDrawing, *m_camera); - } - } - #endif - */ } if (camera != nullptr) { m_env->getParticuleEngine().draw(*camera); @@ -168,7 +116,6 @@ void ege::widget::Scene::onDraw() { EWOL_DEBUG(" scene : " << localTime << "ms " << g_counterNbTimeDisplay); } #endif - //EGE_DEBUG("Draw (stop)"); } // I really does not know what is this ... @@ -187,78 +134,41 @@ void ege::widget::Scene::periodicCall(const ewol::event::Time& _event) { //#define SCENE_BRUT_PERFO_TEST -void ege::widget::Scene::systemDraw(const ewol::DrawProperty& _displayProp) -{ -#ifdef SCENE_BRUT_PERFO_TEST -int64_t tmp___startTime0 = ewol::getTime(); -#endif +void ege::widget::Scene::systemDraw(const ewol::DrawProperty& _displayProp) { + #ifdef SCENE_BRUT_PERFO_TEST + int64_t tmp___startTime0 = ewol::getTime(); + #endif ewol::openGL::push(); // here we invert the reference of the standard openGl view because the reference in the common display is Top left and not buttom left glViewport( m_origin.x(), m_origin.y(), m_size.x(), m_size.y()); -#ifdef SCENE_BRUT_PERFO_TEST -float tmp___localTime0 = (float)(ewol::getTime() - tmp___startTime0) / 1000.0f; -EWOL_DEBUG(" SCENE000 : " << tmp___localTime0 << "ms "); -int64_t tmp___startTime1 = ewol::getTime(); -#endif + #ifdef SCENE_BRUT_PERFO_TEST + float tmp___localTime0 = (float)(ewol::getTime() - tmp___startTime0) / 1000.0f; + EWOL_DEBUG(" SCENE000 : " << tmp___localTime0 << "ms "); + #endif + std::shared_ptr camera = m_env->getCamera(m_cameraName); + if (camera != nullptr) { + ewol::openGL::setCameraMatrix(camera->getMatrix()); + } + // TODO : set this in the camera ... float ratio = m_size.x() / m_size.y(); //EWOL_INFO("ratio : " << ratio); - // TODO : mat4 tmpProjection = etk::matPerspective(m_angleView, ratio, GAME_Z_NEAR, GAME_Z_FAR); -#ifdef SCENE_BRUT_PERFO_TEST -float tmp___localTime1 = (float)(ewol::getTime() - tmp___startTime1) / 1000.0f; -EWOL_DEBUG(" SCENE111 : " << tmp___localTime1 << "ms "); -int64_t tmp___startTime2 = ewol::getTime(); -#endif - // TODO : ewol::openGL::setCameraMatrix(m_camera->getMatrix()); - //mat4 tmpMat = tmpProjection * m_camera->getMatrix(); - // set internal matrix system : - //ewol::openGL::setMatrix(tmpMat); - // TODO : ewol::openGL::setMatrix(tmpProjection); -#ifdef SCENE_BRUT_PERFO_TEST -float tmp___localTime2 = (float)(ewol::getTime() - tmp___startTime2) / 1000.0f; -EWOL_DEBUG(" SCENE222 : " << tmp___localTime2 << "ms "); -#endif - -#ifdef SCENE_BRUT_PERFO_TEST -int64_t tmp___startTime3 = ewol::getTime(); -#endif + float angleView = (M_PI/3.0); + mat4 tmpProjection = etk::matPerspective(angleView, ratio, GAME_Z_NEAR, GAME_Z_FAR); + ewol::openGL::setMatrix(tmpProjection); + #ifdef SCENE_BRUT_PERFO_TEST + int64_t tmp___startTime3 = ewol::getTime(); + #endif onDraw(); -#ifdef SCENE_BRUT_PERFO_TEST -float tmp___localTime3 = (float)(ewol::getTime() - tmp___startTime3) / 1000.0f; -EWOL_DEBUG(" SCENE333 : " << tmp___localTime3 << "ms "); -int64_t tmp___startTime4 = ewol::getTime(); -#endif + #ifdef SCENE_BRUT_PERFO_TEST + float tmp___localTime3 = (float)(ewol::getTime() - tmp___startTime3) / 1000.0f; + EWOL_DEBUG(" SCENE333 : " << tmp___localTime3 << "ms "); + #endif ewol::openGL::pop(); -#ifdef SCENE_BRUT_PERFO_TEST -float tmp___localTime4 = (float)(ewol::getTime() - tmp___startTime4) / 1000.0f; -EWOL_DEBUG(" SCENE444 : " << tmp___localTime4 << "ms "); -#endif } -/* -vec2 ege::widget::Scene::calculateDeltaAngle(const vec2& _posScreen) { - double ratio = m_size.x() / m_size.y(); - vec2 pos = vec2(m_size.x()/-2.0, m_size.y()/-2.0) + _posScreen; - - double xmax = tan(m_angleView/2.0); - double ymax = xmax / ratio; - - double newX = pos.x() * xmax / m_size.x()*2.0; - double newY = pos.y() * ymax / m_size.y()*2.0; - - double angleX = atan(newX); - double angleY = atan(newY); - - return vec2(angleX, - angleY); -} -*/ -/* -vec3 ege::widget::Scene::convertScreenPositionInMapPosition(const vec2& _posScreen) { - return m_camera->projectOnZGround(calculateDeltaAngle(_posScreen)); -} -*/ + void ege::widget::Scene::onParameterChangeValue(const ewol::parameter::Ref& _paramPointer) { ewol::Widget::onParameterChangeValue(_paramPointer); /* diff --git a/ege/widget/Scene.h b/ege/widget/Scene.h index 68105ce..10998fc 100644 --- a/ege/widget/Scene.h +++ b/ege/widget/Scene.h @@ -60,48 +60,6 @@ namespace ege { protected: // Note : This is only for temporary elements : on the display std::vector m_displayElementOrdered; - protected: - //bool m_debugMode; - //std::shared_ptr m_debugDrawing; //!< for the debug draw elements - public: - /** - * @brief Toggle the debug mode == > usefull for DEBUG only ... - */ - /* - void debugToggle() { - m_debugMode = m_debugMode?false:true; - }; - */ - protected: - // Derived function - //virtual void ScenePeriodicCall(int64_t _localTime, int32_t _deltaTime) { }; - public: - //vec2 calculateDeltaAngle(const vec2& _posScreen); - //vec3 convertScreenPositionInMapPosition(const vec2& _posScreen); - /** - * @brief get the current camera reference for the scene rendering - */ - /* - ege::Camera& getCamera() { - return *m_camera; - }; - */ - /* - void renderscene(int pass); - void drawOpenGL(btScalar* m, - const btCollisionShape* _shape, - const btVector3& _color, - int32_t _debugMode, - const btVector3& _worldBoundsMin, - const btVector3& _worldBoundsMax); - void drawSphere(btScalar _radius, - int _lats, - int _longs, - mat4& _transformationMatrix, - etk::Color& _tmpColor); - void getElementAroundNewElement(vec3 _sourcePosition, - std::vector& _resultList); - */ protected: // Derived function virtual void onDraw(); virtual void onParameterChangeValue(const ewol::parameter::Ref& _paramPointer); diff --git a/sample/MeshCreator/appl/Windows.cpp b/sample/MeshCreator/appl/Windows.cpp index ee14b9d..d509c9c 100644 --- a/sample/MeshCreator/appl/Windows.cpp +++ b/sample/MeshCreator/appl/Windows.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #undef __class__ #define __class__ "Windows" @@ -35,4 +36,50 @@ void appl::Windows::init() { tmpWidget->setCamera("basic"); setSubWidget(tmpWidget); } + // Create an external box : + std::shared_ptr myMesh = ege::resource::Mesh::create("---", "DATA:texturedNoMaterial.prog"); + if (myMesh != nullptr) { + std::shared_ptr material = std::make_shared(); + // 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->setTexture0(""); //" + myMesh->addMaterial("basics", material); + // 1024 == > 1<<9 + // 2048 == > 1<<10 + // 4096 == > 1<<11 + int32_t size = 1<<11; + material->setImageSize(ivec2(size,size)); + egami::Image* myImage = material->get(); + if (nullptr == myImage) { + return; + } + myImage->clear(etk::color::black); + ivec2 tmpPos; + for (int32_t iii=0; iii<6000; iii++) { + tmpPos.setValue(etk::tool::frand(0,size), etk::tool::frand(0,size)) ; + myImage->set(tmpPos, etk::color::white); + } + material->flush(); + // basis on cube : + myMesh->createViewBox("basics", 1000/* distance */); + // generate the VBO + myMesh->generateVBO(); + m_env->addStaticMeshToDraw(myMesh); + } + myMesh = ege::resource::Mesh::create("---"); + if (myMesh != nullptr) { + std::shared_ptr material = std::make_shared(); + material->setAmbientFactor(vec4(0.112f,0.112f,0.112f,1.0f)); + material->setDiffuseFactor(vec4(0.512f,0.512f,0.512f,1.0f)); + material->setSpecularFactor(vec4(0.5f,0.5f,0.5f,1.0f)); + material->setShininess(96.078431f); + material->setTexture0("DATA:texture_mars.png"); + myMesh->addMaterial("basics", material); + myMesh->createIcoSphere("basics", 16, 3); + myMesh->generateVBO(); + m_env->addStaticMeshToDraw(myMesh); + } } diff --git a/sample/MeshCreator/data/texture_mars.png b/sample/MeshCreator/data/texture_mars.png new file mode 100644 index 0000000..8584cf8 Binary files /dev/null and b/sample/MeshCreator/data/texture_mars.png differ diff --git a/sample/MeshCreator/lutin_egeMeshCreator.py b/sample/MeshCreator/lutin_egeMeshCreator.py index 6b910c7..376f57b 100644 --- a/sample/MeshCreator/lutin_egeMeshCreator.py +++ b/sample/MeshCreator/lutin_egeMeshCreator.py @@ -22,7 +22,7 @@ def create(target): myModule.add_path(tools.get_current_path(__file__)) - #myModule.copy_folder("data/*") + myModule.copy_folder("data/*") # set the package properties : myModule.pkg_set("VERSION", "0.0.0")