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

อาร์เรย์ 2 มิติของตัวเลขสัญลักษณ์หรือนิพจน์จัดเรียงเป็นแถวและคอลัมน์ แต่ละแถวต้องมีจำนวนคอลัมน์เท่ากัน ตัวเลขสัญลักษณ์หรือนิพจน์เรียกว่าองค์ประกอบหรือรายการ

9
ทำไมเราถึงย้ายโลกแทนกล้อง
ฉันได้ยินมาว่าในเกม OpenGL สิ่งที่เราทำเพื่อให้ผู้เล่นเคลื่อนไหวไม่ใช่เพื่อขยับกล้อง แต่เพื่อเคลื่อนย้ายโลกทั้งใบ ตัวอย่างเช่นที่นี่เป็นส่วนหนึ่งของบทช่วยสอนนี้: OpenGL View matrix ในชีวิตจริงคุณคุ้นเคยกับการขยับกล้องเพื่อเปลี่ยนมุมมองของฉากหนึ่งใน OpenGL มันเป็นอีกมุมหนึ่ง กล้องใน OpenGL ไม่สามารถเคลื่อนที่ได้และกำหนดให้อยู่ที่ (0,0,0) หันทิศทาง Z เป็นลบ นั่นหมายความว่าแทนที่จะขยับและหมุนกล้องโลกจะถูกขยับและหมุนไปรอบ ๆ กล้องเพื่อสร้างมุมมองที่เหมาะสม ทำไมเราทำเช่นนั้น?

3
ลำดับที่ถูกต้องในการคูณเมทริกซ์การหมุนและการแปลสำหรับเมทริกซ์โลกที่เหมาะสมคืออะไร?
สมมติว่า DirectX เป็นแพลตฟอร์มหากเป็นสิ่งสำคัญ (ค่อนข้างแน่ใจว่าไม่ใช่) สมมติว่าฉันมีสเกลเมทริกซ์การหมุนและการแปลที่เหมาะสมฉันจะคูณพวกมันเพื่อผลในเมทริกซ์โลกที่เหมาะสมและทำไม โดย "เหมาะสม" ฉันหมายถึง "ฉันสามารถโยนพวกเขาลงใน DirectX และรับเฟรม 3D ที่ใช้บ่อยที่สุด"
62 matrix 

6
เหตุใดเราใช้ 4x4 เมทริกซ์เพื่อเปลี่ยนสิ่งต่าง ๆ ในแบบ 3 มิติ
ในการแปลเวคเตอร์ 10 หน่วยในทิศทาง X ทำไมเราต้องใช้เมทริกซ์ เราสามารถเพิ่ม 10 ลงในเสื่อ [0] [0] และเราก็ได้ผลลัพธ์เดียวกัน
36 opengl  3d  matrix 

1
แปลงลำดับการคูณเมทริกซ์
ฉันประสบปัญหาในการพยายามหาลำดับการคูณที่ถูกต้องสำหรับเมทริกซ์การแปลงสุดท้าย ฉันมักจะได้รับการเคลื่อนไหวที่แปลกหรือเรขาคณิตที่บิดเบี้ยว รุ่นปัจจุบันของฉันมีคำอธิบายด้านล่าง: สำหรับโหนดเดียวลำดับการคูณของฉันคือ: L = S * R * T ที่ไหน L = เมทริกการแปลงโลคัล S = เมทริกซ์สเกลท้องถิ่น R = เมทริกซ์การหมุนโลคัล T = เมทริกซ์แปลโลคัล สำหรับการเปลี่ยนแปลงโลกของโหนด: W = PW * L ที่ไหน W = เมทริกซ์การแปลงโลก PW = เมทริกซ์การแปลงโลกผู้ปกครอง L = เมทริกการแปลงโลคัลที่คำนวณข้างต้น เมื่อแสดงผลสำหรับแต่ละโหนดฉันคำนวณเมทริกซ์: MV = Inv (C) * NW ที่ไหน MV = …
21 matrix 

