0
我想模拟使用牛顿物理和OpenGL的旋转框。这是我实施的。如何更新变换矩阵(NewtonGameDyanmics/OpenGL)?
float mat44[16] = {
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1
};
box.mat = &mat44[0];
box.x_size = 0.50;
box.y_size = 0.50;
box.z_size = 0.50;
nWorld = NewtonCreate(NULL, NULL);
NewtonCollision * collision = NULL;
collision = NewtonCreateBox(nWorld, box.x_size, box.y_size, box.z_size,NULL);
body = NewtonCreateBody(nWorld, collision);
NewtonReleaseCollision (nWorld, collision);
NewtonBodySetMassMatrix(body, 10.0, 2.0, 2.0, 2.0);
NewtonBodySetMatrix (body, box.mat);
float omega[3] = {0.0f, 10.0f, 0.0f};
NewtonBodySetOmega (body, &omega[0]);
在渲染循环内我正在做这些事情。
NewtonUpdate(nWorld, time);
float m[16];
NewtonBodyGetMatrix(body, &m[0]);
box.mat = m;
我的问题是如何使用矩阵(box.mat)绘制一个立方体(实际上8点)?我怎样才能使用矩阵计算更新的顶点?
请让我知道如何做到这一点的第二部分(饲料的OpenGL不变的顶点和简单的使用box.mat为“模型矩阵”的OpenGL)? – shan 2012-03-24 04:22:50
假设当前的矩阵堆栈是'GL_MODELVIEW',并且该堆栈上的当前矩阵是您的视图矩阵,那么您可以调用'glMultTransposeMatrixf(box.mat)'。这假定你正在使用行主矩阵,这与我在实际答案中编写代码的假设是一样的。 – 2012-03-24 04:24:27
不,你不需要转置牛顿矩阵将其传递给OpenGL。只需调用glMultMatrixf(m);如果m是从NewtonBodyGetMatrix函数获得的矩阵。 – 2012-03-24 09:37:27