当前位置: 首页>>代码示例>>C++>>正文


C++ AVector::Y方法代码示例

本文整理汇总了C++中AVector::Y方法的典型用法代码示例。如果您正苦于以下问题:C++ AVector::Y方法的具体用法?C++ AVector::Y怎么用?C++ AVector::Y使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AVector的用法示例。


在下文中一共展示了AVector::Y方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: SetVelocity

//----------------------------------------------------------------------------
void FMODSound::SetVelocity (const AVector &velocity)
{
    FMOD_VECTOR vec;
    vec.x = velocity.X();
    vec.y = velocity.Y();
    vec.z = velocity.Z();

    if (mChannel)
        mChannel->set3DAttributes(0, &vec);
}
开发者ID:whztt07,项目名称:Phoenix3D_2.0,代码行数:11,代码来源:PX2SoundSystemFMOD.cpp

示例2: UpdateWorldData

//----------------------------------------------------------------------------
void Soundable::UpdateWorldData(double applicationTime, double elapsedTime)
{
	Movable::UpdateWorldData(applicationTime, elapsedTime);

	if (mSound)
		mSound->SetPosition(WorldTransform.GetTranslate());

	const APoint &listenPos = SoundSystem::GetSingleton().GetListenerPos();

	if (!Is3D())
	{
		AVector dir = WorldTransform.GetTranslate() - listenPos;

		if (!mDistanceUseX)
			dir.X() = 0.0f;

		if (!mDistanceUseY)
			dir.Y() = 0.0f;

		if (!mDistanceUseZ)
			dir.Z() = 0.0f;

		float dist = dir.Length();

		SoundableController *sCtrl = DynamicCast<SoundableController>(GetEffectableController());
		const SoundableObject *sObj = sCtrl->GetSoundableObject();
		if (sObj)
		{
			float curVolume = sObj->Volume;
			float volume = curVolume;

			if (dist < mMinDistance)
			{
				volume = curVolume;
			}
			else if (mMinDistance<=dist && dist<=mMaxDistance)
			{
				float range = mMaxDistance - mMinDistance;
				if (range <= 0.0f)
					range = 0.0f;

				volume = curVolume * (1.0f - (dist - mMinDistance)/range);
			}
			else if (dist > mMaxDistance)
			{
				volume = 0.0f;
			}

			if (mSound)
			{
				mSound->SetVolume(volume);
			}
		}
	}
}
开发者ID:PhoenixSteam,项目名称:Phoenix3D,代码行数:56,代码来源:PX2Soundable.cpp

示例3: Update

//----------------------------------------------------------------------------
bool PushTransformController::Update(double applicationTime, 
	double elapsedTime1)
{
	if (!Controller::Update(applicationTime, elapsedTime1))
		return false;

	if (mVelocity == AVector::ZERO)
		return true;

	float elapsedTime = (float)elapsedTime1;

	AVector velocityDis = mVelocity*elapsedTime;
	AVector movedDis;

	if (IsXY())
	{
		movedDis.X() = velocityDis.X();
		movedDis.Y() = velocityDis.Y();
	}
	else
	{
		movedDis.X() = velocityDis.X();
		movedDis.Z() = velocityDis.Z();
	}

	OnMoving(movedDis);
	
	// 减小速度
	AVector vecTemp = mVelocity;
	float vecLength = vecTemp.Normalize();
	vecLength -= mFriction * elapsedTime;
	if (vecLength <= 0.0f)
	{
		SetVelocity(AVector::ZERO);
	}
	else
	{
		SetVelocity(vecTemp * vecLength);
	}

	return true;
}
开发者ID:JamShan,项目名称:Phoenix3D_2.1,代码行数:43,代码来源:PX2PushTransformController.cpp

示例4: GetSmallTransDir

//----------------------------------------------------------------------------
AVector InputPushTransformController::GetSmallTransDir()
{
	Movable *movable = DynamicCast<Movable>(mObject);
	if (!movable)
		AVector::ZERO;

	APoint curPos = movable->LocalTransform.GetTranslate();

	AVector moveDir = AVector::ZERO;
	if (curPos.X() < mMinPosSmall.X())
	{
		moveDir.X() = mMinPosSmall.X() - curPos.X();
	}

	if (curPos.Y() < mMinPosSmall.Y())
	{
		moveDir.Y() = mMinPosSmall.Y() - curPos.Y();
	}

	if (curPos.Z() < mMinPosSmall.Z())
	{
		moveDir.Z() = mMinPosSmall.Z() - curPos.Z();
	}

	if (curPos.X()>mMaxPosSmall.X())
	{
		moveDir.X() = mMaxPosSmall.X() - curPos.X();
	}

	if (curPos.Y() > mMaxPosSmall.Y())
	{
		moveDir.Y() = mMaxPosSmall.Y() - curPos.Y();
	}

	if (curPos.Z() > mMaxPosSmall.Z())
	{
		moveDir.Z() = mMaxPosSmall.Z() - curPos.Z();
	}

	return moveDir;
}
开发者ID:PhoenixSteam,项目名称:Phoenix3D,代码行数:42,代码来源:PX2InputPushTransformController.cpp

