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

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

4
กาลครั้งหนึ่งเมื่อ> เร็วกว่า <…เดี๋ยวก่อนอะไรนะ?
ฉันกำลังอ่านบทแนะนำ OpenGL ที่ยอดเยี่ยม มันยอดเยี่ยมมากเชื่อใจฉัน หัวข้อที่ฉันอยู่ในขณะนี้คือ Z-buffer นอกเหนือจากการอธิบายว่ามันคืออะไรผู้เขียนกล่าวว่าเราสามารถทำการทดสอบเชิงลึกที่กำหนดเองเช่น GL_LESS, GL_ALWAYS และอื่น ๆ นอกจากนี้เขายังอธิบายว่าความหมายที่แท้จริงของค่าความลึก ที่กำหนดเอง ฉันเข้าใจจนถึง แล้วผู้เขียนก็บอกว่ามีอะไรที่ไม่น่าเชื่อ: ช่วง zNear สามารถมากกว่าช่วง zFar; ถ้าเป็นเช่นนั้นค่าพื้นที่หน้าต่างจะถูกย้อนกลับในแง่ของสิ่งที่ถือว่าใกล้เคียงที่สุดหรือไกลที่สุดจากผู้ชม ก่อนหน้านี้ได้มีการกล่าวว่าค่า Z- ช่องว่างของหน้าต่างอยู่ใกล้ที่สุดและ 1 มากที่สุด อย่างไรก็ตามหากค่าคลิปพื้นที่ Z ของเราถูกลบความลึก 1 จะอยู่ใกล้กับมุมมองมากที่สุดและความลึกของ 0 จะใกล้เคียงที่สุด แต่ถ้าเราพลิกทิศทางของการทดสอบความลึก (GL_LESS ถึง GL_GREATER ฯลฯ ) เราจะได้ผลลัพธ์เดียวกัน มันเป็นเพียงแค่การประชุมเท่านั้น อันที่จริงการพลิกเครื่องหมายของ Z และการทดสอบเชิงลึกนั้นครั้งหนึ่งเคยเป็นการเพิ่มประสิทธิภาพที่สำคัญสำหรับเกมจำนวนมาก ถ้าฉันเข้าใจอย่างถูกต้องฉลาดหลักแหลมการพลิกเครื่องหมายของ Z และการทดสอบเชิงลึกคืออะไร แต่การเปลี่ยนการ&lt;เปรียบเทียบกับการ&gt;เปรียบเทียบ ดังนั้นหากฉันเข้าใจอย่างถูกต้องและผู้แต่งไม่ได้โกหกหรือทำสิ่งต่าง ๆ ขึ้นมาการเปลี่ยนแปลง&lt;ที่&gt;เคยเป็นสิ่งสำคัญที่สุดสำหรับหลาย …
280 c  optimization  opengl  cpu  gpu 


