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

การแสดงตำแหน่งของเอนทิตีในพื้นที่เกมเป็นตัวเลข ระบบพิกัดมีหลายรูปแบบเพื่อรองรับวิธีการต่างๆในการทำแผนที่ตำแหน่ง

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

4
วิธีจัดการกับความแตกต่างระหว่างพิกัดหน้าจอ 2D และพิกัดคาร์ทีเซียน
ระบบพิกัดหน้าจอ / บิตแมป 2D ส่วนใหญ่มีแกน Y บวกที่ชี้ลง (โดยมีจุดเริ่มต้นที่มุมซ้ายบน) นี่เป็นสิ่งที่ตรงกันข้ามกับที่คนส่วนใหญ่คิดเชิงเรขาคณิตโดยมีแกน Y บวกชี้ขึ้น (โดยมีจุดกำเนิดอยู่ตรงกลาง) เกมส่วนใหญ่จัดการระบบพิกัด 2D สองระบบที่ต่างกันได้อย่างไร มีสองประเภทหลักของพิกัด (หน้าจอเทียบกับคาร์ทีเซียน) แต่อาจมีช่องว่างพิกัดที่แตกต่างกันมาก: พื้นที่สไปรท์พื้นที่โลกพื้นที่ดูพื้นที่หน้าจอ ฯลฯ ... พื้นหลัง: เดิมทีฉันสร้างพิกัดโลกในเกมของฉันให้ตรงกับแบบแผนการประสานงานหน้าจอ 2 มิติ สิ่งนี้ทำให้เป็นเรื่องธรรมดามากที่จะใช้รูทีนการวาดภาพกราฟิก แต่ปัญหาที่ละเอียดอ่อนเกิดขึ้นเมื่อใช้ฟังก์ชันตรีโกณมิติเช่น atan2 () ผลลัพธ์ของการป้อนพิกัด atan2 () หน้าจอ 2D มีความสับสนอย่างมากเนื่องจาก atan2 () สมมติว่าแกน y บวกขึ้น ดังนั้นฉันจึงเปลี่ยนพิกัดโลกของฉันให้เป็นไปตามระบบพิกัดคาร์ทีเซียนแบบคลาสสิก (โดยมีจุดเริ่มต้นที่ด้านล่างซ้ายของหน้าจอ) การใช้เหตุผลกับ atan2 () นั้นตรงไปตรงมามากกว่า แต่ตอนนี้การทำเหตุผลประเภทอื่น ๆ ทำได้ยากขึ้น: หากฉันคลิกที่หน้าจอที่นี่สิ่งที่สไปรต์อยู่ด้านล่าง …
23 2d  screen  coordinates 

3
อะไรคือความแตกต่าง / ซับซ้อน / มีประโยชน์เกี่ยวกับเวกเตอร์
ยกโทษให้ฉันถ้านี่ไม่ใช่คำถามจริง แต่เป็นสิ่งที่ฉันสับสนอย่างแท้จริง ฉันได้ยินผู้พัฒนาเกมคนอื่นพูดถึงการใช้เว็กเตอร์อย่างมีประโยชน์มาก แต่ตลอดจนวิธีที่ทุกคนถูกข่มขู่ด้วยคณิตศาสตร์เวกเตอร์และเวคเตอร์สามารถดูน่ากลัว ฉันไม่เคยมีรอบการเรียนรู้เกี่ยวกับพวกเขา ดังนั้นในที่สุดฉันก็ดูVectorบน Wikipedia และฉันก็ประหลาดใจ เว้นแต่ว่าฉันเข้าใจผิดเวกเตอร์ (เพื่อความเรียบง่ายบอกว่ามันเป็น 2D) เป็นเพียงพิกัด x และ y หากฉันเข้าใจผิดโปรดแก้ไขให้ถูกต้อง ดังนั้นนี่คือคำถามของฉัน: นั่นไม่ได้หมายความว่าการเป็นตัวแทนของพิกัดสองมิติ (หรือสาม) เป็นเวกเตอร์? ถ้าเป็นเช่นนั้นเวกเตอร์และพิกัดก็เหมือนกัน และเป็นไปไม่ได้ที่จะสร้างเกมโดยไม่ใช้พิกัดดังนั้นเวกเตอร์จึงสร้างความสับสนหรือความใหม่ให้กับผู้ที่เคยเขียนโปรแกรมเกมจำนวนเท่าใด? นี่คือสิ่งที่ฉันสามารถใช้คำอธิบายบางอย่างใน ความช่วยเหลือใด ๆ ที่ชื่นชม