5
เมทริกซ์หมายถึงอะไร
ฉันเริ่มเรียนรู้ OpenGL เมื่อเร็ว ๆ นี้และฉันมีปัญหาในการมองเห็นว่าเมทริกซ์คืออะไรและบทบาทของพวกเขาในคอมพิวเตอร์กราฟิก รับแม่แบบของเมทริกซ์ 4x4 แบบนี้ ฉันคิดว่าแต่ละเมทริกซ์เช่นนี้เป็นพิกัดของจุดยอดในอวกาศโลก และหลายคนรวมตัวกันและให้ร่มเงาให้วัตถุ? แต่ทำไมจึงมีความXxเป็นXyและXz? ฉันอ่านว่าแกนที่แตกต่าง (ขึ้น, ซ้าย, ไปข้างหน้า) แต่ก็ยังไม่สามารถทำให้หัวหรือก้อยของความสำคัญ
19 opengl  matrix 

6
จะหมุนวัตถุรอบแกนโลกได้อย่างไร?
ฉันมี Vector3 ซึ่งมีมุมออยเลอร์สำหรับแต่ละแกน โดยปกติเมื่อฉันต้องการสร้างเมทริกซ์การหมุนฉันจะใช้ฟังก์ชันเช่น D3DXMatrixRotationX ผ่านมุมที่เกี่ยวข้องจากเวกเตอร์การหมุนของฉันด้านบนและคูณเมทริกซ์ (ZXY) เพื่อสร้างเมทริกซ์การหมุนโดยรวมซึ่งใช้ในการสร้างเมทริกซ์การแปลงวัตถุทั้งหมด อย่างไรก็ตามวิธีนี้จะสร้างชุดการหมุนในพื้นที่วัตถุ นั่นคือการส่งเวกเตอร์ (90, 0, 90) ไปยังวิธีการของฉันจะสร้างการหมุนในอวกาศโลกได้อย่างมีประสิทธิภาพ (90, 90, 0) มีวิธีใดที่จะทำให้แน่ใจว่าแต่ละองค์ประกอบของเวกเตอร์การหมุนของฉันส่งผลให้เกิดการหมุนรอบแกนโลกตามแนวแกนอวกาศที่เกี่ยวข้องหรือไม่? แก้ไข: นี่เป็นอนิเมชั่นของสิ่งที่กำลังเกิดขึ้น - ฉันต้องการวิธีหมุนรอบแกนสีน้ำเงินไม่ใช่สีแดง แก้ไข 2: เพียงเพื่อทราบว่าฉันไม่ได้มองหาวิธีการแก้ปัญหาที่เกี่ยวข้องกับมุมออยเลอร์ แต่เพียงวิธีที่ฉันสามารถเป็นตัวแทนการเปลี่ยนแปลงของการหมุนรอบหลายแกนทั่วโลก

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

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

5
มีคำทั่วไปที่ครอบคลุมการจัดการตำแหน่งการหมุนและการปรับขนาดด้วยกันไหม?
ฉันกำลังมองหาชื่อสำหรับชั้นเรียนของฉันที่จัดการเมทริกซ์ 4x4 ที่จัดการตำแหน่งการหมุนและสเกล มีคำทั่วไปที่ครอบคลุมทั้งสามหรือไม่ (ฉันแบ่งคณิตศาสตร์เมทริกซ์เป็นไฟล์ / คลาสของตัวเอง)

3
ฉันจะย้อนกลับผลกระทบของเมทริกซ์การแปลงได้อย่างไร
ฉันเพิ่งทำงานเกมโดยใช้ OpenGL และ C ++ ผ่าน GLFW ในเกมฉันมีเรือบินพร้อมป้อมปืนติดตั้งอยู่ เรือเหาะเคลื่อนที่ไปรอบ ๆ ในพิกัดอวกาศโลกและป้อมปราการ 'ตาม' มัน ป้อมปืนมีพื้นที่ประสานงานเป็นของตัวเองสำหรับทิศทางการมอง / เล็ง โดยทั่วไปเมื่อป้อมปืนมุ่งไปในทิศทาง(0,0,1)มันจะมุ่งขนานไปกับทิศทางการเคลื่อนที่ของเรือบิน เพื่อให้เป้าหมายอวกาศของป้อมปืนฉันมีเมทริกซ์ที่ใช้พิกัดอวกาศของโลกและเปลี่ยนสิ่งเหล่านี้เป็นพิกัดอวกาศของป้อมปืน เมื่อป้อมยิงฉันต้องการให้ลูกกระสุนออกมาในอวกาศโลกมีวิธีที่ดีในการใช้เมทริกซ์การแปลงของฉันเพื่อแปลงพิกัดของป้อมปืนกลับสู่อวกาศโลกหรือไม่? วิธีทั่วไปมากขึ้นของการถามคำถามที่อาจจะ: ถ้าฉันมีเมทริกซ์Mที่ใช้พิกัดจากพื้นที่ไปยังพื้นที่A Bมีวิธีง่าย ๆ ในการใช้MพิกัดจากBถึงAหรือไม่?

