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

5
นักแสดงในเกมควรมีความรับผิดชอบในการวาดภาพตนเองหรือไม่?
ฉันยังใหม่ต่อการพัฒนาเกม แต่ไม่ได้เขียนโปรแกรม ฉัน (อีกครั้ง) เล่นกับเกมประเภท Pong โดยใช้canvasองค์ประกอบของ JavaScript ฉันสร้างPaddleวัตถุที่มีคุณสมบัติดังต่อไปนี้ ... width height x y colour ฉันยังมีPongวัตถุที่มีคุณสมบัติเช่น ... width height backgroundColour draw(). draw()วิธีการในปัจจุบันคือการรีเซ็ตcanvasและที่เป็นที่คำถามขึ้นมา ควรPaddleวัตถุมีdraw()วิธีการรับผิดชอบสำหรับการวาดภาพหรือควรdraw()ของPongวัตถุต้องรับผิดชอบสำหรับการวาดภาพของนักแสดง (ฉันคิดว่าเป็นคำที่ถูกต้องโปรดแก้ไขฉันหากฉันไม่ถูกต้อง) ฉันคิดว่ามันจะเป็น advantagous สำหรับPaddleการวาดตัวเองที่ผมยกตัวอย่างวัตถุสองและPlayer Enemyถ้ามันไม่ได้อยู่ในPongของdraw()ฉันจะต้องเขียนรหัสที่คล้ายกันสองครั้ง การปฏิบัติที่ดีที่สุดที่นี่คืออะไร? ขอบคุณ

3
ถ่ายทอดบรรยากาศอันน่าอึดอัดใจในการฉายภาพเฉียงของนักรบ
ฉันต้องการความรู้ร่วมกันของคุณในการค้นหาวิธีที่ดีที่สุดในการแสดงฉากในลักษณะกราฟิกที่เหมาะกับเกมการเล่นเกมยุค SNES ฉันเลือกที่จะเป็นตัวแทนของเกมในสิ่งที่ฉันแจ้งเรียกว่าการฉายภาพ "คาวาเลียร์เอียง" ซึ่งเป็นมุมมองแบบเดียวกับที่ใช้ในชื่อเช่น EarthBound: หน้าเสื้อผ้าของบทความและด้านใดด้านหนึ่งปรากฏขึ้น ประสานงานกัน ด้วยเหตุผลใด ๆ ก็ตามนี่คือการหลีกเลี่ยงมุมมอง "จากบนลงล่าง" ที่ใช้โดยชื่อเกม RPG Maker 300% ฉันไม่ต้องการที่จะดูเหมือนผู้เล่น "ฉัน - เกินไป" สถานการณ์ ในชื่อตัวละครผู้เล่นมีทางกลับของพวกเขาถูกบล็อกออกไปโดยมีเพียงเส้นทางเดียวเท่านั้นที่จะเป็นหนึ่งในเส้นทางที่นำไปสู่ถ้ำที่กระชับมาก claustrophobia ของพื้นที่ นั้นมีความสำคัญมากเนื่องจากเป็นหนึ่งในแหล่งที่น่าสงสัยหลักที่ผู้เล่นต้องเผชิญ ปัญหา ฉันไม่สามารถคิดวิธีเดียวในการแสดงถ้ำที่อึดอัดการแตกกิ่งก้านที่มีปลายตายและรูที่แน่นมากในการฉายภาพที่ฉันได้แสดงไว้ด้านบน มีงานประมาณสองสามอย่างที่ฉันสามารถนึกได้ว่าหมุนไปรอบ ๆ การเปลี่ยนการฉายภาพ (ไม่ว่าจะเป็นมุมมองบุคคลที่หนึ่งซึ่งยากที่จะนำทางอย่างมากหรือมุมมองด้านข้างเช่นDig Dugซึ่งมีจุดประสงค์เพื่อ แสดงเส้นทางการแตกแขนงข้ามแกนyเมื่อเทียบกับแกนx ) - การทำเช่นนี้เสี่ยงต่อการสั่นสะเทือนต่อเครื่องเล่น ฉันถามคุณว่า GD - คุณนึกถึงสถานการณ์ดังกล่าวจากเกมย้อนยุคที่คุณชื่นชอบและพวกเขาแสดงให้ผู้เล่นเห็นได้อย่างไร? การอ้างอิงใด ๆ ที่ฉันได้รับสำหรับการดำเนินการที่ประสบความสำเร็จจะได้รับการชื่นชมอย่างมาก
22 rpg  projection 