4
ทำไมต้อง Y ในหลาย ๆ เกม
ฉันเรียนที่โรงเรียนว่าแกน z หมดแล้ว มันเหมือนกันในซอฟต์แวร์การสร้างแบบจำลองเช่น Blender อย่างไรก็ตามในหลาย ๆ เกมแกน y นั้นเพิ่มขึ้น เหตุผลคืออะไร

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 …

5
ฉันจะแปลงจากพื้นที่พิกัดทั่วโลกเป็นพื้นที่ท้องถิ่นได้อย่างไร
กำหนดเอนทิตีที่ชื่อEntityAฉันต้องการกำหนดพื้นที่พิกัดเฉพาะที่ซึ่งตำแหน่งของEntityAเป็นจุดเริ่มต้นเวกเตอร์ส่วนหัวของมันคือแกน X และปกติของเวกเตอร์หัวเรื่องคือแกน Y: จากพิกัดโลกของพวกเขาฉันจะค้นหาตำแหน่งของเอนทิตี้อื่นในEntityAพื้นที่ท้องถิ่นได้อย่างไร ตัวอย่าง: EntityAตำแหน่งส่วนกลางของ (50,50) และตำแหน่งนั้นEntityBคือ (80,90) ตำแหน่งของEntityBในEntityAพื้นที่ท้องถิ่นคืออะไร? แก้ไข: กรุณาใช้คณิตศาสตร์ง่ายๆ

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

3
ฉันจะแปลพิกัดทรงกลมเป็นพิกัดคาร์ทีเซียนได้อย่างไร
มีใครบางคนชี้ให้ฉันในทิศทางที่ถูกต้องว่าจะประสบความสำเร็จได้อย่างไร? คณิตศาสตร์ / เรขาคณิต 3 มิติมักทำให้ฉันขว้าง ฉันกำลังมองหาบางสิ่งเช่นนี้ (นึกคิดใน C #): public Vector3 getCartesianFor(float elevation, float asimuth, float polar) { return ????; }

4
ฉันจะแปลงระหว่างระบบพิกัด 2D ที่แตกต่างกันสองระบบได้อย่างไร
ฉันพยายามแปลงพิกัดจากระบบพิกัดหนึ่งเป็นอีกระบบหนึ่งเพื่อให้ฉันสามารถวาดลงบนภาพได้ โดยทั่วไประบบพิกัดปลายทางจะเป็นดังนี้: X range: 0 to 1066 Y range: 0 to 1600 (แค่ภาพมาตรฐานที่ฉันวาดลงไปด้วยขนาด 1066 x 1600) ตำแหน่งที่ฉันพยายามวาดลงบนภาพมีขนาดเท่ากัน แต่ระบบพิกัดแตกต่างกัน การขยายพิกัดทั้งหมดคือ 1066x1600 แต่ตัวอย่างพิกัดจะเป็น: (111.33f, 1408.41f) (-212.87f, 1225.16f) ช่วงของระบบพิกัดนี้คือ: X range: -533.333 to 533.333 Y range: 533.333 to 2133.333 ฉันรู้สึกว่านี่เป็นคณิตศาสตร์ที่ง่ายมาก แต่ด้วยเหตุผลบางอย่างฉันไม่ได้รับ ฉันจะแปลงพิกัดที่ให้ไว้ในระบบพิกัดแรกได้อย่างไร
10 2d  coordinates 

2
Lightmaps Half-Life 2 BSP
ฉันกำลังเขียนโปรแกรมดู BSP สำหรับโครงการมหาวิทยาลัย จนถึงตอนนี้ฉันได้รับการโหลดรูปทรงเรขาคณิตหลักอย่างถูกต้องและ PVS ทำงาน ตอนนี้ฉันกำลังพยายามใช้ Lightmaps แต่ฉันไม่สามารถรับพิกัดพื้นผิวสำหรับ Lightmaps ที่คำนวณได้อย่างถูกต้อง ตามที่นี่: http://developer.valvesoftware.com/wiki/The_Source_Engine_BSP_File_Format struct texinfo_t { float textureVecs[2][4]; // [s/t][xyz offset] float lightmapVecs[2][4]; // [s/t][xyz offset] - length is in units of texels/area int flags; // miptex flags overrides int texdata; // Pointer to texture name, size, etc. } อาร์เรย์แรกของการลอยอยู่ในสาระสำคัญสองเวกเตอร์ที่แสดงถึงวิธีการปรับพื้นผิวและปรับขนาดเมื่อแสดงผลในเรขาคณิตโลก …

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
BRDF และการประสานงานทรงกลมในการติดตามเรย์
ฉันพัฒนาเครื่องติดตามรังสีที่ใช้โมเดลไฟพงษ์ / บลินมาตรฐาน ตอนนี้ฉันกำลังแก้ไขเพื่อสนับสนุนการเรนเดอร์ตามร่างกายดังนั้นฉันจึงใช้โมเดล BRDF ต่างๆ ในขณะนี้ฉันมุ่งเน้นโมเดลของ Oren-Nayar และ Torrance-Sparrow แต่ละอันขึ้นอยู่กับพิกัดทรงกลมที่ใช้ในการแสดงเหตุการณ์ที่เกิดขึ้นและทิศทางแสง wo ขาออก คำถามของฉันคือวิธีใดที่เหมาะสมที่จะแปลง wi และ wo จากพิกัดคาร์ทีเซียนไปเป็นพิกัดกลม ฉันกำลังใช้สูตรมาตรฐานที่รายงานที่นี่https://en.wikipedia.org/wiki/Spherical_coordinate_system#Coordinate_system_conversionsแต่ฉันไม่แน่ใจว่าฉันทำสิ่งที่ถูกต้องเพราะเวกเตอร์ของฉันไม่ได้อยู่ที่ต้นกำเนิดของ ระบบพิกัดคาร์ทีเซียน แต่มีศูนย์กลางอยู่ที่จุดตัดของรังสีกับวัตถุ ที่นี่คุณสามารถค้นหาการใช้งานปัจจุบันของฉัน: https://github.com/chicio/Multispectral-Ray-tracing/tree/brdf/RayTracing/RayTracer/Objects/BRDF https://github.com/chicio/Multispectral-Ray-tracing/blob/brdf/RayTracing/RayTracer/Math/Vector3D.cpp ใครสามารถช่วยฉันอธิบายวิธีที่ถูกต้องในการแปลงเวกเตอร์ wi และ wo จากคาร์ทีเซียนไปเป็นพิกัดกลม UPDATE ฉันคัดลอกส่วนที่เกี่ยวข้องของรหัสที่นี่: การคำนวณพิกัดทรงกลม float Vector3D::sphericalTheta() const { float sphericalTheta = acosf(Utils::clamp(y, -1.f, 1.f)); return sphericalTheta; } float Vector3D::sphericalPhi() const { float …

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

3
ภาพสามมิติ 2D: พิกัดหน้าจอเป็นกระเบื้อง
ฉันกำลังเขียนเกม isometric 2D และฉันมีปัญหาในการหาตำแหน่งที่เคอร์เซอร์อยู่ นี่คือภาพวาด: โดยที่ xs และ ys เป็นพิกัดหน้าจอ (พิกเซล), xt และ yt เป็นพิกัดของกระเบื้อง, W และ H คือความกว้างของกระเบื้องและความสูงของกระเบื้องเป็นพิกเซลตามลำดับ สัญกรณ์สำหรับพิกัดของฉันคือ (y, x) ซึ่งอาจทำให้เกิดความสับสนขออภัยเกี่ยวกับเรื่องนั้น สิ่งที่ดีที่สุดที่ฉันสามารถคิดได้คือ: int xtemp = xs / (W / 2); int ytemp = ys / (H / 2); int xt = (xs - ys) / 2; int yt …

3
รับคะแนนในบรรทัดระหว่างสองคะแนน
ฉันกำลังสร้างเกมอวกาศง่ายๆใน JavaScript แต่ตอนนี้ฉันตีกำแพงเกี่ยวกับเวกเตอร์ มุมมองเกมอยู่บนลงบนกริด 2d เมื่อผู้ใช้คลิกบนกริดยานอวกาศจะบินไปยังจุดนั้น ดังนั้นถ้าฉันมีคะแนนสองชุด: { x : 100.2, y : 100.6 }; // the ship { x : 20.5, y : 55.95 }; // the clicked coordinates หากเกมวนซ้ำที่ 60 รอบต่อวินาทีและความเร็วของเรือรบที่ต้องการคือ 0.05 คะแนนต่อเห็บ (3 คะแนนต่อวินาที) ฉันจะคำนวณพิกัดชุดใหม่สำหรับเรือแต่ละเห็บของวงวนของเกมได้อย่างไร ป.ล. ฉันไม่ต้องการบัญชีความเฉื่อยหรือเวกเตอร์หลายตัวที่มีผลต่อเรือฉันแค่ต้องการให้เรือหยุดสิ่งที่กำลังทำ (เช่นบินทางเดียว) และย้ายไปยังพิกัดที่คลิกด้วยความเร็วคงที่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.