2
ทำไมเราต้องการพิกัดที่สี่เพื่อหารด้วย z
ฉันอ่านคำตอบที่นี่: กราฟิกการ์ดทำหน้าที่อย่างไรกับองค์ประกอบที่สี่ของเวกเตอร์เป็นตำแหน่งสุดท้าย "องค์ประกอบที่สี่เป็นกลอุบายในการติดตามการฉายภาพเปอร์สเปคทีฟเมื่อคุณฉายภาพเปอร์สเปคทีฟคุณต้องการหารด้วย z: x '= x / z, y' = y / z แต่นี่ไม่ใช่การดำเนินการที่ สามารถดำเนินการได้โดยเมทริกซ์ 3x3 ที่ทำงานบนเวกเตอร์ของ x, y, z เคล็ดลับที่กลายเป็นมาตรฐานสำหรับการทำเช่นนี้คือการผนวกพิกัดที่สี่, w, และประกาศว่า x, y, z จะถูกหารด้วย w เสมอ หลังจากการแปลงทั้งหมดถูกนำไปใช้และก่อนการแรสเตอร์ แต่ฉันไม่เข้าใจว่าทำไมเราจึงหารด้วย z ด้วยเมทริกซ์ 3x3 ไม่ได้? เราไม่สามารถคูณด้วย 1/z 0 0 0 1/z 0 0 0 1/z เพื่อรับ [x/z y/z 1] …

3
หมุนวัตถุรอบแกนคงที่
ฉันพยายามให้ผู้ใช้แอปหมุนวัตถุ 3 มิติที่กึ่งกลางหน้าจอโดยลากนิ้วบนหน้าจอ การเคลื่อนไหวในแนวนอนบนหน้าจอหมายถึงการหมุนรอบแกน Y ที่คงที่และการเคลื่อนที่ในแนวตั้งหมายถึงการหมุนรอบแกน X ปัญหาที่ฉันมีคือถ้าฉันอนุญาตให้หมุนรอบหนึ่งแกนวัตถุจะหมุนได้ดี แต่ทันทีที่ฉันแนะนำการหมุนครั้งที่สองวัตถุจะไม่หมุนตามที่คาดไว้ นี่คือภาพของสิ่งที่เกิดขึ้น: แกนสีน้ำเงินแสดงถึงแกนคงที่ของฉัน รูปภาพหน้าจอที่มีแกนสีน้ำเงินคงที่นี้ นี่คือสิ่งที่ฉันต้องการให้วัตถุหมุนในความสัมพันธ์กับ สิ่งที่เกิดขึ้นคือสีแดง นี่คือสิ่งที่ฉันรู้: การหมุนรอบแรกรอบ Y (0, 1, 0) ทำให้โมเดลย้ายจากพื้นที่สีน้ำเงิน (เรียกพื้นที่นี้ A) ไปยังพื้นที่อื่น (เรียกพื้นที่นี้ B) พยายามหมุนอีกครั้งโดยใช้เวกเตอร์ (1, 0, 0) หมุนรอบแกน x ในอวกาศ B ไม่ได้อยู่ในอวกาศ A ซึ่งไม่ใช่สิ่งที่ฉันตั้งใจจะทำ นี่คือสิ่งที่ฉันพยายามให้ในสิ่งที่ฉัน (คิด) ฉันรู้ (ออกจาก coord W เพราะความกะทัดรัด): หมุนไปรอบ ๆ Y (0, 1, 0) …

