Here's my test case:
- Code: Select all
#include <iostream>
#include "Newton.h"
#pragma comment(lib, "newton.lib")
int main()
{
// pretty output for floats
std::cout.setf(std::ios::fixed);
std::cout.precision(3);
NewtonWorld* world = NewtonCreate();
// identity matrix
float ident[] =
{
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
};
// 1x1x1 box
NewtonCollision* col = NewtonCreateBox(world, 1, 1, 1, 0, ident);
const int NUM_CONTACTS = 8;
float contacts[NUM_CONTACTS * 3];
float normals[NUM_CONTACTS * 3];
float penetrations[NUM_CONTACTS];
// matrix for the colliding "body"
float matrix[] =
{
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
};
const float INTERVAL = 0.1f;
for (float x = -2; x <= 2; x += INTERVAL)
{
matrix[12] = x; // set x position
int ret = NewtonCollisionCollide(world, NUM_CONTACTS, col, ident, col, matrix, contacts, normals, penetrations, 0);
std::cout << "x: " << x << "\tcollision:\t" << ((ret > 0) ? "yes" : "no") << std::endl;
}
NewtonReleaseCollision(world, col);
NewtonDestroy(world);
}
It creates a 1x1x1 box collision, and tests for a collision with one placed at 0,0,0 and the other moving on the x axis from x=-2 to x=2.
Unfortunately, NewtonCollisionCollide() seems to always return 0 no matter what I try. For example, the above test code produces this output:
- Code: Select all
x: -2.000 collision: no
x: -1.900 collision: no
x: -1.800 collision: no
x: -1.700 collision: no
x: -1.600 collision: no
x: -1.500 collision: no
x: -1.400 collision: no
x: -1.300 collision: no
x: -1.200 collision: no
x: -1.100 collision: no
x: -1.000 collision: no
x: -0.900 collision: no
x: -0.800 collision: no
x: -0.700 collision: no
x: -0.600 collision: no
x: -0.500 collision: no
x: -0.400 collision: no
x: -0.300 collision: no
x: -0.200 collision: no
x: -0.100 collision: no
x: 0.000 collision: no
x: 0.100 collision: no
x: 0.200 collision: no
x: 0.300 collision: no
x: 0.400 collision: no
x: 0.500 collision: no
x: 0.600 collision: no
x: 0.700 collision: no
x: 0.800 collision: no
x: 0.900 collision: no
x: 1.000 collision: no
x: 1.100 collision: no
x: 1.200 collision: no
x: 1.300 collision: no
x: 1.400 collision: no
x: 1.500 collision: no
x: 1.600 collision: no
x: 1.700 collision: no
x: 1.800 collision: no
x: 1.900 collision: no
Any ideas? Am I doing something wrong, maybe?