嗨,我正在使用c ++在directX 10中制作第一人称射击游戏。
我会发布我的代码以寻求帮助,因为我知道这是标准的做法,但是在这里放置太多了。无论如何,我不知道我是否能够得到我已经工作的东西,因为子弹从枪的旁边开始是愚蠢的方向。
我的问题是,有没有人知道如何让子弹朝十字准线移动?
我在枪前面有十字准线(实际上只有十字形状的立方体物体)。
有没有人知道directX10使用c ++的方式让某些东西只能以给定的速度移动到某一点,因为我可以让我的子弹移向十字准线,然后不必担心我目前的代码这基本上决定了枪面向哪个方向并以该角度出现(它根本不能正常工作)。
我认为如果有一种方法可以使子弹朝着特定点移动,那么这比我现在所做的要容易得多。
我知道这不是特别清楚,但任何帮助都会受到很大关注,因为我已经适当地坚持了这一点。
这是子弹方向的功能:
void BDirection(float speed){
float frameTime = 0.01;
initVecDir.x = 0;
initVecDir.y = 0;
initVecDir.z = 1;
D3DXVec3TransformCoord(&newVecDir, &initVecDir, &matAllRotations2);
D3DXVec3Normalize(¤tVecDir, &newVecDir);
float adjustedSpeed = speed*frameTime;
for (int i =0; i<CountB; i++){
BULLETS[i].initVec.x += currentVecDir.x*adjustedSpeed; BULLETS[i].initVec.y += currentVecDir.y*adjustedSpeed;
BULLETS[i].initVec.z += currentVecDir.z*adjustedSpeed;
}
}
子弹渲染:
for(int i =0; i< CountB; i++){
D3DXMatrixRotationX( &matBulletRotX, BULLETS[i].RotVec.x);
D3DXMatrixRotationY( &matBulletRotY, BULLETS[i].RotVec.y);
D3DXMatrixRotationZ( &matBulletRotZ, BULLETS[i].RotVec.z);
D3DXMatrixScaling(&matScale2, 1,1,1);
D3DXMatrixTranslation (&matTranslate2, BULLETS[i].initVec.x, BULLETS[i].initVec.y, BULLETS[i].initVec.z);
matAllRotations2 = matBulletRotX * matBulletRotY * matBulletRotZ;
matBulletWorld = matAllRotations2 * matScale2 * matTranslate2;
mWorldViewProjection = matBulletWorld * mView * mProj;
// Update the effect's variables.
V( g_pWorldViewProjection->SetMatrix( (float*)&mWorldViewProjection ) );
V( g_pWorld->SetMatrix( (float*)&matBulletWorld ) );
V( g_pTime->SetFloat( (float)fTime ) );
V( g_pCameraPosition->SetFloatVector( (float*)g_Camera.GetEyePt() ) );
for ( UINT iSubset = 0; iSubset < BULLETS[i].bullet.GetNumSubsets(); ++iSubset )
{
RenderSubset2( iSubset, i );
}
}
答案 0 :(得分:0)
您需要确定用户正在查看的矢量,具体取决于您使用的相机类型,这将是外观矢量。这成为物体的速度。如果可以看到,您还需要旋转对象以匹配它。
如果您的子弹来自枪本身,您需要确定十字准线实际指向的位置,以补偿用户看到的内容与子弹结束位置之间的差异。我建议查看DirectX SDK中的“Pick”样本。
[编辑]我在再次阅读你的问题后重新写了,对不起。