3
กล้องสำหรับเกม 2.5D
ฉันหวังว่าบางคนสามารถอธิบายสิ่งนี้กับฉันได้เหมือนฉันอายุ 5 ขวบเพราะฉันดิ้นรนกับสิ่งนี้เป็นเวลาหลายชั่วโมงและไม่สามารถเข้าใจสิ่งที่ฉันทำผิดได้ ฉันเขียนCameraชั้นเรียนสำหรับเกม 2.5D ของฉัน ความตั้งใจคือการสนับสนุนโลกและพื้นที่หน้าจอเช่นนี้: กล้องเป็นสีดำด้านขวา แกน + Z เลื่อนขึ้นด้านบนของภาพโดยให้ -Z ชี้ลง อย่างที่คุณเห็นทั้งอวกาศโลกและพื้นที่จอภาพมี (0, 0) ที่มุมบนซ้าย ฉันเริ่มเขียนการทดสอบหน่วยเพื่อพิสูจน์ว่ากล้องของฉันทำงานได้ตามที่คาดไว้และนั่นคือสิ่งที่เริ่มแปลก ... การทดสอบของฉันพล็อตพิกัดในโลกมุมมองและพื้นที่หน้าจอ ในที่สุดฉันจะใช้การเปรียบเทียบภาพเพื่อยืนยันว่าถูกต้อง แต่สำหรับตอนนี้การทดสอบของฉันเพิ่งแสดงผลลัพธ์ ตรรกะการเรนเดอร์ใช้Camera.ViewMatrixในการแปลงพื้นที่ของโลกเพื่อดูพื้นที่และCamera.WorldPointToScreenเพื่อแปลงพื้นที่โลกเป็นพื้นที่หน้าจอ นี่คือตัวอย่างทดสอบ: [Fact] public void foo() { var camera = new Camera(new Viewport(0, 0, 250, 100)); DrawingVisual worldRender; DrawingVisual viewRender; DrawingVisual screenRender; this.Render(camera, out worldRender, out viewRender, …
12 xna  matrix  projection 

4
แผนที่ Isometric Staggered: คำนวณพิกัดของแผนที่สำหรับจุดบนหน้าจอ
ฉันรู้ว่ามีทรัพยากรจำนวนมากเกี่ยวกับเรื่องนี้ แต่ฉันไม่พบที่ตรงกับระบบพิกัดของฉันและฉันมีปัญหาอย่างมากในการปรับแก้ปัญหาเหล่านั้นตามความต้องการของฉัน สิ่งที่ฉันเรียนรู้คือวิธีที่ดีที่สุดในการทำเช่นนี้คือใช้เมทริกซ์การแปลงรูป การนำไปใช้นั้นไม่มีปัญหา แต่ฉันไม่รู้ว่าจะต้องแปลงพื้นที่พิกัดอย่างไร นี่คือภาพที่แสดงระบบพิกัดของฉัน: ฉันจะแปลงจุดบนหน้าจอเป็นระบบพิกัดนี้ได้อย่างไร

5
บางคนสามารถอธิบาย (เหตุผล) ความหมายของโคลัมกับแถวหลักในการคูณ / การเรียงต่อกันได้หรือไม่
ฉันพยายามที่จะเรียนรู้วิธีสร้างเมทริกซ์มุมมองและการฉายภาพและการเข้าถึงความยากลำบากในการใช้งานของฉันเนื่องจากความสับสนของฉันเกี่ยวกับสองมาตรฐานสำหรับเมทริกซ์ ฉันรู้วิธีคูณเมทริกซ์และฉันเห็นว่าการแปลงก่อนการคูณจะเปลี่ยนผลลัพธ์ทั้งหมดดังนั้นความต้องการคูณในลำดับที่แตกต่างกัน สิ่งที่ฉันไม่เข้าใจคือสิ่งที่มีความหมายโดยเฉพาะ 'notational Convention' - จากบทความที่นี่และที่นี่ผู้เขียนยืนยันว่ามันไม่ต่างกับวิธีการจัดเก็บเมทริกซ์หรือโอนไปยัง GPU แต่ในวินาที หน้าเมทริกซ์นั้นเห็นได้ชัดว่าไม่เทียบเท่ากับวิธีการวางในหน่วยความจำสำหรับแถวหลัก และถ้าฉันดูเมทริกซ์ที่มีประชากรในโปรแกรมของฉันฉันจะเห็นส่วนประกอบการแปลที่ใช้องค์ประกอบที่ 4, 8 และ 12 ระบุว่า: "โพสต์การคูณด้วยเมทริกซ์คอลัมน์หลักสร้างผลลัพธ์เช่นเดียวกับการคูณล่วงหน้าด้วยเมทริกซ์แถวหลัก" ทำไมในตัวอย่างของรหัสต่อไปนี้: Matrix4 r = t3 * t2 * t1; Matrix4 r2 = t1.Transpose() * t2.Transpose() * t3.Transpose(); Does r! = r2และเหตุใด pos3! = pos สำหรับ : Vector4 pos = wvpM * new Vector4(0f, …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.