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

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

2
รูปแบบโมเดล 3 มิติที่พบมากที่สุดสำหรับ OpenGL
ฉันเป็นสามเณรที่เริ่มเล่นกับ OpenGL ES บนอุปกรณ์ Android เพื่อฝึกฝน OpenGL ฉันต้องการสร้างเอ็นจิ้นเกมขนาดเล็กดังนั้นฉันจึงสงสัยว่ารูปแบบไฟล์ 3D ที่ดีที่สุดคืออะไร ฉันสนใจรุ่นฟรีในรูปแบบเดียวกัน คุณแนะนำอะไร?
12 opengl  3d  models 

4
GLM: มุมออยเลอร์ถึงควอเทอร์เนียน
ฉันหวังว่าคุณจะรู้คณิตศาสตร์ GL ( GLM ) เพราะฉันมีปัญหาฉันไม่สามารถทำลาย: ฉันมีชุดของออยเลอร์แองเกิ้ลและฉันจำเป็นต้องทำการแก้ไขอย่างราบรื่นระหว่างพวกเขา วิธีที่ดีที่สุดคือแปลงพวกมันเป็นQuaternionsและใช้SLERP alrogirthm ปัญหาที่ฉันมีคือวิธีการเริ่มต้น glm :: quaternion กับ Euler Angles ได้ไหม? ฉันอ่านเอกสาร GLM ครั้งแล้วครั้งเล่าแต่ฉันไม่สามารถหาที่เหมาะสมQuaternion constructor signatureได้ซึ่งต้องใช้เวลาสามมุมของออยเลอร์ ที่ใกล้เคียงที่สุดที่ฉันพบคือ ฟังก์ชั่นangleAxis ()รับค่ามุมและแกนสำหรับมุมนั้น หมายเหตุโปรดสิ่งที่ฉันกำลังมองหา si RotX, RotY, RotZทางวิธีการแยก สำหรับข้อมูลของคุณนี่คือลายเซ็นของฟังก์ชันangleAxis () ที่ เป็น metnioned ด้านบน: detail::tquat< valType > angleAxis (valType const &angle, valType const &x, valType const &y, valType …

5
สิ่งประดิษฐ์พื้นผิว Skybox บนขอบ
ฉันมีปัญหาแปลก ๆ กับการวาดลวดลายบน skybox บน Mac ทุกอย่างใน iPhone เป็นไปด้วยดี ฉันพยายามเปลี่ยนมูลค่าเครื่องบินใกล้และไกลโดยไม่ประสบความสำเร็จ มันเป็นสกายบ็อกซ์ของหกพื้นผิวและสำหรับทุกพื้นผิวฉันตั้งค่านี้: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); มีปัญหาอะไร ภาพหน้าจอ: แก้ไข: ฉันได้ลองตั้งค่าสีพื้นหลังเป็นสีแดงเพื่อให้แน่ใจว่ามีเลือดไหลออกมาผ่านพื้นผิวหรือไม่ ฉันได้ลองเปลี่ยน coords ของ texture เป็น: float err_corr = 0.5 / TEXTURE_SIZE; GLfloat vertices[24] = { -1.0f - err_corr, -1.0f - err_corr, 1.0f + …
12 opengl  textures  macos  sky 

8
เริ่มต้นกับ 2d Game Dev (C ++): DirectX หรือ OpenGL หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ดังนั้นฉันเป็นนักเรียนที่กำลังมองหาที่จะก้าวเข้ามาใกล้ประตูของการพัฒนาเกมและฉันกำลังมองหาที่จะทำบางสิ่งบางอย่าง 2D อาจเป็น tetris / ผู้รุกรานพื้นที่ / โคลน - โต้ตอบกับเมาส์บางสิ่งบางอย่าง ฉันชี้การค้นหาของฉันไปในทิศทางของ C ++ และ 2d และในที่สุดก็นำไปสู่ ​​DirectX / OpenGL ตอนนี้เมื่อฉันเข้าใจแล้วแพ็คเกจเหล่านี้ทั้งหมดจะทำเพื่อฉันคือการวาดสิ่งบนหน้าจอ และนั่นคือทั้งหมดที่ฉันสนใจจริงๆ ณ จุดนี้ ไม่จำเป็นต้องใช้เสียง อินพุตสามารถจัดการได้ด้วย stdlib ดังนั้นสำหรับผู้เริ่มต้นที่พยายามสร้างเกมพื้นฐานใน C ++ คุณจะแนะนำ DirectX หรือ OpenGL หรือไม่ ทำไม? ฟีเจอร์หลักบางอย่างแตกต่างกันระหว่างสองคุณสมบัตินี้? ข้อใดใช้งานได้มากกว่า
12 c++  opengl  directx 

7
วิธีที่เร็วที่สุดในการสร้างเอฟเฟกต์ของอนุภาคอย่างง่าย
ฉันกำลังมองหาวิธีที่เร็วที่สุดในการสร้างเอฟเฟกต์อนุภาคแบบง่าย ๆ ที่จะถูกสแปมเหมือนนรกในเกม ... โดยทั่วไปเกมของฉันดูเหมือนว่าเกม vectrex ส่วนใหญ่สร้างจากเส้น ... ฉันต้องการระเบิดขนาดเล็กที่จะเป็นเรื่องธรรมดา มีบางสิ่งที่เร็วกว่าแค่เคลื่อนที่ไปรอบ ๆ บางจุดและเรนเดอร์ด้วย GL_Point?

5
API สะพานที่ไม่เชื่อเรื่องพระเจ้า (เช่น OpenGL / D3D / อะไรก็ตาม) คุณใช้มันอย่างไรคุณสร้างมันขึ้นมา Pro's and Con's [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา คุณกำลังสร้างเอนจิ้น 3 มิติ คุณต้องการโลกที่หลากหลายที่สุด ทันใดนั้นคุณก็รู้ว่าถ้าคุณต้องการใช้ Direct3D บนเครื่อง Windows และ OpenGL บน OSX / Linux คุณจะต้องเสียสละคุณสมบัติที่รองรับของตัวหารที่ใช้ร่วมกันให้น้อยที่สุด บางคนอาจใช้ OpenGL ในสามระบบปฏิบัติการ 'เพราะมันดูเหมือนจะเป็นตัวหารร่วมน้อยที่สุดด้วยตัวเอง ทั้งหมดเป็นสิ่งที่ดี. จากนั้นคุณต้องพอร์ตกราฟิก API ของคุณไปที่ GX ของ Nintendo คุณต้องสร้างเส้นทาง PS3 และ Xbox360 ด้วย คุณทำอะไร? คุณออกแบบ API ของคุณเองซึ่งเป็นตัวหารน้อยที่สุดในตัวเองและเขียนการใช้งานแบ็กเอนด์สำหรับแต่ละแพลตฟอร์มหรือคุณเขียนสำหรับแต่ละแพลตฟอร์มเป็นสาขาของตัวเองหรือไม่? หากคุณเลือกที่จะออกแบบ API ของคุณเองคุณใช้รูปแบบบริดจ์หรือวูดูของคุณเองหรือไม่ ความบ้าคลั่งหยุดอยู่ที่ไหนที่คุณตระหนักถึงทุกสิ่งและวิธีการอ่างล้างจานในครัวจะต้องหยุดและคุณมีเครื่องมือแยกต่างหากสำหรับแต่ละแพลตฟอร์มเป็นสาขา หรือคุณยึดติดกับทุกอย่างและอ่างล้างจานในครัวและเก็บเฉพาะแพลตฟอร์มไว้ในความเชี่ยวชาญของโมดูลแบ็กเอนด์สำหรับแต่ละแพลตฟอร์ม

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

2
การเปลี่ยนแปลง GL_TEXTURE_WRAP) _ (S / T) ทำอะไร
ฉันกำลังทำงานผ่านบทช่วยสอนสำหรับผู้เริ่มต้น OpenGL และปัจจุบันสอนวิธีใช้พื้นผิวกับสี่เหลี่ยมผืนผ้าอย่างง่าย สถานะการสอนบอกให้ฉันตั้งค่าพารามิเตอร์พื้นผิว GL_TEXTURE_WRAP_S และ GL_TEXTURE_WRAP_T เป็น GL_CLAMP_TO_EDGE แต่ฉันไม่แน่ใจว่าสิ่งนี้ทำอะไรได้จริง ฉันรู้ว่ามันเป็นเรื่องเกี่ยวกับการจัดการพื้นผิวที่มีขนาดใหญ่กว่า / เล็กกว่าพื้นที่ที่พวกเขาถูกแมปลงบน แต่ฉันไม่แน่ใจว่าพฤติกรรมนี้เกิดขึ้นจริงได้อย่างไร GL_CLAMP_TO_EDGE ทำอะไรและแตกต่างจาก GL_CLAMP, GL_CLAMP_TO_BORDER, GL_REPEAT อย่างไร ขอบคุณมากล่วงหน้าและโบนัสความช่วยเหลือหากคุณสามารถให้ภาพสำหรับคนงี่เง่าเช่นฉัน
12 opengl  textures 

1
ความแตกต่างใน glDrawArrays และ glDrawElements
ในขณะที่สดชื่นใจของฉันกับ OpenGL ES ฉันมาข้ามและglDrawArraysglDrawElements ฉันเข้าใจว่ามีการใช้งานอย่างไรและเข้าใจว่าทำไมจึงแตกต่างกัน สิ่งที่ฉันดูเหมือนจะไม่เข้าใจก็คือฉันไม่สามารถดูวิธีการglDrawElementsบันทึกการโทรแบบดึง ( การบันทึกการโทรแบบดึงเป็นคำอธิบายที่กล่าวถึงในหนังสือส่วนใหญ่ที่ฉันได้อ่าน ลองนึกภาพสถานการณ์ง่าย ๆ ที่ฉันพยายามวาดรูปสี่เหลี่ยมโดยใช้รูปสามเหลี่ยม 2 รูป ฉันจะต้องมีชุดของ 6 จุดยอดใช้glDrawArraysในขณะที่ใช้glDrawElementsฉันต้องการเพียง 4 นอกเหนือจากอาร์เรย์ดัชนีที่มี 6 องค์ประกอบ รับข้างต้นนี่คือสิ่งที่ฉันไม่เข้าใจ: จะglDrawElementsบันทึกการเรียกสายได้อย่างไรถ้ายังต้องการใช้อาร์เรย์ดัชนี (ดัชนี 6 ตัวในกรณีสี่เหลี่ยม) เพื่อจัดทำดัชนีลงในอาร์เรย์จุดสุดยอดของฉันที่มี 4 องค์ประกอบ (6 ครั้ง) พูดอีกอย่างว่าหมายความว่าglDrawElementsยังคงต้องมีการดึงสายเรียกเข้าทั้งหมด 6 ครั้งglDrawArraysใช่ไหม จะใช้glDrawElementsพื้นที่ประหยัดได้อย่างไรถ้าใครยังคงต้องมี 2 อาร์เรย์คือหนึ่งสำหรับจุดยอดและอีกหนึ่งสำหรับดัชนี? ในกรณีของการวาดรูปสี่เหลี่ยมจัตุรัสจากรูปสามเหลี่ยม 2 รูปแบบเพื่อความง่ายจำนวนการเรียกแบบดึงglDrawElements(จำนวน 4 รายการในอาร์เรย์จุดยอดและ 6 รายการในแถวลำดับดัชนี) และglDrawArrays(6 รายการเฉพาะในจุดสุดยอดอาร์เรย์) ต้องแยกกันหรือไม่? ขอบคุณ

2
วิธีทำให้ voxel ดูเป็นธรรมชาติ
ฉันกำลังพัฒนาเกม voxel แต่ฉันคิดว่าฉันใช้เทคนิคที่ผิด ปัจจุบันฉันใช้กระเบื้องแบนเพื่อสร้างบล็อกและฉันคิดว่ามีวิธีที่ดีกว่าและมีประสิทธิภาพมากขึ้น ฉันเคยเห็นเกม voxel ซึ่งมีภูมิประเทศเป็นธรรมชาติ โดยที่ฉันหมายถึงไม่บล็อก เกมนี้มีบล็อก 4 * 4 * 4 ต่อลูกบาศก์เมตรและบล็อกเช่นดินทรายและหินมีขอบกลมและชนิดของการหลอมรวมกัน (เช่นในเกมทั่วไป) นี่เป็นภาพหน้าจอ สิ่งนี้สำเร็จได้อย่างไร

2
ข้อได้เปรียบของกลไกการเข้าถึงสถานะโดยตรงของ OpenGL คืออะไร
ฉันได้อ่านเกี่ยวกับ OpenGL 4.5 Direct State Access (DSA) ที่opengl.orgและไม่แน่ใจว่าฉันทำให้ถูกต้องหรือไม่ ดูเหมือนจะบอกเป็นนัยว่าวิธีเก่ามีประสิทธิภาพน้อยกว่า: glBind(something) glSetA(..) glSetB(..) glSetC(..) กว่าวิธีใหม่: glSetA(something, ..) glSetB(something, ..) glSetC(something, ..) จากลักษณะของมันตอนนี้แต่ละคนglSetมีการรวมglBind(something)ภายในของมันและถ้า OpenGL somethingที่ยังคงความเป็นรัฐที่เครื่องไม่สามารถใช้ประโยชน์จากการเปลี่ยนแปลงที่นำไปใช้กับสตรีมเดียว โปรดอธิบายเหตุผลเบื้องหลังและข้อดีของ DSA ใหม่
11 opengl 

1
ฉันจะกำหนดความเร็วของจุดสุดยอดและชิ้นส่วนแยกของฉันได้อย่างไร
ฉันต้องการทราบว่าฉันสามารถตรวจสอบเพื่อดูว่าจุดสุดยอดของฉันหรือชิ้นส่วน Shader ของฉันเป็นคอขวดในท่อแสดงผลของฉัน ฉันได้อ่านเกี่ยวกับการใช้glQueryCounterกับGL_TIMESTAMPเป้าหมายเพื่อรับจุดตรวจสอบสัญญาณนาฬิการะหว่างคำสั่ง OpenGL แต่สิ่งเหล่านี้ไม่ได้แยกความแตกต่างระหว่างประเภทของเฉดสี ตัวอย่างเช่นหากหนึ่งเฟรมบน GPU ใช้เวลาในการเรนเดอร์ 8 มิลลิวินาทีฉันสามารถบอกได้หรือไม่ว่าตัวแบ่งยอดใช้เวลา 7 มิลลิวินาทีและแฟรกเมนต์ตัวแบ่งใช้ 1 มิลลิวินาที

2
วิธีการใช้การแปล, ระดับ, gizmos หมุนสำหรับจัดการการแปลงของวัตถุ 3 มิติ?
ฉันอยู่ในขั้นตอนการพัฒนาโปรแกรมแก้ไข 3D พื้นฐาน มันใช้ OpenGL สำหรับการเรนเดอร์โลก 3 มิติ ตอนนี้ฉากของฉันเป็นเพียงกล่องขนาดต่าง ๆ และฉันอยู่บนเวทีที่ฉันต้องการให้สามารถเลือกกล่องแต่ละกล่องแล้วย้าย / ปรับขนาด / หมุนเพื่อให้ได้การแปลงที่ฉันต้องการ ฉันจะแก้ปัญหาในการนำเครื่องมือ gizmos ของเครื่องมือเหล่านี้ (หรือที่จับหรือวิธีที่คนทั่วไปเรียกพวกเขา) และเลือกพวกเขาในแต่ละแกนเพื่อทำการเปลี่ยนแปลงในการแปลงด้วยเมาส์ของฉัน? เพื่อความชัดเจน: การวิจัยของฉันจนถึงขณะนี้แนะนำวิธีที่สะอาดที่สุดคือให้มีกล่องจัดแนวแกนต่อลูกศรใน Gizmo และอีกหนึ่งต่อตาราง (คนที่ย้ายวัตถุในเครื่องบินมากกว่าแกนเดียว) แล้วโยนรังสีจากเมาส์ วางตำแหน่งและดูว่ามันปะทะกับอะไร แต่นี่ก็ยังเป็นนามธรรมเกินไปสำหรับฉันฉันขอขอบคุณคำแนะนำเพิ่มเติมในวิธีการที่อัลกอริทึมนี้จะไป (pseudocode มากกว่าพอ)
11 opengl  3d 

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

3
จุดประสงค์ของดัชนีในการเรนเดอร์ 3D คืออะไร?
สมมติว่าคุณกำลังสร้างลูกบาศก์ 3D ใน OpenGL คุณใช้ข้อมูลจุดสุดยอดที่จำเป็นสำหรับวัตถุ (คิวบ์) จุดประสงค์ของการใช้ดัชนีคืออะไร void CreateCube() { const Vertex VERTICES[8] = { { { -.5f, -.5f, .5f, 1 }, { 0, 0, 1, 1 } }, { { -.5f, .5f, .5f, 1 }, { 1, 0, 0, 1 } }, { { .5f, .5f, .5f, 1 }, …
11 opengl 

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