3
มีการฉาย 3 มิตินอกเหนือจาก orthographic และมุมมอง? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา คำถามนั้นค่อนข้างมากในชื่อเรื่อง มีการฉายภาพ 3 มิติที่น่าสนใจนอกเหนือจาก orthographic และมุมมองที่สามารถใช้ในระบบ 3D เช่น OpenGL ได้หรือไม่? โดยเฉพาะอย่างยิ่งมีอะไรบ้างไหมที่มีความพิเศษในการออกแบบเกม?

5
ฉันต้องการส่วนประกอบ 'w' ในคลาส Vector ของฉันหรือไม่
สมมติว่าคุณกำลังเขียนรหัสเมทริกซ์ที่จัดการการหมุนการแปลและอื่น ๆ สำหรับพื้นที่ 3 มิติ ตอนนี้เมทริกซ์การแปลงต้องเป็น 4x4 เพื่อให้พอดีกับองค์ประกอบการแปล อย่างไรก็ตามคุณไม่จำเป็นต้องจัดเก็บwส่วนประกอบในเวกเตอร์ใช่ไหม? แม้แต่ในการแบ่งเปอร์สเปคทีฟคุณสามารถคำนวณและจัดเก็บwนอกเวคเตอร์และแบ่งเปอร์สเปคทีฟก่อนกลับจากเมธอด ตัวอย่างเช่น: // post multiply vec2=matrix*vector Vector operator*( const Matrix & a, const Vector& v ) { Vector r ; // do matrix mult r.x = a._11*v.x + a._12*v.y ... real w = a._41*v.x + a._42*v.y ... // perspective divide r …

1
นี่คือสิ่งที่ฉาย?
ใครช่วยบอกฉันได้ว่าการฉายภาพนี้เรียกว่าอะไร? ราวกับว่าคุณกำลังมองวัตถุจากด้านบนโดยตรงจากนั้นก็ทามันขึ้นและทิ้งให้เท่า ๆ กัน มีเพียงมิติเดียวเท่านั้นที่ดูเหมือนเป็นมาตราส่วนจริงในขณะที่อีกสองมิติเอียงไป ฉันไม่พบเกมมากมายที่ใช้สไตล์นี้ แต่ Ultima Series บางเกมดูเหมือนหรือคล้ายกัน:
16 projection 

1
Keystone Correction โดยใช้ 3D-Points of Kinect
ด้วย XNA ฉันกำลังแสดงรูปสี่เหลี่ยมผืนผ้าที่เรียบง่ายซึ่งถูกฉายลงบนพื้น โปรเจ็กเตอร์สามารถวางในตำแหน่งโดยพลการ เห็นได้ชัดว่าสี่เหลี่ยมที่ฉายนั้นบิดเบี้ยวตามตำแหน่งและมุมของโปรเจ็คเตอร์ Kinect สแกนพื้นเพื่อหามุมทั้งสี่ ตอนนี้เป้าหมายของฉันคือการแปลงรูปสี่เหลี่ยมเดิมเพื่อให้การฉายไม่มีความบิดเบี้ยวอีกต่อไปโดยการแปรปรวนของสี่เหลี่ยมล่วงหน้า วิธีแรกของฉันคือทำทุกอย่างใน 2D: ก่อนอื่นคำนวณการแปลงเปอร์สเปคทีฟ (โดยใช้ OpenCV warpPerspective()) จากจุดที่สแกนไปยังจุดภายในของสี่เหลี่ยม ดูเหมือนว่าจะใช้งานได้ แต่ช้าเกินไปเนื่องจากไม่สามารถแสดงผลบน GPU ได้ แนวทางที่สองคือการทำทุกอย่างในรูปแบบ 3 มิติเพื่อใช้คุณสมบัติการแสดงผลของ XNA ก่อนอื่นฉันจะแสดงเครื่องบินสแกนมุมของมันด้วย Kinect และทำแผนที่คะแนน 3D ที่ได้รับไปยังระนาบเดิม ในทางทฤษฎีฉันสามารถใช้การผกผันของการแปลงมุมมองกับระนาบได้เช่นเดียวกับที่ฉันทำในแบบสองมิติ อย่างไรก็ตามเนื่องจาก XNA ทำงานร่วมกับเมทริกซ์มุมมองและเส้นโครงร่างฉันจึงไม่สามารถเรียกฟังก์ชันเช่นwarpPerspective()และรับผลลัพธ์ที่ต้องการได้ ฉันต้องคำนวณพารามิเตอร์ใหม่สำหรับมุมมองและเมทริกซ์การฉายของกล้อง คำถาม: เป็นไปได้ไหมที่จะคำนวณพารามิเตอร์เหล่านี้และแยกออกเป็นสองเมทริกซ์ (มุมมองและการฉายภาพ)? ถ้าไม่มีวิธีอื่นที่ฉันสามารถใช้ได้หรือไม่?
15 xna  2d  3d  projection  kinect 

