コード例 #1
0
ファイル: Matrix.cpp プロジェクト: fernandojsg/sgzsourcepack
// --[  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);
}
コード例 #2
0
ファイル: CGround.cpp プロジェクト: KawaharaKiyohara/GamePG_1
void CGround::Update()
{
	CVector3 pos;
	pos.Set(0.0f, -0.5f, 0.0f);
	m_box.SetPosition(pos);
	m_box.UpdateWorldMatrix();
}
コード例 #3
0
// 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;
}
コード例 #4
0
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() );
}
コード例 #5
0
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);
}
コード例 #6
0
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);
		}
	}
}
コード例 #7
0
ファイル: Register.cpp プロジェクト: UIKit0/Gear
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;
}
コード例 #8
0
 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);
 }