คำถามติดแท็ก quaternion

โครงสร้างทางคณิตศาสตร์ระบบจำนวน ในควอเทอร์เนียนกราฟิก 3 มิติใช้ร่วมกับเวกเตอร์และเมทริกซ์ ประโยชน์อย่างหนึ่งของควอเทอร์เนียนคือการเอาชนะปัญหาการหมุนบางอย่าง (เรียกว่า gimbal locks) ที่มีอยู่ในเวกเตอร์และเมทริกซ์

1
จัดวางโมเดลเพื่อเผชิญหน้ากับเป้าหมาย
ฉันมีสองวัตถุ (เป้าหมายและผู้เล่น) ทั้งสองมีตำแหน่ง (Vector3) และการหมุน (Quaternion) ฉันต้องการให้เป้าหมายหมุนและหันไปทางขวาที่โปรแกรมเล่น เป้าหมายเมื่อมีบางสิ่งบางอย่างควรยิงไปที่ผู้เล่น ฉันได้เห็นตัวอย่างของการเล่น slerping กับผู้เล่นมากมาย แต่ฉันไม่ต้องการการหมุนแบบเพิ่มขึ้นดีฉันคิดว่ามันจะโอเคตราบใดที่ฉันสามารถทำให้ slerp เป็น 100% และตราบใดที่มันใช้งานได้จริง FYI - ฉันสามารถใช้ตำแหน่งและการหมุนเพื่อทำสิ่งอื่นมากมายและมันใช้งานได้ดีมากยกเว้นชิ้นสุดท้ายที่ฉันไม่สามารถหาได้ ตัวอย่างโค้ดทำงานในคลาสของเป้าหมาย, ตำแหน่ง = ตำแหน่งเป้าหมาย, Avatar = ผู้เล่น แก้ไข ตอนนี้ฉันใช้รหัส c # ของ Maik ที่เขาให้มาและใช้งานได้ดี!
28 xna  c#  3d  models  quaternion 

5
การหมุนเวกเตอร์ 3 โดยควอเทอเนียน
ฉันพยายามหมุนเวกเตอร์ 3 ด้วย quaternion ที่กำหนด ฉันรู้ว่านี่เป็นเรื่องจริง โวลต์'= q⋅ v ⋅ q- 1โวลต์'=Q⋅โวลต์⋅Q-1 v' = q \cdot v \cdot q^{-1} ฉันรู้ว่าเป็นสิ่งที่ตรงกันข้ามที่แต่ฉันจะแมปการคูณเวกเตอร์กับควอเทอเรียนเพื่อกลับเวกเตอร์ได้อย่างไร?Q- 1Q-1 q^{-1} - คิวm a gn ฉันt U วันที่e ( q)-Qม.aก.nผมเสื้อยูdอี(Q) \frac {-q} {magnitude(q)} ฉันได้พบว่าคุณสามารถปฏิบัติต่อเป็นเมทริกซ์และแปลงและเป็นเมทริกซ์แล้วแปลงจากเมทริกซ์เป็นเวกเตอร์ได้ แต่นี่ดูเหมือนจะน้อยกว่าด้านบนเพื่อรับเวกเตอร์ มีการนำไปใช้ที่สะอาดกว่าที่ฉันสามารถใช้ได้หรือไม่?โวลต์โวลต์vQQqQ'Q'q'โวลต์'โวลต์'v'
25 c++  quaternion 

