DirectX FPS, пули выходят из соседнего пистолета перед ним - PullRequest
0 голосов
/ 30 марта 2012

Привет, я делаю шутер от первого лица в DirectX 10, используя c ++.

Я бы выложил свой код для помощи, потому что я знаю, что это стандартная практика, но это слишком много, чтобы надетьВот.Во всяком случае, я не знаю, смогу ли я получить то, что у меня работает, поскольку пули просто идут в дурацких направлениях, начиная с пистолета.

Мой вопрос здесь, кто-нибудь знаеткак просто заставить пулю двигаться к перекрестию?

У меня есть перекрестие перед пистолетом (на самом деле это просто кубические объекты в форме перекрестия).

Кто-нибудь знает способ в DirectX10?используя c ++, чтобы заставить что-то просто двигаться к точке с заданной скоростью, потому что, конечно, я могу просто заставить свои пули двигаться к перекрестию, и тогда мне не нужно беспокоиться о коде, который у меня есть на данный момент, который в основном определяет, в каком направлении стоит пистолети выходя под этим углом (что он вообще не работает должным образом).

Я полагаю, если есть способ заставить пулю двигаться к определенной точке, тогда это намного проще, чем то, что я делаю сейчас.

Я знаю, что это не было особенно ясно, но любая помощь будет очень ценной, поскольку я должным образом застрял в этом.

Вот функция для направления маркера:

void BDirection(float speed){

float frameTime = 0.01;
initVecDir.x = 0;
initVecDir.y = 0;
initVecDir.z = 1;

D3DXVec3TransformCoord(&newVecDir, &initVecDir, &matAllRotations2);
D3DXVec3Normalize(&currentVecDir, &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 );
        }
    } 

1 Ответ

0 голосов
/ 30 марта 2012

Вам нужно определить вектор, на который смотрит пользователь, в зависимости от того, какой тип камеры вы используете, это будет вектор наглядности. Это становится скоростью объекта. Вам также нужно повернуть объект, чтобы соответствовать этому, если это видно.

Если у вас пули, исходящие от самого пистолета, вам нужно определить, куда на самом деле указывают перекрестия, чтобы компенсировать разницу между тем, что видят пользователи, и тем, где пуля окажется в конце. Я бы посоветовал взглянуть на образец «Pick» из DirectX SDK.

[Редактировать] Я переписал его после прочтения вашего вопроса снова, извините.

...