void NGLScene::keyPressEvent(QKeyEvent *_event) { // this method is called every time the main window recives a key event. // we then switch on the key value and set the camera in the NGLScene switch (_event->key()) { // escape key to quite case Qt::Key_Escape : QGuiApplication::exit(EXIT_SUCCESS); break; // turn on wirframe rendering case Qt::Key_W : glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); break; // turn off wire frame case Qt::Key_S : glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); break; // show full screen case Qt::Key_F : showFullScreen(); break; // show windowed case Qt::Key_N : showNormal(); break; case Qt::Key_Space : m_car->reset(); break; case Qt::Key_X : stepAnimation(); break; case Qt::Key_1 : addCube(); break; case Qt::Key_2 : addSphere(); break; case Qt::Key_3 : addCapsule(); break; case Qt::Key_4 : addCylinder(); break; case Qt::Key_5 : addCone(); break; case Qt::Key_6 : addMesh(TEAPOT); break; case Qt::Key_7 : addMesh(APPLE); break; /* case Qt::Key_Left : m_physics->addImpulse(ngl::Vec3(-5,0.0f,0.0f)); break; case Qt::Key_Right : m_physics->addImpulse(ngl::Vec3(5.0f,0.0f,0.0f)); break; case Qt::Key_Up : m_physics->addImpulse(ngl::Vec3(0.0f,5.0f,0.0f)); break; case Qt::Key_Down : m_physics->addImpulse(ngl::Vec3(0.0f,-5.0f,0.0f)); break; */ case Qt::Key_Left : m_car->left(); break; case Qt::Key_Right : m_car->right(); break; case Qt::Key_Up : m_car->accelerate(); break; case Qt::Key_Down : m_car->stop(); break; case Qt::Key_B : toggleBBox(); break; case Qt::Key_R : toggleRandomPlace(); break; case Qt::Key_0 : resetSim(); break; default : break; } // finally update the GLWindow and re-draw //if (isExposed()) renderNow(); }
void wiBULLET::registerObject(Object* object){ if(object->rigidBody && rigidBodyPhysicsEnabled){ //XMVECTOR s,r,t; //XMMatrixDecompose(&s,&r,&t,XMLoadFloat4x4(&object->world)); XMFLOAT3 S,T; XMFLOAT4 R; //XMStoreFloat3(&S,s); //XMStoreFloat4(&R,r); //XMStoreFloat3(&T,t); object->applyTransform(); object->attachTo(object->GetRoot()); S = object->scale; T = object->translation; R = object->rotation; if(!object->collisionShape.compare("BOX")){ addBox( S,R,T ,object->mass,object->friction,object->restitution ,object->damping,object->kinematic ); object->physicsObjectI=++registeredObjects; } if(!object->collisionShape.compare("SPHERE")){ addSphere( S.x,T ,object->mass,object->friction,object->restitution ,object->damping,object->kinematic ); object->physicsObjectI=++registeredObjects; } if(!object->collisionShape.compare("CAPSULE")){ addCapsule( S.x,S.y,R,T ,object->mass,object->friction,object->restitution ,object->damping,object->kinematic ); object->physicsObjectI=++registeredObjects; } if(!object->collisionShape.compare("CONVEX_HULL")){ addConvexHull( object->mesh->vertices, S,R,T ,object->mass,object->friction,object->restitution ,object->damping,object->kinematic ); object->physicsObjectI=++registeredObjects; } if(!object->collisionShape.compare("MESH")){ addTriangleMesh( object->mesh->vertices,object->mesh->indices, S,R,T ,object->mass,object->friction,object->restitution ,object->damping,object->kinematic ); object->physicsObjectI=++registeredObjects; } } if(object->mesh->softBody && softBodyPhysicsEnabled){ XMFLOAT3 s,t; XMFLOAT4 r; if(object->mesh->hasArmature()){ s=object->mesh->armature->scale; r=object->mesh->armature->rotation; t=object->mesh->armature->translation; } else{ s=object->scale; r=object->rotation; t=object->translation; } addSoftBodyTriangleMesh( object->mesh ,s,r,t ,object->mass,object->mesh->friction,object->restitution,object->damping ); object->physicsObjectI=++registeredObjects; } }