2
ใช้ Quaternions: ฉันจะทำอะไรกับพวกเขา? (ไม่มีคณิตศาสตร์)
ฉันเป็นนักพัฒนาเกมและไม่ได้เรียนวิชาคณิตศาสตร์ ดังนั้นฉันต้องการใช้ Quaternions เป็นเครื่องมือเท่านั้น และเพื่อให้สามารถทำงานกับการหมุน 3 มิติได้จำเป็นต้องใช้ Quaternions (หรือเมทริกซ์ แต่ให้อยู่ที่ Quaternions ที่นี่ในคำถามนี้) ฉันคิดว่ามันสำคัญสำหรับนักพัฒนาหลายคนที่จะใช้พวกเขา นั่นเป็นเหตุผลที่ฉันต้องการแบ่งปันความรู้ของฉันและหวังว่าจะเติมเต็มช่องว่างที่ฉันมี ตอนนี้ .... เท่าที่ฉันเข้าใจ: Quaternion สามารถอธิบาย 2 สิ่ง: การวางแนวปัจจุบันของวัตถุ 3 มิติ การแปลงการหมุนที่วัตถุทำได้ (rotationChange) คุณสามารถทำอะไรกับ Quaternion: คูณ: Quaternion endOrientation = การหมุน QuaternionChange * Quaternion currentOrientation; ตัวอย่างเช่น: วัตถุ 3 มิติของฉันหันไปทางซ้าย 90 องศา - และการหมุนของฉันฉันคูณคือการหมุน 180 องศาไปทางขวาในที่สุดวัตถุ 3 มิติของฉัน 90 …

6
คุณจะมองภาพ quaternion ได้อย่างไร?
เมื่อฉันมองเห็นเมทริกซ์การหมุนสามมิติหรือเมทริกซ์มาตราส่วนฉันเห็นภาพมันเป็นสามแกน มีวิธีที่คล้ายกันที่ฉันสามารถเห็นภาพ quaternion หมุน?

4
จะป้องกันไม่ให้กล้อง FPS ที่ใช้ Quaternion ของฉันเอียงและทำให้ยุ่งเหยิงได้อย่างไร
ฉันกำลังใช้กล้องที่เหมือน FPS และใช้งาน quaternions แต่เมื่อใดก็ตามที่ฉันลองมองหาและจากนั้นไปด้านข้างมันจะเอียงและบางครั้งมันอาจกลับหัวกลับหาง ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

2
ทำไมผู้คนถึงใช้ quaternions
ฉันใช้มันเป็นกล่องดำซักพักฉันเรียนรู้คณิตศาสตร์ แต่ฉันต้องการคำตอบที่ชัดเจนสำหรับคำถามนี้ จนถึงประโยชน์เพียงอย่างเดียวที่ฉันได้พบเจอเป็นการส่วนตัวคือความสามารถในการ SLERP ระหว่างสองมุม - เพื่อให้ได้เอฟเฟกต์แบบเดียวกันกับเวกเตอร์ที่คุณต้องทำงานอย่างน่าเกลียด

2
ฉันจะหมุนรอบจุดโดยพลการในแบบ 3 มิติ (แทนที่จะเป็นจุดกำเนิด) ได้อย่างไร
ฉันมีบางรุ่นที่ฉันต้องการหมุนโดยใช้ quaternions ในลักษณะปกติยกเว้นการหมุนเกี่ยวกับจุดกำเนิดฉันต้องการให้ออฟเซ็ตเล็กน้อย ฉันรู้ว่าคุณไม่ได้พูดว่าในพื้นที่ 3 มิติที่คุณหมุนรอบจุด; คุณบอกว่าคุณหมุนรอบแกน ดังนั้นฉันจึงจินตนาการว่ามันหมุนไปรอบ ๆ เวกเตอร์ซึ่งหางอยู่ในตำแหน่งที่ไม่ได้มาจากแหล่งกำเนิด การแปลงเลียนแบบทั้งหมดในเครื่องมือเรนเดอร์ / ฟิสิกส์ของฉันถูกเก็บไว้โดยใช้ SQT (สเกล, quaternion, การแปลความคิดที่ยืมมาจากหนังสือGame Engine Architecture ) ดังนั้นฉันจึงสร้างเมทริกซ์แต่ละเฟรมจากส่วนประกอบเหล่านี้ ในระบบนี้การแปลจะถูกนำไปใช้จากนั้นปรับขนาดแล้วหมุน ในกรณีเฉพาะฉันต้องแปลวัตถุในอวกาศโลกหมุนและหมุนรอบจุดยอดที่ไม่ได้อยู่กึ่งกลางที่จุดกำเนิดของวัตถุ คำถาม:ด้วยข้อ จำกัด ของระบบปัจจุบันของฉันที่อธิบายไว้ข้างต้นฉันจะบรรลุการหมุนเวียนในท้องถิ่นโดยมีศูนย์กลางที่จุดใดจุดหนึ่งนอกเหนือจากจุดกำเนิดได้อย่างไร โหวตอัตโนมัติให้กับทุกคนที่สามารถอธิบายวิธีการทำเช่นนี้โดยใช้เมทริกซ์เท่านั้นเช่นกัน :)