5
อะไรคือสิ่งที่ล้ำสมัยสำหรับการแสดงผลข้อความใน OpenGL ตั้งแต่เวอร์ชัน 4.1? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ มีคำถามจำนวนหนึ่งเกี่ยวกับการแสดงข้อความใน OpenGL เช่น: วิธีการทำ OpenGL live text-rendering สำหรับ GUI? แต่ส่วนใหญ่สิ่งที่กล่าวถึงคือการแสดงผลคณะสี่พื้นผิวโดยใช้ฟังก์ชั่นท่อคงที่ แน่นอนว่าผู้ที่จะต้องทำให้ดีขึ้น ฉันไม่ได้กังวลเกี่ยวกับความเป็นสากลสตริงส่วนใหญ่ของฉันจะเป็นป้ายกำกับการทำเครื่องหมาย (วันที่และเวลาหรือตัวเลขล้วนๆ) แต่พล็อตจะถูกเรนเดอร์อีกครั้งที่อัตราการรีเฟรชหน้าจอและอาจมีข้อความค่อนข้างน้อย (ไม่เกินสองสามพันสัญลักษณ์บนหน้าจอ วิธีการที่แนะนำสำหรับการแสดงผลข้อความโดยใช้ OpenGL ที่ทันสมัยคืออะไร? (การอ้างถึงซอฟต์แวร์ที่มีอยู่โดยใช้วิธีการเป็นหลักฐานที่ดีว่ามันทำงานได้ดี) รูปทรงเรขาคณิตที่ยอมรับเช่นตำแหน่งและทิศทางและลำดับของตัวละคร รูปทรงเรขาคณิตที่แสดงแบบอักษรของเวกเตอร์ ดังกล่าวข้างต้น แต่ใช้เฉดสี tessellation แทน ตัวคำนวณที่ใช้ในการทำ rasterization แบบอักษร
199 opengl  text  glsl  shader  opengl-4 

10
วิธีการดีบัก GLSL shader
ฉันต้องการดีบักโปรแกรม GLSL แต่ฉันไม่ทราบวิธีการแสดงผลกลาง เป็นไปได้ไหมที่จะทำการติดตาม debug บางอัน (เช่นกับ printf) ด้วย GLSL?
193 opengl  debugging  glsl 

17
เกม 3D มีประสิทธิภาพอย่างไร? [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิด5 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ มีบางอย่างที่ฉันไม่เคยเข้าใจ เกมพีซีขนาดใหญ่ที่ยอดเยี่ยมอย่าง GTA IV สามารถใช้ซีพียูของฉันได้ 50% และทำงานที่ 60fps ในขณะที่การสาธิต DX ของ Teapot @ 60fps ที่หมุนได้ใช้งานได้ถึง 30%

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

4
ความแตกต่างและความสัมพันธ์ระหว่าง glActiveTexture และ glBindTexture
จากสิ่งที่ฉันรวบรวมให้glActiveTextureตั้งค่า "หน่วยพื้นผิว" ที่ใช้งานอยู่ แต่ละหน่วยพื้นผิวสามารถมีเป้าหมายพื้นผิวได้หลายแบบ (โดยปกติคือ GL_TEXTURE_1D, 2D, 3D หรือ CUBE_MAP) ถ้าฉันเข้าใจถูกต้องคุณต้องเรียกglActiveTextureเพื่อตั้งค่าหน่วยพื้นผิวก่อน (เริ่มต้นเป็นGL_TEXTURE0) แล้วคุณผูก "เป้าหมายพื้นผิว" (หนึ่งหรือมากกว่า) กับหน่วยพื้นผิวนั้น? จำนวนหน่วยพื้นผิวที่ใช้ได้ขึ้นอยู่กับระบบ ฉันเห็น enums มากถึง 32 ในห้องสมุดของฉัน ฉันเดาว่าโดยพื้นฐานแล้วหมายความว่าฉันสามารถมีขีด จำกัด GPU น้อยกว่าของฉันได้ (ซึ่งฉันคิดว่าเป็น168) และ 32 พื้นผิวในหน่วยความจำ GPU ในคราวเดียว? ฉันเดาว่ามีขีด จำกัด เพิ่มเติมที่ฉันจะไม่เกินหน่วยความจำสูงสุดของ GPU (ประมาณ 1 GB) ฉันเข้าใจความสัมพันธ์ระหว่างเป้าหมายพื้นผิวและหน่วยพื้นผิวอย่างถูกต้องหรือไม่ สมมติว่าฉันได้รับอนุญาต 16 ยูนิตและ 4 เป้าหมายแต่ละอันหมายความว่ามีที่ว่างสำหรับ 16 * 4 = 64 …
137 opengl  textures 

6
glLoadIdentity () ทำอะไรใน OpenGL
ฉันยังใหม่กับ OpenGL และฉันรู้สึกไม่ค่อยสบายใจกับฟังก์ชันแบบสุ่มทั้งหมดที่ฉันมีในโค้ดของฉัน พวกเขาใช้งานได้และฉันรู้ว่าควรใช้เมื่อใด แต่ฉันไม่รู้ว่าทำไมฉันถึงต้องการมันหรือสิ่งที่พวกเขาทำจริงๆ ฉันรู้ว่าglLoadIdentity()แทนที่เมทริกซ์ปัจจุบันด้วยเมทริกซ์เอกลักษณ์ แต่มันทำอะไรกันแน่? หากทุกโปรแกรมต้องการทำไมเมทริกซ์เอกลักษณ์จึงไม่เป็นค่าเริ่มต้นเว้นแต่จะระบุไว้เป็นอย่างอื่น ฉันไม่ชอบให้มีฟังก์ชันในโค้ดของฉันเว้นแต่ฉันจะรู้ว่ามันทำอะไร ฉันควรทราบว่าฉันใช้ OpenGL เฉพาะสำหรับไคลเอนต์ 2D ที่สมบูรณ์ดังนั้นขอโทษที่ฉันไม่รู้ว่านี่เป็นสิ่งที่ชัดเจนมากสำหรับ 3D นอกจากนี้ยังสับสนเล็กน้อยเกี่ยวกับVSglMatrixMode(GL_PROJECTION)glMatrixMode(GL_MODELVIEW)
133 opengl  graphics 

6
นามสกุลไฟล์ที่ถูกต้องสำหรับ GLSL Shaders คืออะไร? [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่? อัปเดตคำถามเพื่อให้สามารถตอบพร้อมข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดเมื่อ12 เดือนที่แล้ว . ปรับปรุงคำถามนี้ ฉันกำลังเรียนรู้ glsl shading และเจอไฟล์รูปแบบต่างๆ ฉันเคยเห็นคนให้จุดยอดและส่วนแบ่งส่วน.vertและ.fragส่วนขยายของพวกเขา แต่ฉันยังเคยเห็น.vshและ.fshส่วนขยายและแม้แต่ทั้งสองเฉดสีรวมกันใน.glslไฟล์เดียว ฉันจึงสงสัยว่ามีรูปแบบไฟล์มาตรฐานหรือรูปแบบใดที่ 'ถูกต้อง'?
127 opengl  glsl  shader 

7
จะคอมไพล์สำหรับ Windows บน Linux ด้วย gcc / g ++ ได้อย่างไร
ฉันได้เขียนเอฟเฟกต์บางอย่างใน C ++ (g ++) โดยใช้ freeglut บน Linux และฉันรวบรวมด้วย g++ -Wall -lglut part8.cpp -o part8 ดังนั้นฉันจึงสงสัยว่าเป็นไปได้หรือไม่ที่ g ++ จะสร้างไฟล์ปฏิบัติการ Windows ที่คอมไพล์แบบคงที่ซึ่งมีทุกอย่างที่จำเป็น? ฉันไม่มี Windows ดังนั้นมันจะเจ๋งมากถ้าฉันทำได้บน Linux :)
119 c++  opengl  gcc  glut  freeglut 

9
ใช้ OpenGl กับ C #? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ มีไลบรารีสนับสนุน OpenGL ฟรีสำหรับ C # หรือไม่ ถ้าเป็นเช่นนั้นฉันจะใช้อันไหนและฉันจะหาโครงการตัวอย่างได้ที่ไหน C # มีคลาสสำหรับ OpenGL หรือไม่
118 c#  opengl 

4
Vertex Array Objects คืออะไร?
วันนี้ฉันเพิ่งเริ่มเรียนรู้ OpenGL จากบทช่วยสอนนี้: http://openglbook.com/the-book/ ฉันมาถึงบทที่ 2 ซึ่งฉันวาดรูปสามเหลี่ยมและฉันเข้าใจทุกอย่างยกเว้น VAO (ตัวย่อนี้ใช้ได้หรือไม่) บทช่วยสอนมีรหัสนี้: glGenVertexArrays(1, &amp;VaoId); glBindVertexArray(VaoId); แม้ว่าฉันเข้าใจว่ารหัสนั้นจำเป็น แต่ฉันก็ไม่รู้ว่ามันทำอะไร แม้ว่าฉันจะไม่เคยใช้ VaoId เลยจุดนี้ (ยกเว้นจะทำลายมัน) แต่โค้ดก็ไม่ทำงานหากไม่มีมัน ฉันคิดว่านี่เป็นเพราะมันจำเป็นต้องถูกผูกมัด แต่ฉันไม่รู้ว่าทำไม รหัสที่แน่นอนนี้จำเป็นต้องเป็นส่วนหนึ่งของโปรแกรม OpenGL ทุกโปรแกรมหรือไม่ บทช่วยสอนอธิบาย VAO เป็น: Vertex Array Object (หรือ VAO) เป็นอ็อบเจ็กต์ที่อธิบายวิธีการจัดเก็บแอ็ตทริบิวต์จุดยอดใน Vertex Buffer Object (หรือ VBO) ซึ่งหมายความว่า VAO ไม่ใช่ออบเจ็กต์จริงที่จัดเก็บข้อมูลจุดยอด แต่เป็นตัวบอกข้อมูลของจุดยอด แอตทริบิวต์ Vertex สามารถอธิบายได้ด้วยฟังก์ชัน glVertexAttribPointer และฟังก์ชันน้องสาวสองตัว glVertexAttribIPointer และ …
116 opengl  vbo  vertex-array  vao 

8
opengl: glFlush () กับ glFinish ()
ฉันมีปัญหาในการแยกแยะความแตกต่างระหว่างการโทรglFlush()และglFinish(). เอกสารกล่าวว่าglFlush()และglFinish()จะผลักดันการดำเนินการที่บัฟเฟอร์ทั้งหมดไปยัง OpenGL เพื่อให้มั่นใจได้ว่าจะถูกดำเนินการทั้งหมดความแตกต่างจะglFlush()ส่งกลับทันทีที่glFinish()บล็อกจนกว่าการดำเนินการทั้งหมดจะเสร็จสมบูรณ์ เมื่ออ่านคำจำกัดความแล้วฉันคิดว่าถ้าฉันจะใช้glFlush()ฉันอาจประสบปัญหาในการส่งการดำเนินการไปยัง OpenGL มากกว่าที่จะดำเนินการได้ ดังนั้นเพื่อที่จะลองฉันสลับglFinish()a glFlush()และแท้จริงของฉันและดูเถิดโปรแกรมของฉันทำงาน (เท่าที่ฉันสามารถบอกได้) เหมือนกันทุกประการ อัตราเฟรมการใช้ทรัพยากรทุกอย่างเหมือนเดิม ดังนั้นฉันจึงสงสัยว่าการโทรทั้งสองสายมีความแตกต่างกันมากหรือไม่หรือถ้ารหัสของฉันทำให้การโทรไม่แตกต่างกัน หรือควรใช้ที่ไหนเทียบกับอีกอัน ฉันยังคิดว่า OpenGL จะมีการโทรบางอย่างต้องการglIsDone()ตรวจสอบว่าคำสั่งบัฟเฟอร์ทั้งหมดสำหรับ a glFlush()นั้นสมบูรณ์หรือไม่ (ดังนั้นจึงไม่ส่งการดำเนินการไปยัง OpenGL เร็วกว่าที่สามารถเรียกใช้งานได้) แต่ฉันไม่พบฟังก์ชันดังกล่าว . รหัสของฉันคือลูปเกมทั่วไป: while (running) { process_stuff(); render_stuff(); }
105 c++  c  opengl  graphics 


9
จะสร้างบริบทการแสดงผล OpenGL ที่มีพื้นหลังโปร่งใสได้อย่างไร
บริบทการแสดงผลมักจะมีสีทึบบนพื้นหลัง (สีดำหรืออะไรก็ตามดูภาพด้านล่าง): ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะตั้งค่าหน้าต่างโดยไม่มีการตกแต่งและมีพื้นหลังโปร่งใสในขณะที่อนุญาตให้ฉันแสดงสิ่งต่างๆของ OpenGL ได้ สิ่งนี้จะทำให้ภาพลวงตาว่าสามเหลี่ยมลอยอยู่บนหน้าจอ พื้นหลังโปร่งใสควรช่วยให้คุณเห็นเดสก์ท็อปหรือแอปพลิเคชันอื่น ๆ ที่อาจอยู่เบื้องหลัง คุณช่วยยกตัวอย่างด้วยซอร์สโค้ดได้ไหม แพลตฟอร์ม: Windows (win32 เท่านั้น)
101 c  winapi  opengl  transparency 

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