diff --git a/external/etk b/external/etk index e3890a6c..5e87dea8 160000 --- a/external/etk +++ b/external/etk @@ -1 +1 @@ -Subproject commit e3890a6c1471e393ba39cc431e3d1f62de0280b8 +Subproject commit 5e87dea87f22b06103c5ff3f8087f28fcb4ae50c diff --git a/sources/ewol/game/Camera.cpp b/sources/ewol/game/Camera.cpp index a7fd36ad..9845f6bf 100644 --- a/sources/ewol/game/Camera.cpp +++ b/sources/ewol/game/Camera.cpp @@ -19,7 +19,8 @@ void game::Camera::Update(void) m_matrix.Rotate(vec3(1,0,0), m_angles.x ); m_matrix.Rotate(vec3(0,1,0), m_angles.y ); m_matrix.Rotate(vec3(0,0,1), m_angles.z ); - m_matrix.Translate(m_position); + vec3 tmpp = m_position * -1; + m_matrix.Translate(tmpp); EWOL_DEBUG("camera: pos=" << m_position << " angle=" << m_angles); } diff --git a/sources/ewol/game/Camera.h b/sources/ewol/game/Camera.h index 53e816ca..a08fd5b5 100644 --- a/sources/ewol/game/Camera.h +++ b/sources/ewol/game/Camera.h @@ -32,7 +32,7 @@ namespace game * @param[in] pos Position of the camera. * @param[in] angles Rotations angles of the camera */ - Camera(vec3 pos=vec3(0,0,1), vec3 angles=vec3(0,0,0));/** + Camera(vec3 pos=vec3(0,0,2), vec3 angles=vec3(0,0,0));/** * @brief Set the position of the camera. * @param[in] pos Position of the camera. */ diff --git a/sources/ewol/game/Element.cpp b/sources/ewol/game/Element.cpp index a88e4f53..25cba03f 100644 --- a/sources/ewol/game/Element.cpp +++ b/sources/ewol/game/Element.cpp @@ -30,9 +30,8 @@ game::Element::Element(etk::UString meshResource) : } uniqueId++; - Scale(vec3(100,100,100) ); - //m_property.Rotate(m_property.m_angle, rotx); - //Translate(vec3(0.01,0.0,0.0)); + //Scale(vec3(100,100,100) ); + //Translate(vec3(0.0,0.0,-10.0)); } game::Element::~Element(void) @@ -89,8 +88,11 @@ void game::Element::ProcessPosition(float delta) vec3 m_speed0(m_speed); vec3 curentAcceleration(m_gravityForce + m_userAcceleration); m_speed += curentAcceleration*delta; - m_position += m_speed0*delta + curentAcceleration*delta*delta/2.0f ; - m_matrixNeedUpdate = true; - //EWOL_DEBUG("modify m_position=" << m_position << "m m_speed=" << m_speed << "m/s m_gravityForce=" << m_gravityForce << "+" << m_userAcceleration << "m/s2"); + vec3 tmpPos = m_position +m_speed0*delta + curentAcceleration*delta*delta/2.0f ; + if (m_position != tmpPos) { + m_position = tmpPos; + m_matrixNeedUpdate = true; + //EWOL_DEBUG("modify m_position=" << m_position << "m m_speed=" << m_speed << "m/s m_gravityForce=" << m_gravityForce << "+" << m_userAcceleration << "m/s2"); + } } diff --git a/sources/ewol/widget/Scene.cpp b/sources/ewol/widget/Scene.cpp index 0b9d26be..b4a2a161 100644 --- a/sources/ewol/widget/Scene.cpp +++ b/sources/ewol/widget/Scene.cpp @@ -113,17 +113,9 @@ void widget::Scene::GenDraw(ewol::DrawProperty displayProp) m_size.y); float ratio = m_size.x / m_size.y; //EWOL_INFO("ratio : " << ratio); - mat4 tmpProjection;// = etk::matPerspective( M_PI/2.0, ratio, -1, 1); + mat4 tmpProjection = etk::matPerspective( M_PI/2.0, ratio, -1, 1); - if (ratio >= 1.0) { - tmpProjection = etk::matOrtho(-ratio, ratio, -1, 1, -1, 1); - } else { - ratio = 1.0/ratio; - tmpProjection = etk::matOrtho(-1, 1, -ratio, ratio, -1, 1); - } - - mat4 tmpScale = etk::matScale(vec3(m_zoom, m_zoom, m_zoom) ); - mat4 tmpMat = tmpProjection * tmpScale * m_camera.GetMatrix(); + mat4 tmpMat = tmpProjection * m_camera.GetMatrix(); // set internal matrix system : ewol::openGL::SetMatrix(tmpMat); @@ -175,9 +167,13 @@ bool widget::Scene::OnEventInput(ewol::keyEvent::type_te type, int32_t IdInput, if (type == ewol::keyEvent::typeMouse) { if (4 == IdInput && ewol::keyEvent::statusUp == statusEvent) { - m_zoom *= 0.91; + vec3 oldPos = m_camera.GetPosition(); + oldPos.z -= 0.5; + m_camera.SetPosition(oldPos); } else if (5 == IdInput && ewol::keyEvent::statusUp == statusEvent) { - m_zoom *= 1.1; + vec3 oldPos = m_camera.GetPosition(); + oldPos.z += 0.5; + m_camera.SetPosition(oldPos); } else if (1 == IdInput) { if(modeMoving==1 && ewol::keyEvent::statusUp == statusEvent) { modeMoving = 0; @@ -187,8 +183,8 @@ bool widget::Scene::OnEventInput(ewol::keyEvent::type_te type, int32_t IdInput, } else if (modeMoving==1 && ewol::keyEvent::statusMove == statusEvent) { vec2 offset = relativePos - oldCursorPos; vec3 oldPos = m_camera.GetPosition(); - oldPos.x += offset.x; - oldPos.y += offset.y; + oldPos.x -= offset.x/50.0; + oldPos.y -= offset.y/50.0; m_camera.SetPosition(oldPos); oldCursorPos = relativePos; } diff --git a/test/human/appl/TestScene.cpp b/test/human/appl/TestScene.cpp index 4a45fadc..9ef4bdc3 100644 --- a/test/human/appl/TestScene.cpp +++ b/test/human/appl/TestScene.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -190,7 +191,9 @@ class stupidCube : public game::Element virtual bool ArtificialIntelligence(int32_t deltaMicroSecond) { if (m_mass == 0.0f) { - Rotate(baseRotationVect, 0.01); + if (baseRotationVect != vec3(0,0,0) ) { + Rotate(baseRotationVect, 0.01); + } } return false; } @@ -214,6 +217,11 @@ void TestScene::OnReceiveMessage(ewol::EObject * CallerObject, const char * even } if (eventId == l_eventAddBox) { stupidCube * tmpp = new stupidCube(); + static bool firstTime = true; + if (firstTime==false) { + tmpp->Translate(vec3(etk::tool::frand(-1,1),etk::tool::frand(-1,1),etk::tool::frand(-1,1))); + } + firstTime = false; m_gameEngine.AddElement(tmpp, true); } else if (eventId == l_eventAddSphere) { if (NULL!=m_testWidget) {