Skip to content

Instantly share code, notes, and snippets.

@chrapati24
Created November 18, 2024 15:44
Show Gist options
  • Save chrapati24/a3455873db23194ac18ddd18c378e041 to your computer and use it in GitHub Desktop.
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).
#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