本文整理汇总了C++中CKinematics::LL_GetTransform方法的典型用法代码示例。如果您正苦于以下问题:C++ CKinematics::LL_GetTransform方法的具体用法?C++ CKinematics::LL_GetTransform怎么用?C++ CKinematics::LL_GetTransform使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CKinematics
的用法示例。
在下文中一共展示了CKinematics::LL_GetTransform方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateMGunDir
void CHelicopter::UpdateMGunDir()
{
CKinematics* K = smart_cast<CKinematics*>(Visual());
m_fire_bone_xform = K->LL_GetTransform(m_fire_bone);
m_fire_bone_xform.mulA_43 (XFORM());
m_fire_pos.set (0,0,0);
m_fire_bone_xform.transform_tiny(m_fire_pos);
m_fire_dir.set (0,0,1);
m_fire_bone_xform.transform_dir(m_fire_dir);
m_fire_dir.sub (m_enemy.destEnemyPos,m_fire_pos).normalize_safe();
m_left_rocket_bone_xform = K->LL_GetTransform(m_left_rocket_bone);
m_left_rocket_bone_xform.mulA_43 (XFORM());
m_left_rocket_bone_xform.c.y += 1.0f;
//.fake
m_right_rocket_bone_xform = K->LL_GetTransform(m_right_rocket_bone);
m_right_rocket_bone_xform.mulA_43 (XFORM());
m_right_rocket_bone_xform.c.y += 1.0f;
//.fake
m_allow_fire = TRUE;
Fmatrix XFi;
XFi.invert (XFORM());
Fvector dep;
XFi.transform_tiny (dep,m_enemy.destEnemyPos);
{// x angle
Fvector A_; A_.sub(dep,m_bind_x); m_i_bind_x_xform.transform_dir(A_); A_.normalize();
m_tgt_rot.x = angle_normalize_signed(m_bind_rot.x-A_.getP());
float sv_x = m_tgt_rot.x;
clamp (m_tgt_rot.x,-m_lim_x_rot.y,-m_lim_x_rot.x);
if (!fsimilar(sv_x,m_tgt_rot.x,EPS_L)) m_allow_fire=FALSE;
}
{// y angle
Fvector A_; A_.sub(dep,m_bind_y); m_i_bind_y_xform.transform_dir(A_); A_.normalize();
m_tgt_rot.y = angle_normalize_signed(m_bind_rot.y-A_.getH());
float sv_y = m_tgt_rot.y;
clamp (m_tgt_rot.y,-m_lim_y_rot.y,-m_lim_y_rot.x);
if (!fsimilar(sv_y,m_tgt_rot.y,EPS_L)) m_allow_fire=FALSE;
}
if ((angle_difference(m_cur_rot.x,m_tgt_rot.x)>deg2rad(m_barrel_dir_tolerance))||
(angle_difference(m_cur_rot.y,m_tgt_rot.y)>deg2rad(m_barrel_dir_tolerance)))
m_allow_fire=FALSE;
}
示例2: todo
void CInventoryItem::UpdateXForm ()
{
if (0==object().H_Parent()) return;
// Get access to entity and its visual
CEntityAlive* E = smart_cast<CEntityAlive*>(object().H_Parent());
if (!E) return;
if (E->cast_base_monster()) return;
const CInventoryOwner *parent = smart_cast<const CInventoryOwner*>(E);
if (parent && parent->use_simplified_visual())
return;
if (parent->attached(this))
return;
R_ASSERT (E);
CKinematics* V = smart_cast<CKinematics*> (E->Visual());
VERIFY (V);
// Get matrices
int boneL,boneR,boneR2;
E->g_WeaponBones(boneL,boneR,boneR2);
// if ((HandDependence() == hd1Hand) || (STATE == eReload) || (!E->g_Alive()))
// boneL = boneR2;
#pragma todo("TO ALL: serious performance problem")
V->CalculateBones ();
Fmatrix& mL = V->LL_GetTransform(u16(boneL));
Fmatrix& mR = V->LL_GetTransform(u16(boneR));
// Calculate
Fmatrix mRes;
Fvector R,D,N;
D.sub (mL.c,mR.c); D.normalize_safe();
if(fis_zero(D.magnitude()))
{
mRes.set(E->XFORM());
mRes.c.set(mR.c);
}
else
{
D.normalize();
R.crossproduct (mR.j,D);
N.crossproduct (D,R);
N.normalize();
mRes.set (R,N,D,mR.c);
mRes.mulA_43 (E->XFORM());
}
// UpdatePosition (mRes);
object().Position().set(mRes.c);
}
示例3:
void CHelicopter::UpdateHeliParticles ()
{
CKinematics* K = smart_cast<CKinematics*>(Visual());
m_particleXFORM = K->LL_GetTransform(m_smoke_bone);
m_particleXFORM.mulA_43(XFORM());
if (m_pParticle){
Fvector vel;
Fvector last_pos = PositionStack.back().vPosition;
vel.sub(Position(), last_pos);
vel.mul(5.0f);
m_pParticle->UpdateParent(m_particleXFORM, vel );
}
//lighting
if(m_light_render->get_active()){
Fmatrix xf;
Fmatrix& M = K->LL_GetTransform(u16(m_light_bone));
xf.mul (XFORM(),M);
VERIFY(!fis_zero(DET(xf)));
m_light_render->set_rotation (xf.k,xf.i);
m_light_render->set_position (xf.c);
if (m_lanim)
{
int frame;
u32 clr = m_lanim->CalculateBGR(Device.fTimeGlobal,frame); // òþ÷ò¨ð•ðõª ò ¯þ¨üðªõ BGR
Fcolor fclr;
fclr.set ((float)color_get_B(clr),(float)color_get_G(clr),(float)color_get_R(clr),1.f);
fclr.mul_rgb (m_light_brightness/255.f);
m_light_render->set_color (fclr);
}
}
}
示例4: UpdateBarrelDir
void CCarWeapon::UpdateBarrelDir()
{
CKinematics* K = smart_cast<CKinematics*>(m_object->Visual());
m_fire_bone_xform = K->LL_GetTransform(m_fire_bone);
m_fire_bone_xform.mulA_43(m_object->XFORM());
m_fire_pos.set(0,0,0);
m_fire_bone_xform.transform_tiny(m_fire_pos);
m_fire_dir.set(0,0,1);
m_fire_bone_xform.transform_dir(m_fire_dir);
m_fire_norm.set(0,1,0);
m_fire_bone_xform.transform_dir(m_fire_norm);
m_allow_fire = true;
Fmatrix XFi;
XFi.invert (m_object->XFORM());
Fvector dep;
XFi.transform_dir (dep,m_destEnemyDir);
{// x angle
m_i_bind_x_xform.transform_dir(dep); dep.normalize();
m_tgt_x_rot = angle_normalize_signed(m_bind_x_rot-dep.getP());
clamp (m_tgt_x_rot,-m_lim_x_rot.y,-m_lim_x_rot.x);
}
{// y angle
m_i_bind_y_xform.transform_dir(dep); dep.normalize();
m_tgt_y_rot = angle_normalize_signed(m_bind_y_rot-dep.getH());
clamp (m_tgt_y_rot,-m_lim_y_rot.y,-m_lim_y_rot.x);
}
m_cur_x_rot = angle_inertion_var(m_cur_x_rot,m_tgt_x_rot,m_min_gun_speed,m_max_gun_speed,PI,Device.fTimeDelta);
m_cur_y_rot = angle_inertion_var(m_cur_y_rot,m_tgt_y_rot,m_min_gun_speed,m_max_gun_speed,PI,Device.fTimeDelta);
static float dir_eps = deg2rad(5.0f);
if( !fsimilar(m_cur_x_rot,m_tgt_x_rot,dir_eps)|| !fsimilar(m_cur_y_rot,m_tgt_y_rot,dir_eps))
m_allow_fire=FALSE;
#if (0)
if(Device.dwFrame%200==0){
Msg("m_cur_x_rot=[%f]",m_cur_x_rot);
Msg("m_cur_y_rot=[%f]",m_cur_y_rot);
}
#endif
}
示例5: UpdateXForm
void CArtefact::UpdateXForm()
{
if (Device.dwFrame!=dwXF_Frame)
{
dwXF_Frame = Device.dwFrame;
if (0==H_Parent()) return;
// Get access to entity and its visual
CEntityAlive* E = smart_cast<CEntityAlive*>(H_Parent());
if(!E) return ;
const CInventoryOwner *parent = smart_cast<const CInventoryOwner*>(E);
if (parent && parent->use_simplified_visual())
return;
VERIFY (E);
CKinematics* V = smart_cast<CKinematics*> (E->Visual());
VERIFY (V);
// Get matrices
int boneL,boneR,boneR2;
E->g_WeaponBones (boneL,boneR,boneR2);
boneL = boneR2;
V->CalculateBones ();
Fmatrix& mL = V->LL_GetTransform(u16(boneL));
Fmatrix& mR = V->LL_GetTransform(u16(boneR));
// Calculate
Fmatrix mRes;
Fvector R,D,N;
D.sub (mL.c,mR.c); D.normalize_safe();
R.crossproduct (mR.j,D); R.normalize_safe();
N.crossproduct (D,R); N.normalize_safe();
mRes.set (R,N,D,mR.c);
mRes.mulA_43 (E->XFORM());
// UpdatePosition (mRes);
XFORM().mul (mRes,offset());
}
}
示例6: UpdateCLChild
void CGraviArtefact::UpdateCLChild()
{
VERIFY(!ph_world->Processing());
if (getVisible() && m_pPhysicsShell) {
if (m_fJumpHeight) {
Fvector dir;
dir.set(0, -1.f, 0);
collide::rq_result RQ;
//проверить высоту артифакта
if(Level().ObjectSpace.RayPick(Position(), dir, m_fJumpHeight, collide::rqtBoth, RQ, this))
{
dir.y = 1.f;
m_pPhysicsShell->applyImpulse(dir,
30.f * Device.fTimeDelta *
m_pPhysicsShell->getMass());
}
}
} else
if(H_Parent())
{
XFORM().set(H_Parent()->XFORM());
if (GameID() == GAME_ARTEFACTHUNT && m_CarringBoneID != u16(-1))
{
CKinematics* K = smart_cast<CKinematics*>(H_Parent()->Visual());
if (K)
{
K->CalculateBones ();
Fmatrix Ruck_MTX = K->LL_GetTransform(m_CarringBoneID);
Fvector x;
x.set(-0.1f, 0.f, -0.3f);
Ruck_MTX.translate_add(x);
Ruck_MTX.mulA_43 (XFORM());
XFORM().set(Ruck_MTX);
};
};
};
}
示例7: AddElement
void CPhysicObject::AddElement(CPhysicsElement* root_e, int id)
{
CKinematics* K = smart_cast<CKinematics*>(Visual());
CPhysicsElement* E = P_create_Element();
CBoneInstance& B = K->LL_GetBoneInstance(u16(id));
E->mXFORM.set (K->LL_GetTransform(u16(id)));
Fobb bb = K->LL_GetBox(u16(id));
if(bb.m_halfsize.magnitude()<0.05f)
{
bb.m_halfsize.add(0.05f);
}
E->add_Box (bb);
E->setMass (10.f);
E->set_ParentElement(root_e);
B.set_callback (bctPhysics,m_pPhysicsShell->GetBonesCallback(),E);
m_pPhysicsShell->add_Element (E);
if( !(m_type==epotFreeChain && root_e==0) )
{
CPhysicsJoint* J= P_create_Joint(CPhysicsJoint::full_control,root_e,E);
J->SetAnchorVsSecondElement (0,0,0);
J->SetAxisDirVsSecondElement (1,0,0,0);
J->SetAxisDirVsSecondElement (0,1,0,2);
J->SetLimits (-M_PI/2,M_PI/2,0);
J->SetLimits (-M_PI/2,M_PI/2,1);
J->SetLimits (-M_PI/2,M_PI/2,2);
m_pPhysicsShell->add_Joint (J);
}
CBoneData& BD = K->LL_GetData(u16(id));
for (vecBonesIt it=BD.children.begin(); BD.children.end() != it; ++it){
AddElement (E,(*it)->GetSelfID());
}
}
示例8: draw_adjust_mode
void CUIMainIngameWnd::draw_adjust_mode()
{
if (g_bHudAdjustMode&&m_pWeapon) //draw firePoint,ShellPoint etc
{
CActor* pActor = smart_cast<CActor*>(Level().CurrentEntity());
if(!pActor)
return;
bool bCamFirstEye = !!m_pWeapon->GetHUDmode();
string32 hud_view="HUD view";
string32 _3rd_person_view="3-rd person view";
CGameFont* F = UI()->Font()->pFontDI;
F->SetAligment (CGameFont::alCenter);
//. F->SetSizeI (0.02f);
F->OutSetI (0.f,-0.8f);
F->SetColor (0xffffffff);
F->OutNext ("Hud_adjust_mode=%d",g_bHudAdjustMode);
if(g_bHudAdjustMode==1)
F->OutNext ("adjusting zoom offset");
else if(g_bHudAdjustMode==2)
F->OutNext ("adjusting fire point for %s",bCamFirstEye?hud_view:_3rd_person_view);
else if(g_bHudAdjustMode==3)
F->OutNext ("adjusting missile offset");
else if(g_bHudAdjustMode==4)
F->OutNext ("adjusting shell point for %s",bCamFirstEye?hud_view:_3rd_person_view);
else if(g_bHudAdjustMode == 5)
F->OutNext ("adjusting fire point 2 for %s",bCamFirstEye?hud_view:_3rd_person_view);
if(bCamFirstEye)
{
CWeaponHUD *pWpnHud = NULL;
pWpnHud = m_pWeapon->GetHUD();
Fvector FP,SP,FP2;
CKinematics* V = smart_cast<CKinematics*>(pWpnHud->Visual());
VERIFY (V);
V->CalculateBones ();
// fire point&direction
Fmatrix& fire_mat = V->LL_GetTransform(u16(pWpnHud->FireBone()));
Fmatrix& parent = pWpnHud->Transform ();
const Fvector& fp = pWpnHud->FirePoint();
const Fvector& fp2 = pWpnHud->FirePoint2();
const Fvector& sp = pWpnHud->ShellPoint();
fire_mat.transform_tiny (FP,fp);
parent.transform_tiny (FP);
fire_mat.transform_tiny (FP2,fp2);
parent.transform_tiny (FP2);
fire_mat.transform_tiny (SP,sp);
parent.transform_tiny (SP);
RCache.dbg_DrawAABB(FP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(255,0,0));
RCache.dbg_DrawAABB(FP2,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,0,255));
RCache.dbg_DrawAABB(SP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(0,255,0));
}else{
Fvector FP = m_pWeapon->get_CurrentFirePoint();
Fvector FP2 = m_pWeapon->get_CurrentFirePoint2();
Fvector SP = m_pWeapon->get_LastSP();
RCache.dbg_DrawAABB(FP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(255,0,0));
RCache.dbg_DrawAABB(FP2,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,0,255));
RCache.dbg_DrawAABB(SP,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,255,0));
}
}
}
示例9: if
//.........这里部分代码省略.........
Fmatrix mView;
Fvector v_C, v_Cs, v_N;
v_C.set (R.C);
v_Cs = v_C;
v_C.y += P_cam_dist;
v_N.set (0,0,1);
VERIFY (_valid(v_C) && _valid(v_Cs) && _valid(v_N));
// validate
Fvector v;
v.sub (v_Cs,v_C);;
#ifdef DEBUG
if ((v.x*v.x+v.y*v.y+v.z*v.z)<=flt_zero) {
CObject* OO = dynamic_cast<CObject*>(R.O);
Msg("Object[%s] Visual[%s] has invalid position. ",*OO->cName(),*OO->cNameVisual());
Fvector cc;
OO->Center(cc);
Log("center=",cc);
Log("visual_center=",OO->Visual()->getVisData().sphere.P);
Log("full_matrix=",OO->XFORM());
Log ("v_N",v_N);
Log ("v_C",v_C);
Log ("v_Cs",v_Cs);
Log("all bones transform:--------");
CKinematics* K = dynamic_cast<CKinematics*>(OO->Visual());
for(u16 ii=0; ii<K->LL_BoneCount();++ii){
Fmatrix tr;
tr = K->LL_GetTransform(ii);
Log("bone ",K->LL_BoneName_dbg(ii));
Log("bone_matrix",tr);
}
Log("end-------");
}
#endif
// handle invalid object-bug
if ((v.x*v.x+v.y*v.y+v.z*v.z)<=flt_zero) {
// invalidate record, so that object will be unshadowed, but doesn't crash
R.dwTimeValid = Device.dwTimeGlobal;
LT->shadow_recv_frame = Device.dwFrame-1;
LT->shadow_recv_slot = -1;
continue ;
}
mView.build_camera (v_C,v_Cs,v_N);
RCache.set_xform_view (mView);
// Select slot, set viewport
int s_x = c_it%P_o_line;
int s_y = c_it/P_o_line;
D3DVIEWPORT9 VP = {s_x*P_o_size,s_y*P_o_size,P_o_size,P_o_size,0,1 };
CHK_DX (HW.pDevice->SetViewport(&VP));
// Clear color to ambience
Fvector& cap = LT->get_approximate();
CHK_DX (HW.pDevice->Clear(0,0, D3DCLEAR_TARGET, color_rgba_f(cap.x,cap.y,cap.z, (cap.x+cap.y+cap.z)/4.f), 1, 0 ));
// calculate uv-gen matrix and clamper
Fmatrix mCombine; mCombine.mul (mProject,mView);
Fmatrix mTemp;
float fSlotSize = float(P_o_size)/float(P_rt_size);