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

สำหรับคำถามเกี่ยวกับการใช้ไลบรารีกราฟิก OpenGL

1
ทำไมรูปสามเหลี่ยมที่อยู่ติดกันจึงไม่เคยทับซ้อนกันเมื่อแรสเตอร์?
ขออภัยสำหรับคำถาม noob ต่อไปนี้เป็นเพียงฉันไม่สามารถหาคำตอบที่น่าพอใจทุกที่ ... เมื่อฉันสร้างรูปสี่เหลี่ยมที่มีแกนเรียบง่ายประกอบด้วยสามเหลี่ยมสองรูปฉันไม่เข้าใจว่าทำไมไม่มีสิ่งประดิษฐ์ใด ๆ ที่มองเห็นได้บนขอบทแยงมุมที่สามเหลี่ยมเหล่านั้นมาบรรจบกัน พิกเซลบางส่วนนั้นต้องอยู่ในรูปสามเหลี่ยมทั้งคู่ใช่ไหม ดังนั้นถ้า fragshader ของฉันเปล่งสีโปร่งใสบางส่วน - สีดำ 50% พูดเสมอ - แล้วไม่ควรมีเส้นทแยงมุมสีดำที่มองเห็นได้ในรูปสี่เหลี่ยมที่เกิดขึ้นหรือไม่ เห็นได้ชัดว่ามันดีมากที่นี่ไม่ใช่ปัญหาจริงที่ต้องเขียนรหัสฉันแค่ไม่เข้าใจว่าทำไมมันถึงไม่ได้ ความมหัศจรรย์ของ GPU คืออะไรที่ทำให้สิ่งนี้เป็นจริง
11 opengl  gpu  rasterizer 

1
ประสิทธิภาพการวนซ้ำในเครื่อง Shader
ฉันสงสัยว่าอะไรคือวิธีที่ดีที่สุดในการรวมฟังก์ชั่นวนลูปแบบไดนามิกเข้ากับ shader? ครั้งแรกดูเหมือนว่าไม่สามารถใช้อาร์เรย์แบบไดนามิกได้ ดังนั้นจะดีกว่าหรือไม่ที่จะสร้างอาร์เรย์ขนาดสูงสุดและเติมเพียงบางส่วนหรือกำหนดอาร์เรย์ด้วยขนาดที่กำหนดไว้ล่วงหน้า แล้ววิธีที่ดีที่สุดในการทำซ้ำแถวลำดับนี้คืออะไร ควรใช้ลูปที่ไม่ได้ควบคุมหรือลูปไดนามิกสำหรับบางอย่างระหว่างการทำซ้ำ 4 ถึง 128 หรือไม่ if (i == myCurrentMaximumIterationNumber)ผมเคยเห็นยังว่ามันเป็นไปได้ที่จะคายมันจำนวนสูงสุดที่กำหนดไว้ล่วงหน้าซ้ำแล้วหยุดมันด้วยสภาพเช่น

1
ฉันจำเป็นต้องแต่งเครื่องแบบหรือคุณลักษณะใหม่เมื่อเปลี่ยนโปรแกรม shader หรือไม่
การแสดงฉากมักจะเกี่ยวข้องกับโปรแกรม shader มากกว่าหนึ่งโปรแกรมซึ่งในกรณีของฉันทุกคนใช้คุณลักษณะเดียวกันและใช้เครื่องแบบอย่างน้อยบางส่วน เพื่อให้ทำงานอย่างถูกต้องฉันกำลังเล่นอย่างปลอดภัยซึ่งหมายความว่าฉันเชื่อมโยงคุณลักษณะใหม่และรับตำแหน่งเครื่องแบบที่เหมาะสมทุกครั้งที่ฉันสลับระหว่างโปรแกรม Shader ดังนั้นโดยทั่วไปหลายครั้งในทุก ๆ เฟรมซึ่งอาจไม่ใช่วิธีที่ดีที่สุด ดังนั้นจำเป็นต้องรีบูทคุณลักษณะและชุดเครื่องแบบใหม่หลังจากเปลี่ยนโปรแกรม shader หรือไม่? และทำไม? ถ้าเป็นเช่นนั้นมีวิธีการทำเช่นนี้หนึ่งครั้งในช่วงเริ่มต้นของโปรแกรมและไม่ต้องแตะอีกครั้ง (ยกเว้นการตั้งค่าเครื่องแบบ)?
11 opengl  glsl  shader 

