[DEV] first display
This commit is contained in:
parent
95e13b8126
commit
6e2e30de90
@ -27,6 +27,8 @@ class btDynamicsWorld;
|
||||
#include <ewol/object/Object.h>
|
||||
#include <ewol/signal/Signal.h>
|
||||
#include <ewol/event/Time.h>
|
||||
#include <ewol/parameter/Value.h>
|
||||
#include <ege/resource/Mesh.h>
|
||||
|
||||
namespace ege {
|
||||
enum property {
|
||||
@ -116,7 +118,7 @@ namespace ege {
|
||||
m_status.set(_value);
|
||||
}
|
||||
protected:
|
||||
ewol::parameter::List<float> m_ratio; //!< Speed ratio
|
||||
ewol::parameter::Value<float> m_ratio; //!< Speed ratio
|
||||
public:
|
||||
/**
|
||||
* @brief Get the game speed ratio.
|
||||
@ -135,7 +137,17 @@ namespace ege {
|
||||
protected:
|
||||
std::map<std::string, std::shared_ptr<ege::Camera>> 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<ege::Camera>& _camera);
|
||||
/**
|
||||
* @brief Get a specific camera.
|
||||
* @param[in] _name Name of the camera.
|
||||
* @return A pointer on the camera requested.
|
||||
*/
|
||||
std::shared_ptr<ege::Camera> getCamera(const std::string& _name);
|
||||
public:
|
||||
/**
|
||||
@ -239,6 +251,15 @@ namespace ege {
|
||||
|
||||
private:
|
||||
void periodicCall(const ewol::event::Time& _event);
|
||||
protected:
|
||||
std::vector<std::shared_ptr<ege::resource::Mesh>> m_listMeshToDrawFirst;
|
||||
public:
|
||||
void addStaticMeshToDraw(const std::shared_ptr<ege::resource::Mesh>& _mesh) {
|
||||
m_listMeshToDrawFirst.push_back(_mesh);
|
||||
}
|
||||
const std::vector<std::shared_ptr<ege::resource::Mesh>>& getStaticMeshToDraw() {
|
||||
return m_listMeshToDrawFirst;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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<ege::Environement> _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<ege::Camera> 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<m_displayElementOrdered.size(); iii++) {
|
||||
#else
|
||||
for (int32_t iii=m_displayElementOrdered.size()-1; 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; iii<m_displayElementOrdered.size(); iii++) {
|
||||
m_displayElementOrdered[iii].element->drawLife(m_debugDrawing, *m_camera);
|
||||
}
|
||||
*/
|
||||
/*
|
||||
#ifdef DEBUG
|
||||
if (true == m_debugMode) {
|
||||
for (size_t iii=0; iii<m_displayElementOrdered.size(); iii++) {
|
||||
m_displayElementOrdered[iii].element->drawDebug(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<ege::Camera> 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);
|
||||
/*
|
||||
|
@ -60,48 +60,6 @@ namespace ege {
|
||||
protected:
|
||||
// Note : This is only for temporary elements : on the display
|
||||
std::vector<ege::Environement::ResultNearestElement> m_displayElementOrdered;
|
||||
protected:
|
||||
//bool m_debugMode;
|
||||
//std::shared_ptr<ewol::resource::Colored3DObject> 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<float>& _tmpColor);
|
||||
void getElementAroundNewElement(vec3 _sourcePosition,
|
||||
std::vector<ege::Environement::ResultNearestElement>& _resultList);
|
||||
*/
|
||||
protected: // Derived function
|
||||
virtual void onDraw();
|
||||
virtual void onParameterChangeValue(const ewol::parameter::Ref& _paramPointer);
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <appl/Windows.h>
|
||||
#include <ewol/widget/Label.h>
|
||||
#include <ege/widget/Scene.h>
|
||||
#include <etk/tool.h>
|
||||
|
||||
#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<ege::resource::Mesh> myMesh = ege::resource::Mesh::create("---", "DATA:texturedNoMaterial.prog");
|
||||
if (myMesh != nullptr) {
|
||||
std::shared_ptr<ege::Material> material = std::make_shared<ege::Material>();
|
||||
// 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<ege::Material> material = std::make_shared<ege::Material>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
BIN
sample/MeshCreator/data/texture_mars.png
Normal file
BIN
sample/MeshCreator/data/texture_mars.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 938 KiB |
@ -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")
|
||||
|
Loading…
x
Reference in New Issue
Block a user