3
แกล้งทำกราฟิกสามมิติในเกมอวกาศ 2 มิติ
ปิดครั้งแรกผมรู้ว่าสิ่งที่ปัญหาภาพวาดของฉันเป็นและฉันมีความคิดที่แตกต่างกันเกี่ยวกับวิธีการแก้มัน ฉันมาที่นี่เพื่อหาวิธีการปรับเฟรมที่ถูกวาดเพื่อให้ "ภาพลวงตา" มีมิติเท่ากันได้รับการดูแล ฉันกำลังเขียนเกมดูนกแบบ 2 มิติที่เกิดขึ้นในอวกาศ ฉันกำลังพยายามใช้กราฟิกสามมิติในโลกที่อัพอยู่เหนือไม่มีโลกหมุนของเกมเหมือนในเกมไอโซโทปดั้งเดิม (โปรดจำไว้ว่าเกมเกิดขึ้นในอวกาศไม่มีภูมิประเทศ) นี่คือตัวอย่างสไปรต์ที่ฉันพยายามใช้: http://cell.stat-life.com/images/stories/AsteroidOutpost/Spaceship64.pngหมุน 64 ครั้งเกี่ยวกับแกนตั้งของมันในมุมมอง 35 องศา (aka, ISO) ภาพถูกสร้างขึ้นดังนั้นสิ่งนี้สามารถเปลี่ยนแปลงได้ เพื่อความชัดเจนฉันได้บอกว่าทิศเหนือ (ขึ้น) คือ 0 องศาและทิศตะวันออก (ขวา) คือ 90 ปัญหาของฉันคือผีสางของฉันไม่ได้ดูเหมือนว่ามันจะหันหน้าไปทางที่เกมคิดว่าเป็นเพราะความแตกต่างในเครื่องบิน 3 มิติที่ใช้ ไม่แน่ใจว่าฉันใช้คำศัพท์อย่างถูกต้องหรือไม่ยานอวกาศของฉันหมุนไปในระนาบเดียวและระนาบมุมมองกำลังคาดหวังว่าสิ่งต่าง ๆ จะหมุนบนเครื่องบินของตัวเอง นี่คือภาพของปัญหา: http://cell.stat-life.com/images/stories/AsteroidOutpost/ProjectIssue.png ด้านซ้ายฉันมีมุมมองด้านข้างทางขวาฉันมีมุมมองจากบนลงล่าง ด้านบนฉันมีมุมมองของยานอวกาศ / แผ่นสไปรต์ของโลก ที่ด้านล่างฉันมีสิ่งที่เทพดาดูเหมือนเมื่อวาดลงบนหน้าจอ ที่ด้านบนขวาเป็นเวอร์ชั่นที่เรียบง่ายของวิธีการหมุนยานอวกาศของฉัน (แม้จะมีการแยกองศาระหว่างแต่ละเฟรม) ที่มุมล่างขวาคือมุมที่สไปรต์ดูเหมือนว่ากำลังหันหน้าไปเมื่อวาดมุมใดมุมหนึ่งบนหน้าจอ ปัญหานี้เกิดขึ้นอย่างชัดเจนที่สุดประมาณ 45 องศา นี่คือภาพที่วางซ้อนกับเส้น "ระนาบหน้าจอ" ซึ่งชี้ไปในทิศทางที่เรือควรหันเข้าหา: http://cell.stat-life.com/images/stories/AsteroidOutpost/Spaceship64RedLine.pngเส้นสีแดงควรเสมอจะชี้ไปในทิศทางเดียวกันกับเรือ แต่เป็นคุณสามารถมองเห็นปัญหาการฉายที่เป็นสาเหตุของปัญหา …