4
มันสำคัญไหมว่าฉันจะเรียนรู้ OpenGL หรือ Direct3D?
ความแตกต่างระหว่างรายละเอียดการใช้งานเล็กน้อยของ API ทั้งสองนี้หมายความว่าเมื่อฉันได้เรียนรู้แล้วฉันสามารถใช้กับทุกสิ่งได้หรือไม่ หรือมีเหตุผลในการเรียนรู้อย่างใดอย่างหนึ่งมากกว่าที่อื่นถ้าฉันต้องการที่จะสามารถใช้งานได้โดยทั่วไปโดยไม่ต้องเรียนรู้ API อื่นในอนาคต? เป็นหนึ่งหรือมากกว่าทั่วไป? โดยเฉพาะอย่างยิ่งฉันต้องการที่จะสามารถเขียนสำหรับกราฟิกการ์ดใด ๆ ดังนั้นรหัสไม่ จำกัด เฉพาะการทำงานบนการ์ดของ manuafacturer เฉพาะหรือรูปแบบเฉพาะ ฉันต้องการเขียนโค้ดที่ยังคงใช้งานได้หากไม่มีการ์ดกราฟิก (แม้ว่าจะช้ากว่า) รหัสพกพาแตกต่างกันอย่างไรในหลายแพลตฟอร์ม (ระบบปฏิบัติการ / สถาปัตยกรรม) มีความแตกต่างกันหรือไม่? ฉันสนใจความพร้อมของห้องสมุดอื่น ๆ ที่ทำงานกับสิ่งเหล่านี้และไม่ว่าอย่างใดอย่างหนึ่งหรืออื่น ๆ นำไปสู่ข้อ จำกัด สิทธิ์การใช้งานที่น้อยลงในสภาพแวดล้อมที่กว้างขึ้น สิ่งใดที่วัดได้ซึ่งจะสร้างความแตกต่างว่าหนึ่งในนั้นอาจเป็นสิ่งเดียวที่ฉันเรียนรู้ได้โดยไม่ จำกัด ฉัน
11 opengl  api  direct3d 

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

2
เป็นไปได้หรือไม่ที่จะทราบว่ามีชิ้นส่วนกี่ชิ้นที่ทำผ่านการทดสอบลายฉลุ?
ฉันมีแอปพลิเคชัน OpenGL ซึ่งใช้การทดสอบลายฉลุค่อนข้างมากเพื่อแสดงรูปร่างที่ผิดปกติ (เช่นCSGแบบ 2 มิติอย่างง่าย) ถ้าฉันสามารถหาจำนวนชิ้นส่วนที่ผ่านการทดสอบลายฉลุและแสดงผลได้จริงสิ่งนี้จะมีประโยชน์มากในการทำให้การคำนวณง่ายขึ้น โดยเฉพาะมันจะช่วยให้ฉันสามารถกำหนดพื้นที่ของรูปร่างที่แสดงผลได้ฟรีแทนที่จะต้องประมาณมันด้วยการจำลอง Monte Carlo ในภายหลัง ฉันรู้ว่ามีแนวคิดที่คล้ายกันสำหรับวิทยาการปล่อยออกมาจากรูปทรงเรขาคณิต Shader ที่เรียกว่าเปลี่ยนข้อเสนอแนะ ฉันต้องการทราบว่ามีแนวคิดแบบเดียวกันนี้สำหรับการทดสอบเศษและการทดสอบลายฉลุหรือไม่

2
มีเหตุผลใดที่จะชอบ Direct3D เหนือ OpenGL ไหม
ดังนั้นฉันจึงอ่านสิ่งนี้ฉันได้รับเหตุผลว่าทำไมมีเกมบน Microsoft Windows มากกว่าในระบบปฏิบัติการอื่น ๆ ปัญหาหลักที่นำเสนอคือ Direct3D เป็นที่ต้องการมากกว่า OpenGL สิ่งที่ฉันไม่เข้าใจคือสาเหตุที่นักพัฒนาซอฟต์แวร์ใดจะเสียสละความเข้ากันได้ นั่นเป็นเพียงความสูญเสียทางการเงินของ บริษัท ฉันเข้าใจว่า OpenGL เป็นระเบียบ แต่ไม่ค่อยน่าจะเป็นปัญหาสำหรับผู้เชี่ยวชาญ แม้ว่ามันจะเป็นไปได้ก็ตามฉันคิดว่าผู้คนจะไปได้ไกลกว่าที่จะได้รับความเสียหายทางการเงิน นอกจากนี้ถ้าฉันไม่ผิดแล้วแอพพลิเคชั่นข้ามแพลตฟอร์มจำนวนมากใช้ทั้ง Direct3D และ OpenGL ฉันคิดว่าพวกเขาสลับไปมาระหว่าง API นี่เป็นเรื่องแปลกเพราะพวกเขาสามารถใช้ OpenGL ได้ทำไมถึงสนใจ Direct3D? ดังนั้นคำถามคือมีปัญหาทางเทคนิคกับ OpenGL หรือมีการสนับสนุนใด ๆ ที่ Direct3D ให้ OpenGL นั้นขาดหรือไม่ ฉันทราบว่าคำถามนี้อาจถูกปิดเนื่องจากเป็นการปิดหัวข้อหรือกว้างเกินไปฉันพยายามทำให้ดีที่สุดเพื่อ จำกัด ให้แคบลง
11 opengl  direct3d 

2
วิธีการ unproject สี่เหลี่ยมสามเหลี่ยมเป็นสี่เหลี่ยม?
tl; dr: ปัญหาทางคณิตศาสตร์ในเรขาคณิตของ Projective: เราจะหาเมทริกซ์กล้อง 4x4 บางตัวที่ให้ภาพดังที่แสดงไว้ด้านล่างเช่นจุด A, B, C, D อยู่ที่ไหนสักแห่งบนขอบของกล่องหน่วย (เช่นอุปกรณ์มาตรฐาน OpenGL พิกัด) และมุมของกล่องยูนิตอยู่ในจุดที่เหมาะสมตามแนว EA, EB, EC, ED? (นี่อาจเป็นกรณีพิเศษที่เป็นไปได้ของการทำ homography, perspectivity และ / หรือ collineation ไม่คุ้นเคยกับคำศัพท์) รายละเอียดเพิ่มเติม ให้ ABCD รูปสี่เหลี่ยมสามรูปในวิวพอร์ตฉันคิดว่ามีการแปลง (?) ที่ไม่ซ้ำกันซึ่งแมปกลับไปเป็นรูปสี่เหลี่ยมผืนผ้า ดังที่เห็นในภาพด้านล่าง: ABCD รูปสี่เหลี่ยมในวิวพอร์ตทำหน้าที่เป็น 'หน้าต่าง' ทางกายภาพและถ้าเราแมปกลับไปที่สี่เหลี่ยมผืนผ้ามันจะปรากฏผิดเพี้ยน (ช่องทางด้านขวาแสดงถึง NDC ซึ่งฉันพูดถึงในภายหลัง) เป้าหมายคือการได้รับภาพทางด้านขวาอย่างรวดเร็ว เราสามารถ raytrace ทุกจุดเพื่อให้ได้ภาพ (ซึ่งฉันได้ทำไปแล้ว) แต่ฉันต้องการใช้ OpenGL หรือเทคนิคการฉายภาพอื่น …

