Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by fronzu · Jul 03, 2017 at 09:33 AM · rotationsmoothslerpfiltercompass

Filter rotation without Slerp

Hi!

I'd like to filter the compass heading value to have a smooth rotation, but using Slerp causes too much lag.

I tried to implement a manual filter using an Alpha value, but the problem in this case is that when passing from 359 deg to 0, the view does a full 360 degrees rotation, and this is obviously not what I want. The filter I wrote is this: float filteredHeading = (m_Alpha * m_OldHeading) + ((1 - m_Alpha) * heading); m_OldHeading = filteredHeading;

Is there a way to filter the rotation without a smoothing of the Slerp function and without the "jump" of the manual filter?

Thanks in advance and have a nice day!

Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Namey5 · Jul 04, 2017 at 10:23 AM 0
Share

Well, you could try Quaternion.Lerp ins$$anonymous$$d. What exactly do you mean by 'lag' when referring to Slerp?

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Ruben_Chris · Aug 03, 2017 at 01:49 PM

The following code will use SmoothDamp for smooth rotation and is frame independent (I only have the script for C#):

 public static Vector4 ToVector4 (this Quaternion quaternion) {
     return new Vector4 (quaternion.x, quaternion.y, quaternion.z, quaternion.w);
 }
 
 public static Quaternion ToQuaternion (this Vector4 vector) {
     return new Quaternion (vector.x, vector.y, vector.z, vector.w);
 }
 
 public static Vector4 SmoothDamp (Vector4 current, Vector4 target, ref Vector4 currentVelocity, float smoothTime) {
     float x = Mathf.SmoothDamp (current.x, target.x, ref currentVelocity.x, smoothTime);
     float y = Mathf.SmoothDamp (current.y, target.y, ref currentVelocity.y, smoothTime);
     float z = Mathf.SmoothDamp (current.z, target.z, ref currentVelocity.z, smoothTime);
     float w = Mathf.SmoothDamp (current.w, target.w, ref currentVelocity.w, smoothTime);
 
     return new Vector4 (x, y, z, w);
 }
 
 public static Quaternion SmoothDamp (Quaternion current, Quaternion target, ref Vector4 currentVelocity, float smoothTime) {
     Vector4 smooth = SmoothDamp (current.ToVector4 (), target.ToVector4 (), ref currentVelocity, smoothTime);
     return smooth.ToQuaternion ();
 }

How to use it:

 private Quaternion currentRotation; // The current rotation
 private Quaternion targetRotation; // The rotation it is going towards
 private float rotationV; // Current rotation velocity
 private float smoothTime = 0.5f; // Smooth value between 0 and 1
 
 void Start () {
     // Set currentRotation and targetRotation
     currentRotation = transform.position;
     targetRotation = someValue;
 }
 
 void Update () {
     currentRotation = SmoothDamp (currentRotation, targetRotation, ref rotationV, smoothTime); // Smoothly change the currentRotation towards the value of targetRotation
     
     transform.rotation = currentRotation; // Or whatever it is you are trying to rotate
 }

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

86 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Continously correct rotation 3 Answers

Choppy rotation of character around y-axis 1 Answer

Quaternion Rotation Smooth 1 Answer

HoloLens - Smooth Rotation doesn't work 0 Answers

Smooth rotation problem 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges