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

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

2
ฉันจะสูญเสียหรือเพิ่มประสิทธิภาพในการทิ้งพิกเซลแม้ว่าฉันจะไม่ใช้การทดสอบเชิงลึกหรือไม่?
เมื่อฉันค้นหาคำสั่งยกเลิกครั้งแรกฉันพบผู้เชี่ยวชาญที่บอกว่าใช้การทิ้งจะส่งผลให้ประสิทธิภาพลดลง พวกเขากล่าวว่าการทิ้งพิกเซลจะทำลายความสามารถของ GPU ในการใช้ zBuffer อย่างถูกต้องเพราะ GPU จะต้องเรียกใช้ Fragment shader ก่อนเพื่อให้วัตถุทั้งคู่ตรวจสอบว่ามีการทิ้งเศษชิ้นส่วนที่ใกล้กับกล้องหรือไม่ สำหรับเกม 2D ที่ฉันกำลังทำงานอยู่ฉันได้ปิดการใช้งานทั้งการทดสอบเชิงลึกและการเขียนเชิงลึก ฉันกำลังวาดวัตถุทั้งหมดที่เรียงตามความลึกของพวกเขาและนั่นคือทั้งหมดที่ GPU ไม่จำเป็นต้องทำสิ่งที่แปลกใหม่ ตอนนี้ฉันสงสัยว่ามันยังคงไม่ดีถ้าฉันทิ้งพิกเซลในส่วนของฉัน?

1
รูปแบบไฟล์สำหรับโมเดล 3 มิติแบบคงที่และเคลื่อนไหว
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เนื่องจากสามารถตอบได้ใน Game Exchange Stack Exchange อพยพ 8 ปีที่ผ่านมา ฉันกำลังเขียนเกม 3 มิติใน C ++ กับ OpenGL และฉันมาถึงส่วนที่จะโหลดโมเดล 3 มิติดังนั้นฉันจึงกำลังมองหารูปแบบไฟล์และเทคนิคยอดนิยมสำหรับ แสดงตาข่ายคงที่และ แสดงภาพเคลื่อนไหวตาข่าย ฉันได้พบรูปแบบและเทคนิคที่เป็นไปได้ค่อนข้างมากเช่นภาพเคลื่อนไหวเฟรมเฟรม, ภาพเคลื่อนไหวโครงกระดูก, MD2 ถึง MD5, 3DS, X, Collada ฯลฯ pp เพื่อความเรียบง่ายฉันต้องการใช้รูปแบบ (และเทคนิค) ที่ช่วยให้ทั้งตาข่ายคงที่และเคลื่อนไหว ดังนั้นคำถามของฉันคือถ้ารูปแบบใดรูปแบบหนึ่งเหมาะสมกับงานนั้นและรูปแบบใดที่คุณต้องการแนะนำ และเพื่อชี้แจงเล็กน้อย: ฉันไม่ต้องการภาพเคลื่อนไหวที่นุ่มนวลหรือคุณลักษณะใหม่เอี่ยม Sidenote: เพราะฉันเป็นแฟนของเครื่องปั่น (แต่ไม่ใช่ผู้เชี่ยวชาญ ;-)) มันจะมีประโยชน์ถ้ามันสามารถใช้กับมันได้ - แต่แน่นอนว่ามันไม่ควรจะเป็นโชว์จุกที่นี่
22 c++  opengl 


4
วิธีที่เร็วที่สุดในการวาดล่ามใน OpenGL ES?
ฉันใช้ OpenGL ES 2.0 ฉันมีกลุ่มที่จะต้องวาดรูปฉันชอบที่จะสามารถส่งผ่านเพียง 4 จุดต่อรูปสี่เหลี่ยมราวกับว่าฉันกำลังใช้ GL_QUADS แต่โดยทั่วไปฉันต้องการทราบวิธีที่ดีที่สุดในการวาดรูป พวงของคณะสี่คนแยกกัน จนถึงสิ่งที่ฉันได้พบว่าฉันสามารถทำได้: -GL_TRIANGLES (6 ยอดต่อหนึ่งรูปสี่เหลี่ยม) - สร้าง GL_TRIANGLE_STRIP (6 จุดต่อรูปสี่เหลี่ยม) ความเป็นไปได้ที่ฉันได้พบ: -GL_TRIANGLE_STRIPS ด้วยค่าดัชนีพิเศษที่รีเซ็ตแถบสี่เหลี่ยม (ซึ่งหมายถึง 5 ดัชนีต่อหนึ่งรูปสี่เหลี่ยม แต่ฉันไม่คิดว่าเป็นไปได้คือ OpenGL ES 2.0)
22 opengl  3d  iphone  android  shaders 

6
แยกข้อมูลเกม / ตรรกะจากการเรนเดอร์
ฉันกำลังเขียนเกมโดยใช้ C ++ และ OpenGL 2.1 ฉันคิดว่าฉันจะแยกข้อมูล / ตรรกะออกจากการแสดงผลได้อย่างไร ในขณะนี้ฉันใช้คลาสพื้นฐาน 'Renderable' ที่ให้วิธีเสมือนจริงเพื่อนำมาใช้วาดภาพ แต่วัตถุทุกชิ้นมีรหัสพิเศษเฉพาะวัตถุเท่านั้นที่รู้วิธีการตั้งค่าเครื่องแบบ shader อย่างถูกต้องและจัดระเบียบข้อมูลบัฟเฟอร์อาร์เรย์จุดสุดยอด ฉันลงเอยด้วยฟังก์ชัน gl * จำนวนมากโทรไปทั่วรหัสของฉัน มีวิธีการทั่วไปในการวาดวัตถุหรือไม่?
21 c++  opengl  rendering  logic  data 

3
ทำไม OpenGL> = 3 อนุญาตให้ VBO เท่านั้น
ฉันเห็นว่า OpenGL เวอร์ชัน 3 ขึ้นไปกำจัดการใช้การเรนเดอร์ฝั่งไคลเอ็นต์ โหมดทันทีถูกตัดออกและดูเหมือนว่าจุดสุดยอดจะถูกยกเลิก แต่ถ้าฉันเข้าใจถูกต้อง VBOs เป็นวิธีหลักในการแสดงจุดยอด ในขณะที่ฉันเห็นตรรกะเบื้องหลังการมีวิธีที่เหมือนกันในการเรนเดอร์ทุกอย่างมันเป็นกรณีที่ VBOs ไม่มีข้อเสียอย่างใหญ่หลวงในอาร์เรย์ของจุดยอดหรือไม่? ฉันคิดว่า VBO ควรจะเป็นบัฟเฟอร์ขนาดใหญ่ที่มีข้อมูล> 1MB โดยทั่วไป ถ้าฉันมีฉากที่มีรูปทรงเรขาคณิตขนาดเล็กกว่ามาก ฉันมีกราฟฉากที่มีโหนดจำนวนมากโดยแต่ละโหนดต้องการการแปลงของตัวเอง ฯลฯ แต่ละโหนดควรสามารถลบแยกต่างหากเพิ่มลงในแบบแยกต่างหากเป็นต้นฉันใช้อาร์เรย์จุดยอดมาก่อน ดังนั้นคำถามแรกของฉันคือถ้าฉันเปลี่ยนเป็น VBOs จะมีค่าใช้จ่ายมากขึ้นในวัตถุกราฟฉากของฉันตอนนี้เพราะ VBO จำเป็นต้องจัดสรรให้กับแต่ละวัตถุ สิ่งที่น่ากังวลอีกอย่างคือเรขาคณิตที่ฉันกำลังแสดงนั้นมีความสามารถสูง ในกรณีที่เลวร้ายที่สุดอาจมีบางครั้งที่รูปทรงเรขาคณิตทั้งหมดจำเป็นต้องส่งใหม่ทุกเฟรมในช่วงระยะเวลาหนึ่ง VBOs จะมีประสิทธิภาพการทำงานที่แย่กว่าอาเรย์จุดสุดยอดในกรณีการใช้งานนี้หรือไม่หรือ VBOs ที่แย่ที่สุดจะทำงานได้ดีกว่าอาเรย์ในแนวดิ่ง แต่ไม่มากไปกว่านี้? ดังนั้นในรูปแบบที่กระชับยิ่งขึ้นคำถามของฉันคือ: 1) มีค่าใช้จ่ายจำนวนมากในการจัดสรร / ยกเลิกการจัดสรร VBOs (ฉันหมายถึงการตั้งค่าบัฟเฟอร์) 2) ถ้าฉันอัปเดตข้อมูลจากซีพียูทุกเฟรมสิ่งนี้จะแย่กว่าถ้าฉันใช้อาร์เรย์จุดยอดหรือไม่? และสุดท้ายฉันอยากรู้ว่า: 3) หากคำตอบของคำถามใดคำถามหนึ่งข้างต้นคือ "ใช่" ทำไมเลิกใช้โหมดการแสดงผลอื่นที่อาจมีข้อได้เปรียบเหนือ VBOs มีบางอย่างที่ฉันขาดไปเช่นเทคนิคที่ฉันควรจะใช้เพื่อลดต้นทุนการจัดสรรที่อาจเกิดขึ้นเหล่านี้หรือไม่? 4) …

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

7
หนังสือ Shader ที่ทันสมัย? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันสนใจที่จะเรียนรู้เกี่ยวกับ Shaders: พวกเขาจะใช้อะไรเมื่อไหร่และจะใช้อะไรและจะใช้อย่างไร (โดยเฉพาะฉันสนใจผลของ Water and Bloom แต่ฉันรู้ใกล้เคียงกับ 0 เกี่ยวกับ Shaders ดังนั้นฉันต้องมีการแนะนำทั่วไป) ฉันเห็นหนังสือมากมายที่มีอายุสองสามปีดังนั้นฉันจึงไม่รู้ว่าพวกเขายังใช้อยู่หรือไม่ ฉันกำลังกำหนดเป้าหมาย XNA 4.0 ในขณะนี้ (ซึ่งฉันเชื่อว่าหมายถึง HLSL Shader สำหรับ Shader Model 4.0) แต่สิ่งใดก็ตามที่เป็นเป้าหมายของ DirectX 11 และ OpenGL 4 จะเป็นประโยชน์จริง ๆ ฉันคิดว่า

7
สำหรับเกม 2D มีเหตุผลใดที่จะไม่ใช้ 3D API เช่น Direct3D หรือ OpenGL?
ฉันออกจากงานอดิเรกพัฒนาเกมมาระยะหนึ่งแล้ว ย้อนกลับไปเมื่อฉันทำมันคนส่วนใหญ่ใช้ Direct Draw เพื่อสร้างเกม 2D เมื่อถึงเวลาที่ผู้คนหยุดพูดว่า OpenGL หรือ Direct3D ด้วยการฉายภาพฉากฉากเป็นวิธีที่จะไป ฉันกำลังคิดที่จะกลับไปสู่การสร้างเกม 2 มิติโดยเฉพาะบนโทรศัพท์มือถือ แต่อาจเป็นบนแพลตฟอร์ม XNA เช่นกัน เพื่อให้บางสิ่งบางอย่างโดยใช้ OpenGL ฉันมีเส้นโค้งการเรียนรู้ขนาดเล็ก (ที่หวัง) เพื่อทำให้ฉันคุ้นเคยกับการพัฒนา 3D มีเหตุผลใดที่จะข้ามไปและทำงานกับเฟรมเวิร์ก 2D ที่ฉันเพิ่งมีบัฟเฟอร์เฟรมความกว้าง x ความสูงฉันต้องเติมพิกเซล?
20 2d  opengl  directx 

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

