// --[ Method ]--------------------------------------------------------------- // // - Class : CMatrix // // - prototype : void Transform(CPlane* plane) // // - Purpose : Transforms a plane. // // ----------------------------------------------------------------------------- void CMatrix::Transform(CPlane* plane) const { CVector3 planePoint; // Get a point of the plane: if(IS_ZERO(plane->A()) == false) { planePoint.Set(-plane->D() / plane->A(), 0.0f, 0.0f); } else if(IS_ZERO(plane->B()) == false) { planePoint.Set(0.0f, -plane->D() / plane->B(), 0.0f); } else if(IS_ZERO(plane->C()) == false) { planePoint.Set(0.0f, 0.0f, -plane->D() / plane->C()); } // Transform both point of the plane and plane's normal. CVector3 normal = plane->Normal(); Transform(&planePoint); Transform(&normal, true); plane->Build(planePoint, normal); }
void CGround::Update() { CVector3 pos; pos.Set(0.0f, -0.5f, 0.0f); m_box.SetPosition(pos); m_box.UpdateWorldMatrix(); }
// Update ===================================================== XSIPLUGINCALLBACK CStatus sn_squashstretch2_op_Update( CRef& in_ctxt ) { // Inputs ------------------------- OperatorContext ctxt( in_ctxt ); KinematicState k = (CRef)ctxt.GetInputValue(0); CTransformation t = k.GetTransform(); KinematicState parent_kine = (CRef)ctxt.GetInputValue(1); CTransformation parent_trans = parent_kine.GetTransform(); CVector3 parent_scl = parent_trans.GetScaling(); double blend = ctxt.GetParameterValue(L"blend"); double driver = ctxt.GetParameterValue(L"driver"); double driver_min = ctxt.GetParameterValue(L"driver_min"); double driver_ctr = ctxt.GetParameterValue(L"driver_ctr"); double driver_max = ctxt.GetParameterValue(L"driver_max"); double axis = ctxt.GetParameterValue(L"axis"); double stretch = ctxt.GetParameterValue(L"stretch"); double squash = ctxt.GetParameterValue(L"squash"); // Ratio --------------------------- double st_ratio = clamp(max(driver - driver_ctr, 0) / max(driver_max - driver_ctr, 0.0001), 0,1); double sq_ratio = clamp(max(driver_ctr - driver, 0) / max(driver_ctr - driver_min, 0.0001), 0,1); squash *= sq_ratio; stretch *= st_ratio; CVector3 scl; scl.Set(parent_scl.GetX(), parent_scl.GetY(), parent_scl.GetZ()); if (axis != 0) scl.PutX(parent_scl.GetX() * max( 0, 1.0 + squash + stretch )); if (axis != 1) scl.PutY(parent_scl.GetY() * max( 0, 1.0 + squash + stretch )); if (axis != 2) scl.PutZ(parent_scl.GetZ() * max( 0, 1.0 + squash + stretch )); scl.LinearlyInterpolate(parent_scl, scl, blend); t.SetScaling(scl); KinematicState outKine(ctxt.GetOutputTarget()); outKine.PutTransform(t); return CStatus::OK; }
void CTestBoxRender::Start() { m_angle = 0; m_box.Create(CVector3(100.0f, 1.0f, 100.0f), 0xFFFFFFFF, true); m_pEffect = CEngine::Instance().EffectManager().LoadEffect("Assets/presetShader/ColorNormalPrim.fx"); //カメラを初期化。 { CVector3 cameraPos; CVector3 cameraTarget; cameraPos.Set(0.0f, 5.0f, -10.0f); cameraTarget = cameraPos; cameraTarget.z = 0.0f; m_camera.SetPosition(cameraPos); m_camera.SetTarget(CVector3::Zero); m_camera.SetUp(CVector3::Up); m_camera.SetFar(100000.0f); m_camera.SetNear(0.1f); m_camera.SetViewAngle(CMath::DegToRad(45.0f)); m_camera.Update(); } //ライトを初期化。 { /* CVector3 lightDir; m_light.SetDiffuseLightColor(0, CVector4(0.6f, 0.6f, 0.6f, 1.0f)); lightDir = CVector3::AxisY; m_light.SetDiffuseLightDirection(0, lightDir); m_light.SetDiffuseLightColor(1, CVector4(5.6f, 0.6f, 0.6f, 1.0f)); lightDir = CVector3::AxisX; lightDir.Scale(-1.0f); m_light.SetDiffuseLightDirection(1, lightDir); m_light.SetDiffuseLightColor(2, CVector4(10.6f, 0.6f, 0.6f, 1.0f)); lightDir.Add( CVector3::AxisX, CVector3::AxisZ); lightDir.Normalize(); m_light.SetDiffuseLightDirection(2, lightDir); m_light.SetDiffuseLightColor(3, CVector4(1.0f, 1.0f, 0.6f, 1.0f)); lightDir = CVector3::AxisY; lightDir.Scale(-1.0f); lightDir.Normalize(); m_light.SetDiffuseLightDirection(3, lightDir);*/ m_light.SetAmbinetLight(CVector3(0.8f, 0.8f, 0.8f)); } m_idMapModel.Create( m_box.GetPrimitive() ); }
void CTestBoxRender::Update() { m_angle += CMath::PI / 360.0f; CQuaternion rot; CVector3 pos; pos.Set(0.0f, -0.5f, 0.0f); //rot.SetRotation(CVector3::AxisX, m_angle); //m_box.SetRotation(rot); m_box.SetPosition(pos); m_box.UpdateWorldMatrix(); CMatrix mMVP = m_camera.GetViewProjectionMatrix(); const CMatrix& mWorld = m_box.GetWorldMatrix(); mMVP.Mul(mWorld, mMVP); m_idMapModel.SetWVPMatrix(mMVP); tkEngine::CEngine::Instance().IDMap().Entry(&m_idMapModel); }
void EnemyStateDamage::Enter(const SEnterArg& enterArg) { IEnemyState::Enter(enterArg); dmgCollisionGroupID = enterArg.arg[0]; enemy->PlayAnimationForce(Enemy::enAnimDamage); const EnemyParam* enemyParam = enemy->GetEnemyParam(); CMatrix* m = enemy->FindBoneWorldMatrix(enemyParam->bloodEffectBoneName); if (m != NULL) { //パーティクルエミッターを登録。 for (SParicleEmitParameter& param : bloodEmitterParam) { CParticleEmitter* particleEmitter = NewGO<CParticleEmitter>(0); CVector3 pos; pos.Set(m->m[3][0], m->m[3][1], m->m[3][2]); particleEmitter->Init(g_random, g_camera->GetCamera(), param, pos); particleEmitterList.push_back(particleEmitter); } } }
CVector3 rotateVectorAlongAxis(CVector3 v, CVector3 axis, double a) { // Angle as to be in radians double sa = sin(a / 2.0); double ca = cos(a / 2.0); CQuaternion q1, q2, q2n, q; CVector3 out; q1.Set(0, v.GetX(), v.GetY(), v.GetZ()); q2.Set(ca, axis.GetX() * sa, axis.GetY() * sa, axis.GetZ() * sa); q2n.Set(ca, -axis.GetX() * sa, -axis.GetY() * sa, -axis.GetZ() * sa); q.Mul(q2, q1); q.MulInPlace(q2n); out.Set(q.GetX(), q.GetY(), q.GetZ()); return out; }
void CFootBotEntity::SetLedPosition() { /* Set LED positions */ const CVector3& cEntityPosition = GetEmbodiedEntity().GetPosition(); CVector3 cLEDPosition; CRadians cLEDAnglePhase = FOOTBOT_HALF_LED_ANGLE_SLICE + m_cTurretRotation; CRadians cLEDAngle; SET_RING_LED_POSITION(0); SET_RING_LED_POSITION(1); SET_RING_LED_POSITION(2); SET_RING_LED_POSITION(3); SET_RING_LED_POSITION(4); SET_RING_LED_POSITION(5); SET_RING_LED_POSITION(6); SET_RING_LED_POSITION(7); SET_RING_LED_POSITION(8); SET_RING_LED_POSITION(9); SET_RING_LED_POSITION(10); SET_RING_LED_POSITION(11); /* Set beacon position */ cLEDPosition.Set(0.0f, 0.0f, FOOTBOT_BEACON_ELEVATION); cLEDPosition.Rotate(m_pcEmbodiedEntity->GetOrientation()); cLEDPosition += cEntityPosition; m_pcLEDEquippedEntity->SetLedPosition(12, cLEDPosition); }