1
หน่วยการแปลหน่วย Orthographic ไม่ตรงกันในตาราง (เช่น 64 พิกเซลแปลไม่ถูกต้อง)
ฉันกำลังมองหาข้อมูลเชิงลึกเกี่ยวกับปัญหาเล็ก ๆ ด้วยการแปลหน่วยบนกริด อัปเดตและแก้ไข ฉันแก้ไขปัญหาของฉันเอง ดูรายละเอียดด้านล่าง ทุกอย่างในส่วนนี้ของโพสต์กลายเป็นถูกต้อง หากสิ่งใดมันสามารถทำหน้าที่เป็นแบบฝึกหัด / ตัวอย่าง / ช่วยเหลือขนาดเล็กสำหรับบุคคลต่อไป ติดตั้ง FBO, VAO, VBO หน้าต่าง 512x448 ตาราง 64x64 gl_Position = projection * world * position; projectionถูกกำหนดโดยortho(-w/2.0f, w/2.0f, -h/2.0f, h/2.0f);นี่คือฟังก์ชั่นการฉายภาพแบบตั้งฉากกับตำรา world ถูกกำหนดโดยตำแหน่งกล้องคงที่ที่ (0, 0) position ถูกกำหนดโดยตำแหน่งของสไปรต์ ปัญหา ในภาพหน้าจอด้านล่าง (มาตราส่วน 1: 1) ระยะห่างของกริดคือ 64x64 และฉันกำลังวาดหน่วยที่ (64, 64) อย่างไรก็ตามหน่วยวาดประมาณ ~ 10px …

2
การเคลื่อนไหวนั้นขึ้นอยู่กับอัตราเฟรมแม้จะใช้ Time.deltaTime
ฉันมีรหัสต่อไปนี้เพื่อคำนวณการแปลที่จำเป็นในการย้ายวัตถุเกมใน Unity ซึ่งเรียกว่าLateUpdateมา จากสิ่งที่ฉันเข้าใจการใช้งานของฉันTime.deltaTimeควรจะทำให้เป็นอิสระแปลสุดท้ายอัตราเฟรม (โปรดทราบCollisionDetection.Move()เป็นเพียงการแสดง raycasts) public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If …

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 

3
Age of Empires II ชื่ออะไร?
ใครจะอธิบาย "มุมมอง" ของ Age of Empires 1 เป็นเกมสไปรต์ 2D: ด้านล่างเป็นภาพหน้าจอของ Age of Empires II คุณจะอธิบาย "มุมมอง" อย่างไร? มันเป็นเกมสไปรต์ 2D หรือไม่? "เปอร์สเปคทีฟ" อาจไม่ใช่คำที่ถูกต้อง ถ้าไม่ใช่ฉันควรใช้อะไร

1
ลดขนาดโครงตาข่าย 4D จินตนาการลงบนหน้าจอ
เป็นการออกกำลังกายทางจิตฉันพยายามจินตนาการการฉายตาข่าย 4 มิติบนหน้าจอ (2D) โดยพลการ ฉันเดาว่าสามเหลี่ยม 4D เดียวจะยังคงมีเพียง 3 คะแนน แต่ 3 คะแนนนั้นจะถูกกำหนดโดยคอลัมน์ที่มี 4 มิติ มันจะเหมาะสมกว่าหรือไม่ที่จะกำหนดเมทริกซ์การฉายภาพเพื่อแมปพื้นที่ 4D ไปยังพื้นที่ 3D ก่อนจากนั้นให้ OpenGL ทำการฉายภาพของตัวเองจากข้อมูลนั้นไปยังพื้นที่ 2D หรือจะเป็นการดีที่สุดถ้าคุณวางแผนที่จะฉายจาก 4 เป็น 2 โดยตรง ขอบคุณมาก.