5
OpenGL: ทำไมฉันต้องตั้งค่าปกติด้วย glNormal
ฉันกำลังเรียนรู้พื้นฐานของ OpenGL แต่ฉันสงสัยว่าทำไมมีการเรียกglNormalให้ตั้งค่าจุดยอดนิยมตามปกติ ถ้าฉันสร้างสามเหลี่ยมอย่างง่ายเช่นนี้: glBegin(GL_TRIANGLES); glVertex3f(0,0,0); glVertex3f(1,0,0); glVertex3f(0,1,0); glEnd(); ไม่ควรกำหนดบรรทัดฐานโดยปริยายโดยชนิดของเรขาคณิตดั้งเดิม? หากฉันไม่ได้ตั้งค่าปกติ OpenGL จะคำนวณหรือไม่
19 opengl  normals 

6
ฉันควรใช้รหัส OpenGL เวอร์ชันใดพิจารณาถึงความเข้ากันได้และประสิทธิภาพ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดเมื่อปีที่แล้ว เมื่อข้อมูลจำเพาะ OpenGL อัปเดตพวกเขาจะเพิ่มคุณสมบัติเท่านั้น ดังนั้นตามทฤษฎีแล้วฮาร์ดแวร์ล่าสุดและยิ่งใหญ่ที่สุดที่รองรับโปรไฟล์ Core และ Compatibility ควรเรียกใช้โค้ด OpenGL1.1 ที่เก่ามาก สิ่งนี้กลายเป็นจริง ฉันใช้เวลา 12 เดือนในการเรียนรู้ OpenGL1.1 และเข้าใจอย่างเป็นธรรม ฉันได้อ่านไม่กี่บทของหนึ่งในหนังสือ OpenGL4.2 ใหม่ที่แปลกใหม่ คุณสมบัติเกือบทั้งหมดที่ฉันเชื่อถือได้เลิกใช้แล้ว (เช่นรายการดิสเพลย์) ซึ่งให้ฉันคิดว่ามีวิธีที่ดีกว่าในการทำสิ่งเหล่านี้ทั้งหมด ให้พิจารณาว่า 1.1 มีแนวโน้มที่จะได้รับการสนับสนุนโดยฮาร์ดแวร์ทันสมัยทั้งหมด 1.1 ได้รับการปล่อยตัวในปี 1992 ผมไม่ได้เข้ารหัสวิธีที่ยากเพียงแค่ให้การสนับสนุนเครื่องคอมพิวเตอร์อายุ 20 ปี :-p ฉันคิดว่ามันสมเหตุสมผลที่จะสมมติว่านักเล่นเกมส่วนใหญ่ใช้ฮาร์ดแวร์ที่พื้นในช่วงกลางอายุประมาณ 5 ปี ฉันคิดว่าวิธีการที่ใหม่กว่านั้นได้รับการออกแบบมาให้เป็นหนึ่งในสองสิ่งที่เป็นสากล: ประสิทธิภาพที่ดีขึ้นหรือง่ายต่อการเขียนโค้ด ฉันอ่านบางที่มันไม่เคยทั้งสอง! XD OpenGL …
19 opengl 

