Ejemplo n.º 1
0
///@brief Called from the UI to indicate whether the user is holding and dragging
/// the quad around in world space.
void HudQuad::SetHoldingFlag(ovrPosef pose, bool f)
{
    if (f == false)
    {
        m_holding = false;
        return;
    }
    glm::vec3 ro, rd;
    GetHMDEyeRayPosAndDir(pose, ro, rd);
    const glm::mat4 quadposeMatrix = makeMatrixFromPose(GetPose());

    glm::vec2 planePt;
    float tParam;
    const bool hit = GetPaneRayIntersectionCoordinates(quadposeMatrix, ro, rd, planePt, tParam);
    if (hit == true)
    {
        if ((f == true) && (m_holding == false))
        {
            // Just grabbed; store quad's pose at start
            m_holding = true;
            m_hitPtTParam = tParam;
            const ovrVector3f& tx = m_QuadPoseCenter.Position;
            m_planePositionAtGrab = glm::vec3(tx.x, tx.y, tx.z);
            m_hitPtPositionAtGrab = ro + m_hitPtTParam*rd;
        }
    }
}
Ejemplo n.º 2
0
	void AnimationPlayer::Update(const GameTime& gameTime)
	{
		if (mIsPlayingClip)
		{
			assert(mCurrentClip != nullptr);

			mCurrentTime += (static_cast<float>(gameTime.ElapsedGameTime().count()) / 1000.0f) * mCurrentClip->TicksPerSecond();
			if (mCurrentTime >= mCurrentClip->Duration())
			{
				if (mIsClipLooped)
				{
					mCurrentTime = 0.0f;
				}
				else
				{
					mIsPlayingClip = false;
					return;
				}
			}

			if (mInterpolationEnabled)
			{
				GetInterpolatedPose(mCurrentTime, *(mModel->RootNode()));
			}
			else
			{
				GetPose(mCurrentTime, *(mModel->RootNode()));
			}
		}
	}
Ejemplo n.º 3
0
	void AnimationPlayer::GetPose(float time, SceneNode& sceneNode)
	{
		XMFLOAT4X4 toParentTransform;
		Bone* bone = sceneNode.As<Bone>();
		if (bone != nullptr)
		{
			mCurrentKeyframe = mCurrentClip->GetTransform(time, *bone, toParentTransform);
		}
		else
		{
			toParentTransform = sceneNode.Transform();
		}

		XMMATRIX toRootTransform = (sceneNode.GetParent() != nullptr ? XMLoadFloat4x4(&toParentTransform) * XMLoadFloat4x4(&(mToRootTransforms.at(sceneNode.GetParent()))) : XMLoadFloat4x4(&toParentTransform));
		XMStoreFloat4x4(&(mToRootTransforms[&sceneNode]), toRootTransform);

		if (bone != nullptr)
		{
			XMStoreFloat4x4(&(mFinalTransforms[bone->Index()]), bone->OffsetTransformMatrix() * toRootTransform * XMLoadFloat4x4(&mInverseRootTransform));
		}

		for (auto& childNode : sceneNode.Children())
		{
			GetPose(time, *childNode);
		}
	}
Ejemplo n.º 4
0
void DebugEmitterComponent::Render(const UpdateContext& updateContext)
{
	if (!_model)
		return;

	auto parent = GetParentEntity();
	vec3f center = GetModelCenter();
	vec3f desiredPos = parent->GetPosition();
	vec3f desiredScale = parent->GetScale();
	mat4f desiredPose = parent->GetPose();

	enableZTest();
	changeZTest(GL_LEQUAL);

	mat4f ident, NT, T, S, R, x, y, z;
	ident.loadIdentity();
	_matrixStack.PushMatrix(ident);
	//NT.loadTranslation(-center.x, -center.y, -center.z);
	T.loadTranslation(desiredPos.x, desiredPos.y, desiredPos.z);
	S.loadScale(desiredScale.x, desiredScale.y, desiredScale.z);
	R = desiredPose;
	R.m[12] = 0.0f;
	R.m[13] = 0.0f;
	R.m[14] = 0.0f;
	R.m[15] = 1.0f;

	_matrixStack.MultiplyMatrix(T);
	_matrixStack.MultiplyMatrix(S);
	_matrixStack.MultiplyMatrix(R);
	//_matrixStack.MultiplyMatrix(NT);
	//	_matrixStack.MultiplyMatrix(parent->GetTransform());

	/*vec3f rot = parent->GetDirection();
	mat4f xRot, yRot, zRot;

	xRot.loadXRotation(rot.x);
	yRot.loadYRotation(rot.y);
	zRot.loadZRotation(rot.z);

	xRot *= yRot;
	xRot *= zRot;
	_matrixStack.MultiplyMatrix(xRot);*/

	mat4f MV;
	MV = getMatrix(MATRIX_MODEL);
	_RenderNode(_model->RootNode, updateContext);
	_matrixStack.PopMatrix();
	setMatrix(MATRIX_MODEL, MV);
}
Ejemplo n.º 5
0
void CameraControllerBase::UpdateCameraPose( float dt )
{
	if( !m_Active )
		return;

	float forward=0, right=0, up=0, spd;
//	Matrix33 matRot;

	if( (GetAsyncKeyState(VK_SHIFT) & 0x8000) )
		spd = m_fTranslationSpeed * 2.0f;
	else
		spd = m_fTranslationSpeed * 1.0f;

	int *kb = m_CameraControlCode;

	if( IsKeyPressed(kb[CameraControl::Forward]) )     forward =  spd * dt;
	if( IsKeyPressed(kb[CameraControl::Backward]) )    forward = -spd * dt;
	if( IsKeyPressed(kb[CameraControl::Right]) )       right   =  spd * dt;
	if( IsKeyPressed(kb[CameraControl::Left]) )        right   = -spd * dt;
	if( IsKeyPressed(kb[CameraControl::Up]) )          up      =  spd * dt * 3.0f;
	if( IsKeyPressed(kb[CameraControl::Down]) )        up      = -spd * dt * 3.0f;

/*
//	if( GetAsyncKeyState('X') & 0x8000 )	m_fYaw += 3.141592f * dt;
//	if( GetAsyncKeyState('Z') & 0x8000	)	m_fYaw -= 3.141592f * dt;
//	if( GetAsyncKeyState('Q') & 0x8000 )	m_fPitch += 3.141592f * dt;
//	if( GetAsyncKeyState('A') & 0x8000	)	m_fPitch -= 3.141592f * dt;
//	if( GetAsyncKeyState('Q') & 0x8000 )	m_vCameraPosition.y += 2.0f * dt;
//	if( GetAsyncKeyState('A') & 0x8000	)	m_vCameraPosition.y -= 2.0f * dt;
*/
	Matrix34 pose = GetPose();

	pose.matOrient = Matrix33RotationY(m_fYaw) * Matrix33RotationX(m_fPitch);

	pose.vPosition
		+= pose.matOrient.GetColumn(2) * forward
		+  pose.matOrient.GetColumn(0) * right
		+  pose.matOrient.GetColumn(1) * up;

	SetPose( pose );

//	m_Pose.vPosition += m_vRight * m_fMouseMoveRight + m_vUp * m_fMouseMoveUp;
//	m_fMouseMoveRight = 0; m_fMouseMoveUp = 0;
}
Ejemplo n.º 6
0
	inline Matrix34 GetPose() const { Matrix34 pose; GetPose(pose); return pose; }