Created
November 18, 2024 15:44
-
-
Save chrapati24/a3455873db23194ac18ddd18c378e041 to your computer and use it in GitHub Desktop.
Le code de mon projet (si vous avez des conseils à me donner et si vous souhaitez tester chez vous).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "raylib.h" | |
#include "bullet/btBulletDynamicsCommon.h" | |
#include <iostream> | |
#define WIN_MINSIZEX 1280 | |
#define WIN_MINSIZEY 720 | |
int main() | |
{ | |
Camera3D maCamera = { 0 }; | |
maCamera.position = Vector3{ 20.0f, 10.0f, 0.0f }; | |
maCamera.target = Vector3{ 0.0f, 0.0f, 0.0f }; | |
maCamera.up = Vector3{ 0.0f, 10.0f, 0.0f }; | |
maCamera.fovy = 45.0f; | |
maCamera.projection = CAMERA_PERSPECTIVE; | |
Vector3 cubePos = { 0.0f, 0.0f, 0.0f }; | |
// Physique | |
btDefaultCollisionConfiguration* configCollision = new btDefaultCollisionConfiguration(); // Configurer détection de collision | |
btCollisionDispatcher* dispatcherCollision = new btCollisionDispatcher(configCollision); // Calculer collisions | |
btBroadphaseInterface* cachePaires = new btDbvtBroadphase(); // Optimiser détection paires de collisions | |
btSequentialImpulseConstraintSolver* contraintesSolver = new btSequentialImpulseConstraintSolver(); // Appliquer contraintes physiques | |
btDiscreteDynamicsWorld* mondeDynamique = new btDiscreteDynamicsWorld(dispatcherCollision, cachePaires, contraintesSolver, configCollision); | |
mondeDynamique->setGravity(btVector3(0, -9.81, 0)); | |
// Sol | |
btCollisionShape* solShape = new btStaticPlaneShape(btVector3(0, 1, 0), 1); // Définir le sol | |
btDefaultMotionState* solEtatMouvement = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, -1, 0))); // Position et orientation | |
btRigidBody::btRigidBodyConstructionInfo solCorpsRigideIC(0, solEtatMouvement, solShape, btVector3(0, 0, 0)); // Définition du corps | |
btRigidBody* solCorpsRigide = new btRigidBody(solCorpsRigideIC); // Création du corps | |
mondeDynamique->addRigidBody(solCorpsRigide); | |
// Cube dynamique | |
btCollisionShape* cubeShape = new btBoxShape(btVector3(1, 1, 1)); | |
btDefaultMotionState* cubeEtatMouvement = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 10, 0))); | |
btScalar cubeMasse = 1; | |
btVector3 cubeInertie(0, 0, 0); | |
cubeShape->calculateLocalInertia(cubeMasse, cubeInertie); | |
btRigidBody::btRigidBodyConstructionInfo cubeCorpsRigideIC(cubeMasse, cubeEtatMouvement, cubeShape, cubeInertie); | |
btRigidBody* cubeCorpsRigide = new btRigidBody(cubeCorpsRigideIC); | |
mondeDynamique->addRigidBody(cubeCorpsRigide); | |
InitWindow(WIN_MINSIZEX, WIN_MINSIZEY, "raylib youtube"); | |
SetTargetFPS(50); | |
while (!WindowShouldClose()) { | |
if (IsKeyPressed(KEY_SPACE)) { | |
cubeCorpsRigide->applyCentralImpulse(btVector3(0, 10, 0)); | |
} | |
mondeDynamique->stepSimulation(1 / 60.0f, 10); | |
btTransform trans; | |
cubeCorpsRigide->getMotionState()->getWorldTransform(trans); | |
Vector3 cubePos = { | |
(float)trans.getOrigin().getX(), | |
(float)trans.getOrigin().getY(), | |
(float)trans.getOrigin().getZ() | |
}; | |
BeginDrawing(); | |
ClearBackground(RAYWHITE); | |
BeginMode3D(maCamera); | |
DrawPlane(Vector3{ 0, 0, 0 }, Vector2{ 20, 20 }, DARKGRAY); | |
DrawCube(cubePos, 2.0f, 2.0f, 2.0f, RED); | |
DrawCubeWires(cubePos, 2.0f, 2.0f, 2.0f, BLACK); | |
DrawGrid(10, 1.0f); | |
EndMode3D(); | |
DrawFPS(5, 5); | |
EndDrawing(); | |
} | |
// Destructors | |
mondeDynamique->removeRigidBody(cubeCorpsRigide); | |
mondeDynamique->removeRigidBody(solCorpsRigide); | |
delete cubeCorpsRigide->getMotionState(); | |
delete cubeCorpsRigide; | |
delete cubeShape; | |
delete solCorpsRigide->getMotionState(); | |
delete solCorpsRigide; | |
delete solShape; | |
CloseWindow(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment