การใช้รูปลอก


11

ฉันมีปัญหาในการค้นหาข้อมูลเกี่ยวกับสติ๊กเกอร์ดังนั้นบางทีคำถามนี้อาจช่วยผู้อื่น การใช้งานมีไว้สำหรับการแสดงผลไปข้างหน้า

มีคนยืนยันได้หรือไม่ว่าฉันได้ติดตั้งรูปลอก

  • คุณกำหนดลูกบาศก์ของมิติใด ๆ ที่จะกำหนดปริมาณการฉายในพื้นที่ส่วนกลาง คุณตรวจสอบจุดตัดสามเหลี่ยมด้วยลูกบาศก์ที่กำหนดเพื่อรับสามเหลี่ยมที่การฉายจะมีผล
  • คุณตัดสามเหลี่ยมเหล่านี้แล้วบันทึก
  • จากนั้นคุณใช้เคล็ดลับเมทริกซ์เพื่อคำนวณพิกัดรังสียูวีสำหรับสามเหลี่ยมที่บันทึกไว้ซึ่งจะอ้างอิงพื้นผิวที่คุณกำลังฉาย
  • เมื่อต้องการทำเช่นนี้คุณต้องใช้เวกเตอร์แทนความสูงความกว้างและความลึกของลูกบาศก์ในพื้นที่ส่วนกลางเพื่อให้มุมล่างซ้ายเป็นจุดกำเนิด
  • คุณวางมันลงในเมทริกซ์เป็นเวกเตอร์หน่วย i, j, k, ตั้งค่าการแปลสำหรับคิวบ์จากนั้นคุณกลับเมทริกซ์นี้
  • คุณคูณจุดยอดของสามเหลี่ยมที่บันทึกด้วยเมทริกซ์นี้วิธีที่คุณจะได้รับพิกัดภายในลูกบาศก์ขนาด 0 ถึง 1 ที่คุณใช้เป็นพิกัด UV
  • วิธีนี้คุณมีรูปสามเหลี่ยมดั้งเดิมที่คุณกำลังฉายอยู่และคุณมีพิกัด UV สำหรับพวกมัน (พิกัด UV นั้นอ้างอิงพื้นผิวที่คุณกำลังฉายอยู่)
  • จากนั้นคุณนำรูปสามเหลี่ยมที่บันทึกไว้ไปยังฉากและพวกเขาเขียนทับพื้นที่ของการฉายด้วยภาพที่ฉาย

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


นี่คือลิงค์ที่มีลิงค์คือ: gamedev.stackexchange.com/questions/24653/ …
Estrada Luis

คำตอบ:


5

ลองดูที่บทความนี้:

http://blog.wolfire.com/2009/06/how-to-project-decals/

ดูเหมือนว่าเขากำลังใช้วิธีการเดียวกันกับที่คุณใช้อยู่ เขาไม่ได้พูดถึง z-fighting แต่มันอาจกลายเป็นปัญหาในระยะทางที่กว้างขึ้น

ข้อเสนอแนะของฉันคือการปิดการใช้งาน decals หลังจากระยะทางที่แน่นอนถ้าการต่อสู้แบบ z กลายเป็นชัดเจนมาก


ฉันเคยเห็นบทความนี้หลายครั้งสิ่งที่ไม่ได้พูดถึงเกี่ยวกับสิ่งที่ฉันถามเหมือนที่คุณพูดถึงการต่อสู้ z ไม่ใช่เรื่องของระยะทางมันเป็นเรื่องของคุณ กำลังพยายามทำให้ถูกต้องบนรูปทรงเรขาคณิตที่มีอยู่และเนื่องจากความแม่นยำที่ จำกัด คุณสามารถ / ไม่แน่ใจว่าจะอยู่ด้านบนหรืออยู่ในที่เดียวกัน
dreta

1
เมื่อวาดรูปสติ๊กเกอร์คุณสามารถตั้งค่าฟังก์ชั่นการเปรียบเทียบความลึกของบัฟเฟอร์ให้น้อยกว่าหรือเท่ากับแทนที่จะน้อยกว่าดังนั้นรูปวาดนั้นจะถูกวาดที่ด้านบนของพื้นผิวที่มีผลกระทบ
jmegaffin

1

สิ่งที่ฉันทำเพื่อแก้ปัญหาการต่อสู้ Z คือการชนค่า Z ของจุดสุดยอดด้วยจำนวนเล็กน้อยในส่วนของรูปลอกของฉันหลังจากอยู่ในพิกัดหน้าจอ

ตกลง ..... ฉันใช้สติ๊กเกอร์ตาข่ายติดตั้ง ฉันสร้างตาข่าย nxn โดยที่ Y นั่งอยู่บนภูมิประเทศ ฉันใช้รหัสเพื่อค้นหา Y ในตาข่ายรูปหลายเหลี่ยมภูมิประเทศ หลังจากสัญญาณทั้งหมดฉันกำลังวาดส่วนบนของเรขาคณิตที่มีอยู่ในพิกัดหน้าจอ บัฟเฟอร์ความลึกอยู่ในพิกัดหน้าจอดังนั้นโดยการย้าย Z ของรูปหลายเหลี่ยมไปทางหน้าจอเล็กน้อยจะหยุดการต่อสู้ Z ด้วยการทำเช่นนี้ฉันลดจำนวนรูปหลายเหลี่ยมที่ประกอบกันเป็นรูปตาข่ายติดสติ๊กเกอร์ของฉันครึ่งหนึ่ง นี่คือรหัส 120 เก่า

 vec4 v = gl_ModelViewProjectionMatrix * gl_Vertex;
 v.z -= .03;
 gl_Position = v;

หวังว่านี่จะอธิบายได้ดีกว่า .. (ตามที่ร้องขอ)

โครงลวดทั้งหมด

ภูมิประเทศของเส้นลวดเท่านั้น


1
คำตอบนี้ดูเหมือนจะสั้นและไม่เจาะจง คุณช่วยชี้แจงคำตอบของคุณได้ไหม?
Gnemlock

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