3
ฉันจะใช้กล้องที่มีพื้นฐานเป็น quaternion ได้อย่างไร
อัพเดทข้อผิดพลาดที่นี่เป็นเรื่องง่าย ฉันพลาดเรเดียนถึงการแปลงองศา ไม่จำเป็นต้องอ่านทุกอย่างถ้าคุณมีปัญหาอื่น ฉันดูบทเรียนหลายอย่างเกี่ยวกับเรื่องนี้และเมื่อฉันคิดว่าฉันเข้าใจฉันพยายามที่จะใช้กล้องที่เป็น quaternion ปัญหาคือมันทำงานไม่ถูกต้องหลังจากหมุนไปประมาณ 10 องศากระโดดกลับไปที่ -10 องศา ฉันไม่รู้ว่าเกิดอะไรขึ้น ฉันใช้ openTK และมีคลาส quaternion อยู่แล้ว ฉันเป็น noob ที่ opengl ฉันกำลังทำเพื่อความสนุกและไม่เข้าใจ quaternions ดังนั้นฉันอาจจะทำอะไรโง่ ๆ ที่นี่ นี่คือรหัสบางส่วน: (จริงๆแล้วเกือบทั้งหมดรหัสยกเว้นวิธีการที่โหลดและวาด vbo (มันถูกนำมาจากตัวอย่าง OpenTK ที่แสดงให้เห็นถึง vbo-s)) ฉันโหลดลูกบาศก์ลงใน vbo และเริ่มต้น quaternion สำหรับกล้อง protected override void OnLoad(EventArgs e) { base.OnLoad(e); cameraPos = new Vector3(0, 0, 7); …

6
หัวข้อทางคณิตศาสตร์สำหรับการเขียนโปรแกรมกราฟิก 3D [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน4 ปีที่แล้ว ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันเข้าใจว่าต้องใช้หัวข้อทางคณิตศาสตร์ต่อไปนี้ในการเขียนโปรแกรมกราฟิก 3D ฉันเริ่มทำบางอย่างในวิชาคณิตศาสตร์ของฉัน ใครบางคนสามารถชี้ให้ฉันไปในทิศทางของทรัพยากรที่อธิบายได้อย่างไรพวกเขาใช้? ปัญหากราฟิก / เกมใดที่พวกเขาใช้ในการแก้ไข คณิตศาสตร์เวกเตอร์ คณิตศาสตร์เมทริกซ์ quaternions พีชคณิตเชิงเส้น เท่าที่ฉันเห็นเหล่านี้เป็นหัวข้อพีชคณิตเชิงเส้น / เมทริกซ์ มีหัวข้ออื่นที่จำเป็นอีกไหม?

2
การหมุนโดยพลการเกี่ยวกับทรงกลม
ฉันกำลังเขียนรหัสกลไกซึ่งช่วยให้ผู้ใช้สามารถเคลื่อนที่ไปรอบ ๆ พื้นผิวของทรงกลมได้ ตำแหน่งบนทรงกลมปัจจุบันถูกเก็บเป็นthetaและphiโดยที่thetaมุมระหว่างแกน z และการฉาย xz ของตำแหน่งปัจจุบัน (เช่นการหมุนรอบแกน y) และphiเป็นมุมจากแกน y ไปยังตำแหน่ง ฉันอธิบายว่าไม่ดี แต่มันเป็นหลักtheta = yaw,phi = pitch Vector3 position = new Vector3(0,0,1); position.X = (float)Math.Sin(phi) * (float)Math.Sin(theta); position.Y = (float)Math.Sin(phi) * (float)Math.Cos(theta); position.Z = (float)Math.Cos(phi); position *= r; ฉันเชื่อว่านี่ถูกต้อง แต่ฉันอาจผิด rฉันจะต้องสามารถที่จะย้ายในทิศทางหลอกพลสองมิติรอบพื้นผิวของทรงกลมที่จุดกำเนิดของพื้นที่โลกที่มีรัศมี ตัวอย่างเช่นการจับWควรจะย้ายไปรอบ ๆ ทรงกลมในทิศทางขึ้นไปเมื่อเทียบกับทิศทางของผู้เล่น ฉันเชื่อว่าฉันควรใช้ Quaternion เพื่อแสดงตำแหน่ง / …

1
ควอเทอร์เนียนและการหมุนรอบแกนโลก
ข้อจำกัดความรับผิดชอบ: ฉันเป็นโปรแกรมเมอร์เกมมืออาชีพและใช้งาน quaternions เกือบทุกวัน แต่พวกเขาก็ใกล้เคียงกับเวทย์มนตร์ดำสำหรับฉัน ฉันค่อนข้างอยู่บ้านกับคณิตศาสตร์ แต่ตัวเลขในจินตนาการมักทำให้ฉันสับสน ฉันมักจะปฏิบัติต่อ quats ว่ามีประโยชน์และจบลงด้วยการทวีคูณมากกว่าหนึ่งครั้ง ฉันพยายามให้เหตุผลกับพวกเขาเช่นเดียวกับการฝึกอบรมด้วยความสำเร็จที่ จำกัด ทั้งนี้ .... สิ่งที่ทำให้ฉันงุนงงคือต่อไปนี้ เมื่อฉันต้องการหมุนวัตถุรอบ ๆ มันเป็นแกนท้องถิ่นฉันคูณการหมุนด้วย quaternion ที่แสดงถึงการหมุนที่ฉันต้องการใช้ ดังนั้นจึงเป็นการหมุนในพื้นที่ท้องถิ่น ตอนนี้ถ้าฉันต้องการหมุนรอบแกนในอวกาศโลกเหตุผลของฉันก็คือ: หมุนพื้นที่โลกเป็น quaternion ทวีคูณการผกผันของการหมุนวัตถุของฉันด้วย quaternion นี้ สิ่งนี้จะทำให้โลกหมุนของฉันในอวกาศ ทวีคูณการหมุนของฉันด้วยควอเทอร์ชันใหม่นี้ เช่น: newRot = oldRot * (ผกผัน oldRot * worldRot) อย่างไรก็ตามสิ่งที่ฉันต้องทำคือ newRot = oldRot * (ผกผัน oldRot * worldRot) * oldRot ทำไมฉันหลังจากคูณด้วย …
11 quaternion 

1
การย้ายวัตถุไปตามเส้นโค้งในขณะที่หมุน
ฉัน woud ต้องการที่จะย้ายวัตถุไปตามเส้นโค้ง ที่จุดใดจุดหนึ่งบนเส้นโค้งฉันต้องการให้วัตถุเปลี่ยนความเร็วและหมุนตัวเองไปตามแกนของมัน ลองนึกภาพเครื่องบินที่บินไปยังปลายทาง มันมีเส้นทางที่มันจะต้องปฏิบัติตามรวมถึงจะปรับความเร็วและทิศทางของมันตลอดทาง (หัวเรื่อง, แก่น, ธนาคาร) ฉันขอข้อมูลเริ่มต้นได้จาก: สิ่งที่ชนิดของเส้นโค้งเพื่อใช้ในการได้อย่างราบรื่นสอดแทรกวัตถุ สูตรใดที่จะใช้สำหรับการประมาณค่าที่เชื่อถือได้ซึ่งฉันสามารถควบคุมความเร็วของการเคลื่อนที่ของวัตถุได้ ข้อมูลใดที่ควรส่งออกจากแอปพลิเคชันการเขียน 3D ฉันควรใช้ quaternions slerp ()เพื่อสิ่งนี้หรือไม่? หากคุณรู้เกี่ยวกับหนังสือที่ครอบคลุมหัวข้อนี้อย่างมีประสิทธิภาพนั่นจะเป็นหนังสือที่ดีที่สุด ขอขอบคุณ.

2
เนื่องจาก Table.drawDebug เลิกใช้แล้วใน libGDX ฉันควรใช้อะไรแทน
ฉันกำลังติดตามหนังสือ "Learning LibGDX Game Development" เพื่อสร้างเกมอย่างง่าย ฉันอยู่ในส่วนการสร้างเมนูที่เราสร้างสเตจและแสดงผลด้วยเส้นขอบการดีบัก หนังสือเล่มนี้บอกว่าจะใช้Table.drawDebug(stage)แต่วิธีการแบบคงที่นี้ดูเหมือนว่าจะถูกลบออกจากTableชั้นเรียนกรอบทั้งหมด ฉันกำลังนำเข้าcom.badlogic.gdx.scenes.scene2d.ui.Table; ด้านล่างคือรหัสของฉัน: @Override public void render(float deltaTime) { Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if (debugEnabled) { debugRebuildStage -= deltaTime; if (debugRebuildStage <= 0) { debugRebuildStage = DEBUG_REBUILD_INTERVAL; rebuildStage(); } } stage.act(deltaTime); stage.draw(); Table.drawDebug(stage); } บรรทัดสุดท้ายTable.drawDebug(stage);มีข้อผิดพลาดในการรวบรวม"The method drawDebug(ShapeRenderer) in the type Table is …

5
ทำไมฉันไม่สามารถใช้โอเปอเรเตอร์ '> =' กับ Vector3s ได้
ฉันพยายามที่จะได้รับรูปสี่เหลี่ยมผืนผ้าย้ายไปมาระหว่างสองตำแหน่งที่ผมพูดถึงและ_positionA ทั้งสองประเภท_positionB Vector3สี่เหลี่ยมผืนผ้าเคลื่อนไหวได้ดี อย่างไรก็ตามเมื่อมันมาถึง_positionBมันจะไม่เคลื่อนที่ในทิศทางตรงกันข้ามเหมือนอย่างที่ควร ฉันกลับไปที่โค้ดเพื่อดู ฉันมาถึงข้อสรุปว่าเป็นวัตถุย้ายที่ifงบในรหัสพลาดเฟรมซึ่งในตำแหน่ง rects _positionBเท่ากับ ฉันตัดสินใจที่จะปรับเปลี่ยนรหัสไปในทิศทางที่ตรงกันข้ามถ้าตำแหน่ง rects คือมากกว่าหรือเท่ากับ _positionBรหัสของฉันไม่ยาวเกินไปดังนั้นฉันจะแสดงด้านล่าง: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

3
Slerping กระจกหมุน
ฉันหมุนตัวละครเกมของฉันเพื่อดูที่เป้าหมายโดยใช้รหัสต่อไปนี้: transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f) startQuaternion เป็นการหมุนปัจจุบันของตัวละครเมื่อกำหนดเป้าหมายใหม่ lookQuaternion เป็นทิศทางที่ตัวละครควรมองและมันก็เป็นแบบนี้: destinationVector = currentWaypoint.transform.position - transform.position; lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up); TurningNormalizer เพิ่งTime.deltaTimeเพิ่มขึ้นและturningSpeedเป็นค่าคงที่ที่กำหนดในตัวแก้ไข ปัญหาคือในขณะที่ตัวละครเปลี่ยนตามที่ควรจะเป็นส่วนใหญ่มันมีปัญหาเมื่อมันต้องเข้าใกล้ 180 องศา จากนั้นในบางครั้งก็กระวนกระวายใจและสะท้อนการหมุน: ในภาพที่วาดไม่ดีตัวละคร (ด้านขวา) จะเริ่มหันไปทางวงกลมทางด้านซ้าย แทนที่จะแค่หมุนไปทางซ้ายหรือขวามันเริ่มต้น "mirror dance" นี้: มันเริ่มหมุนไปทางด้านหน้าใหม่ จากนั้นมันก็หันไปที่มุมเดียวกันทันที แต่อยู่อีกด้านหนึ่งและหมุนไปเรื่อย ๆ มันเป็นการ“ ทำมิเรอร์” นาน ๆ จนกว่ามันจะมองไปที่เป้าหมาย นี่คือสิ่งที่มี quaternions, slerping / lerping หรืออย่างอื่น? แก้ไข 1: เห็นได้ชัดว่าปัญหาไม่ได้เกิดจากการหมุนของตัวเอง …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.