5
ฉันจะฉายจุดหลังกล้องได้อย่างถูกต้องได้อย่างไร?
ฉันกำลังสร้างเกม 3 มิติโดยใส่เครื่องหมายอัศเจรีย์เหนือจุดสนใจ เพื่อที่จะหาว่าในหน้าจอ 2D ที่ฉันควรวางเครื่องหมายของฉันฉันกำลังฉายจุด 3D ด้วยตนเองที่เครื่องหมายควร ดูเหมือนว่านี้: ดูดีทีเดียว เมื่อเครื่องหมายอยู่นอกหน้าจอฉันเพียงแค่คลิปพิกัดเพื่อให้พอดีกับหน้าจอ ดูเหมือนว่านี้: จนถึงตอนนี้ความคิดก็ไปได้สวย อย่างไรก็ตามเมื่อจุดที่น่าสนใจอยู่ด้านหลังกล้องพิกัด X, Y ที่ได้จะกลับด้าน (เหมือนเป็นบวก / ลบ) และฉันก็ได้เครื่องหมายที่ปรากฏบนมุมตรงข้ามของหน้าจอดังนี้: (จุดที่คาดการณ์ไว้จากนั้นเป็นจุดปลายของเครื่องหมายไม่ต้องคำนึงถึงการหมุนของเครื่องหมาย) มันสมเหตุสมผลแล้วเนื่องจากพิกัดที่อยู่เบื้องหลัง frustum นั้นกลับด้านใน X และ Y ดังนั้นสิ่งที่ฉันทำคือสลับกลับพิกัดเมื่ออยู่ด้านหลังกล้อง อย่างไรก็ตามฉันยังไม่รู้ว่าอะไรเป็นเงื่อนไขที่แน่นอนเมื่อพิกัดควรกลับด้าน นี่คือสิ่งที่รหัสการคาดการณ์ของฉันดูเหมือน (ใน C # กับ SharpDX): public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, …

1
พื้นที่หน้าจอสู่อวกาศโลก
ฉันกำลังเขียนเกม 2D ที่โลกของเกมของฉันมีแกนxวิ่งจากซ้ายไปขวาแกนyวิ่งจากบนลงล่างและแกนzออกจากหน้าจอ: ในขณะที่โลกของเกมของฉันอยู่บนลงล่างเกมจะแสดงผลในลักษณะเอียงเล็กน้อย: ฉันกำลังทำงานในการฉายจากอวกาศโลกไปยังพื้นที่หน้าจอและในทางกลับกัน ฉันมีงานเดิมดังนี้: var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight); var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix); NegateY()วิธีขยายไม่ตรงกับสิ่งที่ดูเหมือนตั้งแต่ XNA ของYแกนวิ่งล่างขึ้นบนแทนบนลงล่าง ภาพหน้าจอด้านบนแสดงว่าสิ่งนี้ทำงานได้ทั้งหมด โดยทั่วไปฉันมีหลายจุดในพื้นที่ 3 มิติที่ฉันแสดงในพื้นที่หน้าจอ ฉันสามารถแก้ไขคุณสมบัติกล้องแบบเรียลไทม์และดูว่ามันเคลื่อนไหวไปยังตำแหน่งใหม่ได้อย่างไร เห็นได้ชัดว่าเกมจริงของฉันจะใช้สไปรท์แทนที่จะเป็นจุดและตำแหน่งกล้องจะได้รับการแก้ไข แต่ฉันแค่พยายามทำให้คณิตศาสตร์ทั้งหมดเข้าที่ก่อนที่จะถึงสิ่งนั้น ตอนนี้ฉันพยายามที่จะแปลงกลับในทางอื่น นั่นคือกำหนดxและyในพื้นที่หน้าจอด้านบนกำหนดจุดที่สอดคล้องกันในพื้นที่โลก ดังนั้นถ้าฉันชี้เคอร์เซอร์ไปที่มุมล่างซ้ายของรูปสี่เหลี่ยมคางหมูสีเขียวฉันต้องการอ่านพื้นที่โลก (0, 480) Zประสานงานที่ไม่เกี่ยวข้อง หรือค่อนข้างพิกัดzจะเป็นศูนย์เสมอเมื่อทำแผนที่กลับสู่อวกาศโลก เป็นหลักฉันต้องการใช้ลายเซ็นวิธีการนี้: public Vector2 ScreenPointToWorld(Vector2 point) ฉันพยายามหลายสิ่งหลายอย่างเพื่อให้การทำงานนี้ แต่ฉันไม่มีโชค ความคิดล่าสุดของฉันคือฉันต้องโทรหาViewport.Unprojectสองครั้งด้วยค่าที่ใกล้เคียง / ไกลzคำนวณผลลัพธ์Ray, ทำให้เป็นมาตรฐานแล้วคำนวณจุดตัดของเครื่องหมายRayด้วยPlaneที่แสดงถึงระดับพื้นดินของโลก อย่างไรก็ตามฉันติดอยู่ในขั้นตอนสุดท้ายและไม่แน่ใจว่าฉันทำสิ่งที่ซับซ้อนเกินไปหรือไม่ …
10 xna  c#  matrix  projection  screen 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.