3
ฉันจะทดสอบการแสดงผลหน่วยได้อย่างไร
ฉันได้รับการยอมรับจากการพัฒนาแบบทดสอบด้วยการขับเคลื่อน (TDD) เมื่อไม่นานมานี้และมันก็มีผลกระทบที่ยอดเยี่ยมต่อผลลัพธ์การพัฒนาของฉันและความยืดหยุ่นของโค้ดเบสของฉัน ฉันต้องการขยายวิธีการนี้ไปยังงานเรนเดอร์บางตัวที่ฉันทำใน OpenGL แต่ฉันไม่สามารถหาวิธีการที่ดีได้ ฉันจะเริ่มต้นด้วยตัวอย่างที่เป็นรูปธรรมเพื่อให้เราทราบว่าฉันต้องการทดสอบประเภทใด สมมติว่าฉันต้องการสร้างคิวบ์ยูนิตที่หมุนรอบแกนบางส่วนและฉันต้องการให้แน่ใจว่าสำหรับเฟรมจำนวนหนึ่งเฟรมแต่ละเฟรมจะแสดงผลอย่างถูกต้อง ฉันจะสร้างกรณีทดสอบอัตโนมัติได้อย่างไร โดยเฉพาะอย่างยิ่งฉันยังสามารถเขียนกรณีทดสอบก่อนที่จะเขียนรหัสใด ๆ เพื่อแสดงผล cube (ตามวิธีปฏิบัติ TDD ตามปกติ) เหนือสิ่งอื่นใดฉันต้องการตรวจสอบให้แน่ใจว่าขนาดตำแหน่งและการวางแนวของลูกบาศก์ แก้ไขในแต่ละเฟรมที่แสดงผล ฉันอาจต้องการตรวจสอบให้แน่ใจว่าสมการแสงในเฉดสีของฉันนั้นถูกต้องในแต่ละเฟรม วิธีเดียวที่มีประโยชน์จากระยะไกลสำหรับสิ่งนี้ที่ฉันได้พบเกี่ยวข้องกับการเปรียบเทียบผลลัพธ์ที่แสดงผลไปยังเอาต์พุตอ้างอิงซึ่งโดยทั่วไปจะกีดกันการฝึกฝน TDD และยุ่งยากมาก ฉันสามารถทำตามข้อกำหนดอื่น ๆ ที่ต้องการได้ แต่ฉันเกรงว่าสิ่งที่ฉันได้ระบุไว้ไม่สามารถเข้าถึงได้

4
ดาวเคราะห์ขั้นตอนแผนที่ความสูงและพื้นผิว
ฉันกำลังทำงานกับเครื่องกำเนิดดาวเคราะห์ขั้นตอน OpenGL ฉันหวังว่าจะใช้มันสำหรับเกม RPG อวกาศซึ่งจะไม่อนุญาตให้ผู้เล่นลงไปยังพื้นผิวของดาวเคราะห์ดังนั้นฉันจึงไม่สนใจสิ่งที่เกี่ยวข้องกับ ROAM ในขณะนี้ฉันกำลังวาดลูกบาศก์ด้วย VBO และแมปลงในทรงกลม ฉันคุ้นเคยกับเทคนิคการสร้างส่วนสูงแฟร็กทัลส่วนใหญ่และได้นำการแทนที่มิดพอยต์ของฉันมาใช้แล้ว (ไม่มีประโยชน์ในกรณีนี้ที่ฉันรู้) คำถามของฉันคืออะไรเป็นวิธีที่ดีที่สุดในการสร้างความสูงของแผนที่ ผมมองที่ libnoise ซึ่งจะช่วยให้ฉันเพื่อให้ heightmaps tilable / พื้นผิว แต่เท่าที่ฉันสามารถดูฉันจะต้องสร้างสุทธิเช่นนี้ ปล่อยให้ปูกระเบื้องชัดเจน ใครช่วยแนะนำเส้นทางที่ดีที่สุดให้ฉันได้บ้าง? การป้อนข้อมูลใด ๆ จะได้รับการชื่นชมมาก

3
อัปเกรดเวอร์ชัน OpenGL บน Windows หรือไม่
ฉันจะอัปเดตเวอร์ชันของ OpenGL บน Windows เพื่อให้ฉันสามารถใช้สิ่งใดที่ใหม่กว่าไฟล์ส่วนหัวเวอร์ชัน 1.1 ที่รวมอยู่ใน Platform SDK ได้อย่างไร แม้แต่เวอร์ชั่น 7.0A ของ SDK สำหรับ Windows 7 จะมีเพียง GL.h และ GLU.h สำหรับ OpenGL เวอร์ชัน 1.1 เท่านั้น ฉันได้ติดตั้งไดรเวอร์ NVidia สำหรับบอร์ดของฉันที่รองรับ OpenGL 4.1 แล้ว แต่ฉันไม่เห็นไฟล์ส่วนหัวที่รวมอยู่ในแพ็คเกจนี้
19 c++  opengl 

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