Работа с бесплатной библиотекой tokamak
Автор: zombieДля начала работы нам нужно подключить соответствующие библиотеки. Это делается следующим способом:
#include "tokamak.h"
#pragma comment(lib, "include\\lib\\tokamak.lib")
и опишем 2 переменные:
neSimulator * sim;
neAllocatorDefault all;
Далее будем создавать функции для простоты использования их в программе.
1. Первая функция будет инициализацией, назовем ее PhysicInit. Функция будет иметь два целочисленных входящих параметра rigidBodies и animatedBodies, первая указывает количество динамических обьектов, вторая количество статических (в нашем случае это будет пол).
void PhysicInit(int rigidBodies, int animatedBodies)
{
neV3 gravity;
gravity.Set(0.0f, -9.8f, 0.0f);
neSimulatorSizeInfo sizeInfo;
memset(&sizeInfo, 0, sizeof(sizeInfo));
sizeInfo.rigidBodiesCount = rigidBodies;
sizeInfo.animatedBodiesCount = animatedBodies;
s32 totalBody = sizeInfo.rigidBodiesCount + sizeInfo.animatedBodiesCount;
sizeInfo.geometriesCount = totalBody;
// максимальное допустимое количество столкновений
sizeInfo.overlappedPairsCount = 10*totalBody * (totalBody - 1) / 2;
sizeInfo.rigidParticleCount = 0;
sizeInfo.constraintsCount = 0;
sizeInfo.terrainNodesStartCount = 0;
sim = neSimulator::CreateSimulator(sizeInfo, &all, &gravity);
}
gravity.Set(0.0f, -9.8f, 0.0f) Устанавливает величину гравитации, для земли это значение как известно из физики 9.8 м/с. Можно вынести этот параметр в заголовок функции, если вы будете менять ее часто.
2. Второй функцией мы будем создавать пол (поверхность на которую будут падать наши обьекты)
void CreateFloor(float x, float y, float z, float a, float b, float c)
{
neGeometry *geom;
neAnimatedBody* ab;
//Ставим пол
ab = sim->CreateAnimatedBody();
geom = ab->AddGeometry();
neV3 boxSize1;
boxSize1.Set(a, b, c);
geom->SetBoxSize(boxSize1[0], boxSize1[1], boxSize1[2]);
ab->UpdateBoundingInfo();
neV3 pos;
pos.Set(x, y, z);
ab->SetPos(pos);
}
Параметры х,у,z - координаты положения нашего пола, a,b,c - размеры
...