1
การจัดตำแหน่งและการประกาศของเครื่องแบบมีความสำคัญหรือไม่?
ในส่วน6.4 บัฟเฟอร์คงที่ของหนังสือการแสดงผลและการคำนวณเชิงปฏิบัติด้วย Direct3D 11 (หน้า 325, 326) มีการกล่าวถึง: โดยค่าเริ่มต้นคอมไพเลอร์ HLSL จะพยายามจัดตำแหน่งค่าคงที่ซึ่งจะไม่ขยายการลงทะเบียน float4 หลายรายการ [... ] การบรรจุสำหรับบัฟเฟอร์คงที่ HLSL ยังสามารถระบุด้วยตนเองผ่านคีย์เวิร์ด packoffset ฉันคิดว่ากฎที่คล้ายกันจะใช้กับ OpenGL ที่เทียบเท่ากันคือ Uniform Buffer Objects เนื่องจากจะจับคู่กับคุณสมบัติฮาร์ดแวร์เดียวกัน แล้วเครื่องแบบวนิลาล่ะ กฎที่บังคับใช้เมื่อประกาศเครื่องแบบคืออะไร uniform vec2 xy; // Can we expect the compiler to pack xy uniform vec2 zw; // into a same four component register? …

2
สาเหตุของการเกิดสิวเงา
ฉันรู้วิธีการทำแผนที่เงา แต่ฉันไม่ได้รับสาเหตุของการเกิดสิวเงา! ทุกคนสามารถบอกสาเหตุของการเกิดสิวเงาด้วยวิธีง่าย ๆ ได้หรือไม่และมันเกี่ยวข้องกับความละเอียดของแผนที่ลึกอย่างไร

4
วิวพอร์ตหลายรายการพร้อม OpenGL ที่ทันสมัย?
ฉันใช้SDL2 ในปัจจุบัน shader เดียวของฉันมีเมทริกซ์ MVPและแปลงคะแนนด้วย ฉันคำนวณเมทริกซ์มุมมองและการฉายของฉันสำหรับกล้องที่มี GLM: glm::lookAt(pos, pos + forward, up); glm::perspective(fov, aspectRatio, zNear, zFar); ฉันค้นหามัน แต่ฉันสามารถค้นหาการใช้งานแบบดั้งเดิมของวิวพอร์ตหลายรายการเท่านั้น ถ้าฉันสร้างตัวอย่างสำหรับกล้อง 4 ตัวและสมมุติว่ามันเหมือนกันหมดยกเว้นกล้องทุกตัวจะมีหน้าจอที่แตกต่างกันออกไป (ดังนั้นฉันต้องการ 4 วิวพอร์ตที่มีเนื้อหาเดียวกัน) ฉันจะทำสิ่งนี้ได้อย่างไร ขออภัยถ้าฉันไม่ได้ให้ข้อมูลเพียงพออย่าลังเลที่จะถาม
9 opengl  glm 

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

1
OpenGL GLSL - ตัวกรองการตรวจจับขอบ Sobel
ในส่วนที่เกี่ยวกับหัวข้อนี้ฉันได้ใช้ตัวกรองการตรวจจับขอบ Sobelใน GLSL เรียบร้อยแล้ว นี่คือรหัสส่วนของตัวกรอง: #version 330 core in vec2 TexCoords; out vec4 color; uniform sampler2D screenTexture; mat3 sx = mat3( 1.0, 2.0, 1.0, 0.0, 0.0, 0.0, -1.0, -2.0, -1.0 ); mat3 sy = mat3( 1.0, 0.0, -1.0, 2.0, 0.0, -2.0, 1.0, 0.0, -1.0 ); void main() { vec3 diffuse …

