From 493d3b36517fdc82b6a9e99c1ff66742557b971e Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 6 Aug 2012 17:08:57 -0700 Subject: PATH-842, VWR-29431: BUGFIX Correcting a regression introduced by the fix for PATH-542. The viewer calculated rotation resulting from an object's angular velocity was being incorrectly reset when the corresponding object update was received. With this bugfix, the rotation resulting from the angular velocity is accumulated separately and is re-appplied when the object update resets the object's rotation. --- indra/newview/llviewerobject.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'indra/newview/llviewerobject.cpp') diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 31e4fd1ed5..fc8192f14b 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -236,6 +236,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe mNumFaces(0), mTimeDilation(1.f), mRotTime(0.f), + mAngularVelocityRot(), mJointInfo(NULL), mState(0), mMedia(NULL), @@ -266,6 +267,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe { mPositionAgent = mRegionp->getOriginAgent(); } + resetRot(); LLViewerObject::sNumObjects++; } @@ -2071,14 +2073,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, if (new_rot != getRotation() || new_angv != old_angv) { - if (new_rot != getRotation()) + if (new_angv != old_angv) { - setRotation(new_rot); + resetRot(); } - + + // Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) + setRotation(new_rot * mAngularVelocityRot); setChanged(ROTATED | SILHOUETTE); - - resetRot(); } @@ -5533,8 +5535,13 @@ void LLViewerObject::applyAngularVelocity(F32 dt) ang_vel *= 1.f/omega; + // calculate the delta increment based on the object's angular velocity dQ.setQuat(angle, ang_vel); + + // accumulate the angular velocity rotations to re-apply in the case of an object update + mAngularVelocityRot *= dQ; + // Just apply the delta increment to the current rotation setRotation(getRotation()*dQ); setChanged(MOVED | SILHOUETTE); } @@ -5543,6 +5550,9 @@ void LLViewerObject::applyAngularVelocity(F32 dt) void LLViewerObject::resetRot() { mRotTime = 0.0f; + + // Reset the accumulated angular velocity rotation + mAngularVelocityRot.loadIdentity(); } U32 LLViewerObject::getPartitionType() const -- cgit v1.2.3 From 094c717ea88c3736f885d8fef417ff73328adc6a Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 14 Aug 2012 19:10:46 -0700 Subject: PATH-842: Another tweak to get the llSetTargetOmega functionality working in the viewer. --- indra/newview/llviewerobject.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'indra/newview/llviewerobject.cpp') diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index fc8192f14b..bbbf071570 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2075,7 +2075,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, { if (new_angv != old_angv) { - resetRot(); + resetRotTime(); } // Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) @@ -5547,9 +5547,14 @@ void LLViewerObject::applyAngularVelocity(F32 dt) } } -void LLViewerObject::resetRot() +void LLViewerObject::resetRotTime() { mRotTime = 0.0f; +} + +void LLViewerObject::resetRot() +{ + resetRotTime(); // Reset the accumulated angular velocity rotation mAngularVelocityRot.loadIdentity(); -- cgit v1.2.3 From 6df52172c1509c902f9dafa9277981532a72a9d6 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 17 Aug 2012 15:43:13 -0700 Subject: MAINT-1439: BUGFIX Correcting Kart 1.0 issue with physical objects using angular velocity. --- indra/newview/llviewerobject.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'indra/newview/llviewerobject.cpp') diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index bbbf071570..6c4e70add0 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2075,7 +2075,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, { if (new_angv != old_angv) { - resetRotTime(); + if (flagUsePhysics()) + { + resetRot(); + } + else + { + resetRotTime(); + } } // Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) -- cgit v1.2.3 From e4230e640aacda728c860ae43efaf7b8cd24f217 Mon Sep 17 00:00:00 2001 From: callum Date: Wed, 29 Aug 2012 11:16:22 -0700 Subject: MAINT-1455 FIX Media Texture not visually updated correctly Reviewed by me. (Bao created) --- indra/newview/llviewerobject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llviewerobject.cpp') diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 67c87a6c63..e8c3d8e99f 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -4205,7 +4205,7 @@ S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost hos return retval; } - +//virtual void LLViewerObject::changeTEImage(S32 index, LLViewerTexture* new_image) { if(index < 0 || index >= getNumTEs()) -- cgit v1.2.3