我有一个我正在研究的opengl C++项目,我在右手画一个球员和一个球。首先,我想通过设置球位置使球跟随球员的手运动。一段时间后,我需要使用运动学方程来进行球运动。我得到使用播放器右手变换矩阵(我这个做我画球员的那一刻):Opengl将相对身体坐标转换为世界坐标
glGetFloatv(GL_MODELVIEW_MATRIX, ball->transformMatrix);
,然后那一刻我画球我尝试这样做:
glLoadMatrixf(ball->transformMatrix);
glTranslated(0, 0, 0);
glCallList(lists[BALL]);
这个作品完美和球在地方绘制。
问题是,当我需要移动球
x += velocityX*dt;
y += velocityY*dt + gravity*dt*dt;
z += velocityZ*dt;
velocityY += gravity*dt;
运动是相对的不是球员改变,但全球。我尝试了很多方法来解决这个问题,但都没有成功
那么我怎样才能正确地计算出球的x,y,z,这样我就可以在球离开球员之后把球翻译过来?
编辑:
我已经成功地收到该球坐标通过与向量乘以球 - > transformMatrix {0,0,0,1}的结果存储在世界矢量,即呼叫后(那一刻我画球):
glGetFloatv(GL_MODELVIEW_MATRIX, currentTransformMatrix);
然后反演currentTransformMatrix并与世界矢量乘以逆。结果是球适当的坐标{x,y,z}。
请不要滥用OpenGL作为矩阵数学库。这是尴尬和低效率。更好地使用真正的矩阵数学库,并使用glLoadMatrix和glMultMatrix将矩阵应用于OpenGL。顺便说一句:OpenGL-3.1完全删除了所有的矩阵功能! – datenwolf 2011-05-01 10:33:58