1
การสร้างบรรทัดฐานยอดที่ใช้ร่วมกันบน GPU
ฉันส่วนใหญ่ประสบความสำเร็จในการย้ายการดำเนินการของ Marching Cubes จากซีพียูไปสู่การคำนวณด้วย OpenGL แต่ฉันยังไม่ได้แก้ไขกฎเกณฑ์บรรทัดฐานและสงสัยว่าวิธีที่ดีที่สุดจะไปเกี่ยวกับเรื่องนี้ ข้อตกลงการใช้งานของฉันเป็นการเฉพาะกับเขตข้อมูลมูลค่าไบนารี (ฉันกำลังพยายามจำลองฟังก์ชันเศษส่วน 3 มิติที่ยังไม่มีเครื่องมือประมาณระยะทาง) ดังนั้นวิธีการไล่ระดับสีและการส่งต่อความแตกต่างจะไม่ทำงาน ฉันใช้จุดสูงสุดร่วมกันและการใช้งาน CPU ของฉันใช้วิธีของ Quilez ตามที่อธิบายไว้ที่นี่เพื่อรวบรวมหน้าตามาตรฐานลงบนจุดสุดยอดแต่ละแห่ง ฉันสามารถนำการติดตั้งนี้ไปใช้กับ shader อื่นได้ แต่ปัญหาที่ฉันเห็นด้วยนี่คืออะตอมมิกจำนวนมากที่ต้องการ เนื่องจากเราสามารถใช้ atomics กับชนิดจำนวนเต็มสเกลาร์เท่านั้นและฉันไม่สามารถคิดวิธีที่จะแพ็ค 3 ลงนาม ints เป็น 1 ในทางที่สรุปได้ซึ่งหมายความว่า 3 แกน * 3 จุดยอด = 9 อะตอมเพิ่มการเรียกต่อ shader แน่นอนว่ามันจะกระจายไปทั่วหน่วยความจำดังนั้นจึงไม่เหมือนกับการกดอะตอมมิกเคาน์เตอร์เดียว 9 ครั้ง แต่มันก็ดูเหมือนว่าจะเป็นนรกมาก อีกทางเลือกหนึ่งคือการเรียกใช้ shader ต่อรูปหลายเหลี่ยมและสร้างรายการปกติของใบหน้า (ฉันอาจแพ็ค x10y10z10 ด้วยวิธีนี้) จากนั้น shader …

1
การคำนวณยอดต่อยอดใน OpenGL Tesselation
ฉันพยายามใช้การจำลองผ้าตามตำแหน่งโดยใช้การจัดการฮาร์ดแวร์ ซึ่งหมายความว่าฉันต้องการอัปโหลดรูปสี่เหลี่ยมควบคุมไปยังการ์ดกราฟิกจากนั้นใช้ tesselation และ geometry shading เพื่อสร้างโหนดในผ้า ความคิดนี้ตามหลังกระดาษ: Huynh, David "การจำลองผ้าโดยใช้ tessellation ฮาร์ดแวร์" (2011) วิทยานิพนธ์. สถาบันเทคโนโลยีโรเชสเตอร์ http://scholarworks.rit.edu/theses/265/ ฉันรู้วิธีการใช้ tesselation เพื่อสร้างจุดจำลอง สิ่งที่ฉันไม่รู้ก็คือวิธีเก็บข้อมูลที่คำนวณไว้ใน framebuffer รูปทรงเรขาคณิตและการประเมินค่า tesselation มีข้อมูลที่จำเป็นสำหรับการคำนวณต่อยอด แต่พวกเขาสามารถเขียนลงใน framebuffer โดยตรงได้หรือไม่ ส่วนที่ฉันรู้สามารถเขียนไปที่ framebuffer แต่ข้อมูลของฉันจะถูกแก้ไขและฉันจะไม่รู้ว่าจะเขียนตำแหน่งใดอีก

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