示例5: trackRotate

//----------------------------------------------------------------------------
void WindowApplication3::RotateTrackBall (float x0, float y0, float x1,
        float y1)
{
	if ((x0 == x1 && y0 == y1) || !mCamera)
	{
		// Nothing to rotate.
		return;
	}

	// Get the first vector on the sphere.
	float length = Mathf::Sqrt(x0*x0 + y0*y0), invLength, z0, z1;
	if (length > 1.0f)
	{
		// Outside the unit disk, project onto it.
		invLength = 1.0f/length;
		x0 *= invLength;
		y0 *= invLength;
		z0 = 0.0f;
	}
	else
	{
		// Compute point (x0,y0,z0) on negative unit hemisphere.
		z0 = 1.0f - x0*x0 - y0*y0;
		z0 = (z0 <= 0.0f ? 0.0f : Mathf::Sqrt(z0));
	}
	z0 *= -1.0f;

	// Use camera world coordinates, order is (D,U,R), so point is (z,y,x).
	AVector vec0(z0, y0, x0);

	// Get the second vector on the sphere.
	length = Mathf::Sqrt(x1*x1 + y1*y1);
	if (length > 1.0f)
	{
		// Outside unit disk, project onto it.
		invLength = 1.0f/length;
		x1 *= invLength;
		y1 *= invLength;
		z1 = 0.0f;
	}
	else
	{
		// Compute point (x1,y1,z1) on negative unit hemisphere.
		z1 = 1.0f - x1*x1 - y1*y1;
		z1 = (z1 <= 0.0f ? 0.0f : Mathf::Sqrt(z1));
	}
	z1 *= -1.0f;

	// Use camera world coordinates, order is (D,U,R), so point is (z,y,x).
	AVector vec1(z1, y1, x1);

	// Create axis and angle for the rotation.
	AVector axis = vec0.Cross(vec1);
	float dot = vec0.Dot(vec1);
	float angle;
	if (axis.Normalize() > Mathf::ZERO_TOLERANCE)
	{
		angle = Mathf::ACos(dot);
	}
	else  // Vectors are parallel.
	{
		if (dot < 0.0f)
		{
			// Rotated pi radians.
			invLength = Mathf::InvSqrt(x0*x0 + y0*y0);
			axis.X() = y0*invLength;
			axis.Y() = -x0*invLength;
			axis.Z() = 0.0f;
			angle = Mathf::PI;
		}
		else
		{
			// Rotation by zero radians.
			axis = AVector::UNIT_X;
			angle = 0.0f;
		}
	}

	// Compute the world rotation matrix implied by trackball motion.  The
	// axis vector was computed in camera coordinates.  It must be converted
	// to world coordinates.  Once again, I use the camera ordering (D,U,R).
	AVector worldAxis =
	    axis.X()*mCamera->GetDVector() +
	    axis.Y()*mCamera->GetUVector() +
	    axis.Z()*mCamera->GetRVector();

	HMatrix trackRotate(worldAxis, angle);

	// Compute the new local rotation.  If the object is the root of the
	// scene, the new rotation is simply the *incremental rotation* of the
	// trackball applied *after* the object has been rotated by its old
	// local rotation.  If the object is not the root of the scene, you have
	// to convert the incremental rotation by a change of basis in the
	// parent's coordinate space.
	const Spatial* parent = mMotionObject->GetParent();
	HMatrix localRot;
	if (parent)
	{
		const HMatrix& parWorRotate = parent->WorldTransform.GetRotate();
//.........这里部分代码省略.........
开发者ID:bazhenovc,项目名称:WildMagic,代码行数:101,代码来源:Wm5WindowApplication3.cpp

示例6: Update

//----------------------------------------------------------------------------
bool InputPushTransformController::Update(double applicationTime, 
	double elapsedTime1)
{
	if (!Controller::Update(applicationTime, elapsedTime1))
		return false;

	float elapsedTime = (float)elapsedTime1;

	if (mIsPressedValid)
	{
		mSampingTiming += elapsedTime;
		if (mSampingTiming >= 0.03f)
		{
			AVector deltaVec = mCurTouchPos - mLastSamplePos;
			mLastSamplePos = mCurTouchPos;

			mTouchMoveSpeed = deltaVec / 0.03f;

			mSampingTiming = 0.0f;
		}
	}

	if (!IsSmallTransScope())
	{
		// 减小速度
		AVector vecTemp = mVelocity;
		float vecLength = vecTemp.Normalize();
		vecLength -= mFriction * elapsedTime;
		if (vecLength <= 0.0f)
		{
			SetVelocity(AVector::ZERO);
		}
		else
		{
			SetVelocity(vecTemp * vecLength);
		}
	}
	else
	{
		if (!mIsPressedValid) // 没有按下
		{
			if (0.0f == mSideMoveLength)
				mSideMoveLength = 1.0f;

			AVector smallDir = GetSmallTransDir();
			if (AVector::ZERO != smallDir)
			{
				float moveDirLength = smallDir.Normalize();
				float adjuge = moveDirLength / mSideMoveLength;

				mVelocity += smallDir * mFriction * adjuge * adjuge * elapsedTime;
			}
		}
		else
		{
			mVelocity = AVector::ZERO;
		}
	}

	AVector velocityDis = mVelocity*elapsedTime;

	AVector movedDis;
	if (IsXY())
	{
		movedDis.X() = velocityDis.X();
		movedDis.Y() = velocityDis.Y();
	}
	else
	{
		movedDis.X() = velocityDis.X();
		movedDis.Z() = velocityDis.Z();
	}

	AVector beforeSmallDir = GetSmallTransDir();

	OnMoving(movedDis);

	if (IsSmallTransScope())
	{
		AVector smallDir = GetSmallTransDir();
		if (smallDir == AVector::ZERO && beforeSmallDir != AVector::ZERO)
		{
			SetVelocity(AVector::ZERO);
		}
	}

	return true;
}
开发者ID:PhoenixSteam,项目名称:Phoenix3D,代码行数:89,代码来源:PX2InputPushTransformController.cpp

示例7: OnEvent

//----------------------------------------------------------------------------
void InputPushTransformController::OnEvent(Event *event)
{
	if (!Active) return;
	if (!IsPlaying()) return;

	Movable *mov = DynamicCast<Movable>(GetControlledable());
	if (!mov) return;

	if (InputEventSpace::IsEqual(event, InputEventSpace::LevelView))
	{
		mIsPressedValid = false;
	}
	else if (InputEventSpace::IsEqual(event, InputEventSpace::MousePressed) ||
		InputEventSpace::IsEqual(event,InputEventSpace::TouchPressed))
	{
		InputEventData data = event->GetData<InputEventData>();

		mIsPressedValid = true;
		mSampingTiming = 0.0f;

		mPressedTime = (float)Time::GetTimeInSeconds();
		mPressedPos = data.MTPos;

		if (mConvertCallback)
		{
			mConvertCallback(mPressedPos, (int)data.MTPos.X(), (int)data.MTPos.Z());
		}

		mCurTouchPos = mPressedPos;
		mLastTouchPos = mCurTouchPos;
		mLastSamplePos = mCurTouchPos;

		SetVelocity(AVector::ZERO);
	}
	else if (InputEventSpace::IsEqual(event, InputEventSpace::MouseReleased) ||
		InputEventSpace::IsEqual(event, InputEventSpace::TouchReleased))
	{
		InputEventData data = event->GetData<InputEventData>();

		mSampingTiming = 0.0f;

		if (!mIsPressedValid) return;

		mIsPressedValid = false;

		mReleasedTime = (float)Time::GetTimeInSeconds();
		mReleasedPos = data.MTPos;

		if (mConvertCallback)
		{
			mConvertCallback(mPressedPos, (int)data.MTPos.X(), (int)data.MTPos.Z());
		}

		float deltaTime = mReleasedTime - mPressedTime;
		if (deltaTime <= 0.0f) deltaTime = 1.0f;

		//AVector speed = mReleasedPos - mPressedPos;
		//speed /= deltaTime;
		AVector speed = mTouchMoveSpeed;
		float judge = 0.0f;
		if (mLockDir != AVector::ZERO)
		{
			judge = mLockDir.Dot(speed);
		}
		else
		{
			judge = speed.Length();
		}
		judge = Mathf::FAbs(judge);

		if (judge >= mPushTriggerSpeed)
		{
			if (mLockDir != AVector::ZERO)
			{
				speed.X() *= mLockDir.X();
				speed.Y() *= mLockDir.Y();
				speed.Z() *= mLockDir.Z();
			}

			SetReleaseVelocity(speed * judge);
		}

		if (IsSmallTransScope() && GetSmallTransDir() != AVector::ZERO)
		{
			SetReleaseVelocity(AVector::ZERO);
		}
	}
	else if (InputEventSpace::IsEqual(event, InputEventSpace::MouseMoved) ||
		InputEventSpace::IsEqual(event, InputEventSpace::TouchMoved))
	{
		InputEventData data = event->GetData<InputEventData>();

		if (!mIsPressedValid) return;

		mCurTouchPos = data.MTPos;

		if (mConvertCallback)
		{
			mConvertCallback(mPressedPos, (int)data.MTPos.X(), (int)data.MTPos.Z());
//.........这里部分代码省略.........
开发者ID:PhoenixSteam,项目名称:Phoenix3D,代码行数:101,代码来源:PX2InputPushTransformController.cpp

示例8: OnMotion

//----------------------------------------------------------------------------
void SceneNodeCtrl::OnMotion(bool leftDown, RenderStep *renderStep,
	PX2::APoint posNow, PX2::APoint posBefore)
{
	PX2_UNUSED(leftDown);
	PX2_UNUSED(renderStep);

	Renderer *renderer = renderStep->GetRenderer();
	Camera *camera = renderStep->GetCamera();

	// 光标移动更新
	if (DT_NONE == mDragType)
	{
		GeoObjFactory factory;

		DragType dt = GetDragType(renderStep, posNow);
		Movable *ctrlMov = 0;
		Float4 colorYellowAlpha = Float4(1.0f, 1.0f, 0.0f, 0.3f);

		if (DT_X == dt)
		{
			ctrlMov = GetCurrentCtrlX();
			factory.UpdateCtrlColor(renderer, ctrlMov, Float4::YELLOW);
		}
		else if (DT_Y == dt)
		{
			ctrlMov = GetCurrentCtrlY();
			factory.UpdateCtrlColor(renderer, ctrlMov, Float4::YELLOW);
		}
		else if (DT_Z == dt)
		{
			ctrlMov = GetCurrentCtrlZ();
			factory.UpdateCtrlColor(renderer, ctrlMov, Float4::YELLOW);
		}
		else if (DT_XY == dt)
		{
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXY(), colorYellowAlpha);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlYZ(), Float4::ZERO);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXZ(), Float4::ZERO);
		}
		else if (DT_YZ == dt)
		{
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlYZ(), colorYellowAlpha);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXY(), Float4::ZERO);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXZ(), Float4::ZERO);
		}
		else if (DT_XZ == dt)
		{
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXZ(), colorYellowAlpha);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXY(), Float4::ZERO);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlYZ(), Float4::ZERO);
		}
		else if (DT_XYZ == dt)
		{
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXYZ(), Float4::YELLOW);
		}
		else if (DT_NONE == dt)
		{
			factory.UpdateCtrlColor(renderer, GetCurrentCtrlX(), Float4::RED);
			factory.UpdateCtrlColor(renderer, GetCurrentCtrlY(), Float4::GREEN);
			factory.UpdateCtrlColor(renderer, GetCurrentCtrlZ(), Float4::BLUE);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXY(), Float4::ZERO);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlYZ(), Float4::ZERO);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXZ(), Float4::ZERO);
			factory.UpdateCtrlColor1(renderer, GetCurrentCtrlXYZ(), Float4::WHITE);
		}

		if (DT_NONE == dt)
		{
			Event *ent = EditEventSpace::CreateEventX(EditEventSpace::SceneNodeDrag);
			ent->SetData<int>(0);
			EventWorld::GetSingleton().BroadcastingLocalEvent(ent);
		}
		else
		{
			Event *ent = EditEventSpace::CreateEventX(EditEventSpace::SceneNodeDrag);
			ent->SetData<int>(1);
			EventWorld::GetSingleton().BroadcastingLocalEvent(ent);
		}
	}

	if (DT_NONE == mDragType) return;
	else
	{
		Event *ent = EditEventSpace::CreateEventX(EditEventSpace::SceneNodeDrag);
		ent->SetData<int>(1);
		EventWorld::GetSingleton().BroadcastingLocalEvent(ent);
	}

	int numObjs = PX2_SELECTION.GetNumObjects();
	if (0 == numObjs) 
		return;

	// get pickPoint with the plane
	TriMesh *meshHelp = PX2_GR.GetXYPlane();
	if (DT_X == mDragType)
	{
		if (LT_PERSPECTIVE == mLookType || LT_TOP == mLookType)
			meshHelp = PX2_GR.GetXYPlane();
		else if (LT_FRONT == mLookType)
//.........这里部分代码省略.........
开发者ID:JamShan,项目名称:Phoenix3D_2.1,代码行数:101,代码来源:PX2SceneNodeCtrl.cpp


注:本文中的AVector::Y方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。