simple rocket impact prediction, using debug draw...
PHP Code:
idVec3 mAim::GetRocketPredict( void )
{
idVec3 rocketImpact;
idVec3 rocketVelocity;
modelTrace_t tracettest;
//rocket
idVec3 myBaseVeloc=gameLocal->GetLocalPlayer()->firstPersonViewAxis.ToAngles().ToForward()*2000;
idVec3 myGraviVec(0,0,-120);
idVec3 myBaseAcc(0,0,0);
idVec3 myBaseOrigin=gameLocal->GetLocalPlayer()->firstPersonViewOrigin;
idVec3 myOrigin=myBaseOrigin;
float elapsed = 0;
for(int traceCo=0; traceCo <= 4000; traceCo+=500) {
elapsed = MS2SEC(traceCo);
idVec3 acc = myBaseAcc + myGraviVec;
rocketVelocity = myBaseVeloc + ( acc * elapsed );
rocketImpact = myBaseOrigin + ( myBaseVeloc * elapsed ) + ( 0.5f * acc * Square( elapsed ) );
gameRenderWorld->Trace(tracettest, myOrigin, rocketImpact, 1, true);
if(tracettest.fraction >0.1f && tracettest.fraction<1.f){
gameRenderWorld->DebugCircle(colorBlue,tracettest.point, gameLocal->GetLocalPlayer()->firstPersonViewAxis.ToAngles().ToForward(),40, 20, idgameloc->msec+1,false);
gameRenderWorld->DebugCircle(colorGreen,tracettest.point, gameLocal->GetLocalPlayer()->firstPersonViewAxis.ToAngles().ToForward(),30, 20, idgameloc->msec+1,true);
}
if(tracettest.fraction<1.f)
break;
myOrigin = rocketImpact;
}
return tracettest.point;
}
... and drawing it top-down in a second cam:
PHP Code:
idVec3 m_vecCameraPosition;
idMat3 m_vecCamereAxis;
idVec3 predOrigin(0,0,0);
predOrigin=aimer.GetRocketPredict();
if(predOrigin!=idVec3(0,0,0)) {
m_vecCameraPosition=predOrigin;
idAngles drawAngle=gameLocal->GetLocalPlayer()->firstPersonViewAxis.ToAngles();
drawAngle.pitch=90.f;
m_vecCamereAxis=drawAngle.ToMat3();
m_vecCameraPosition.z+=500;
renderView_t renderView;
memset( &renderView, 0, sizeof( renderView ) );
renderView.time=gameLocal->time;
renderView.x = 50;
renderView.y = 100;
renderView.fov_x = 60;
renderView.fov_y = 60;
renderView.width = 100.0f;
renderView.height = 100.0f;
renderView.vieworg = m_vecCameraPosition;
renderView.viewaxis =m_vecCamereAxis;
gameRenderWorld->RenderScene(&renderView);
}
- FSH
credits: etqw SDK, GD
edit - screenshots: