คอมพิวเตอร์กราฟฟิค

ถาม - ตอบสำหรับนักวิจัยคอมพิวเตอร์กราฟิกและโปรแกรมเมอร์

2
วิธีที่มีประสิทธิภาพที่สุดในการจัดระเบียบข้อมูลจุดสุดยอดของ GPU สมัยใหม่
บอกว่าผมมีรูปแบบที่สร้างขึ้นจากจุดแต่ละคนมีposition, normal, tangentและtexcoordแอตทริบิวต์ที่สามเหลี่ยมถูกกำหนดโดยดัชนีอเนกประสงค์ หากเราเพียง แต่มุ่งเน้นไปที่คุณลักษณะจุดสุดยอดฉันรู้ว่ากลยุทธ์สองอย่างกว้าง ๆ : โครงสร้างของอาร์เรย์และอาร์เรย์ของโครงสร้าง ฉันเคยได้ยินเช่นกันว่าอาเรย์ของโครงสร้างเป็นที่ต้องการเพราะมันจะเพิ่มตำแหน่งหน่วยความจำ (และเพื่อให้ตำแหน่งแคช) ของคุณลักษณะสำหรับจุดสุดยอดที่กำหนด เป็นกรณีที่ปรับปรุงประสิทธิภาพได้จริงหรือไม่ วิธีหลักที่ฉันคิดว่าสิ่งนี้จะเกิดขึ้นได้โดยดัชนีจุดสุดยอดที่ต้องการให้ rasterizer ได้รับข้อมูลจุดสุดยอดที่มีความยาวตั้งแต่ถูกไล่ออกจากแคช หากการเข้าถึงข้อมูลจุดสุดยอดเป็นแบบสุ่มการเก็บแอตทริบิวต์ทั้งหมดสำหรับจุดสุดยอดในบรรทัดแคชเดียวกันจะทำให้สิ่งต่าง ๆ เร็วขึ้น แต่นี่ไม่ใช่ปัญหาที่สามารถลดลงได้ส่วนใหญ่โดยการปรับลำดับของข้อมูลจำเพาะสามเหลี่ยมให้เหมาะสมหรือไม่ นอกจากนี้ฉันเข้าใจว่า GPU สมัยใหม่อาจดีกว่าในการแกะเวกเตอร์ที่มีความยาวชนิดเดียวกันออกได้ดีกว่าเวกเตอร์ของโครงสร้างหลายประเภท มันจะเป็นไปได้หรือไม่สำหรับโครงร่างแบบโครงสร้างของอาร์เรย์เพื่อให้มีประสิทธิภาพเหนือกว่าโครงร่างอาร์เรย์ของโครงสร้างของข้อมูลจุดสุดยอดเดียวกันหากคำสั่งดัชนีถูกปรับให้เหมาะสม

1
เชื่อมโยงระหว่างการสุ่มตัวอย่างสัญญาณรบกวนสีน้ำเงินและการรบกวนพื้นผิวสีน้ำเงินหรือไม่
คุณสามารถมีการสุ่มตัวอย่างสัญญาณรบกวนสีฟ้าเช่นแผ่นดิสก์ปัวซองเหล่านี้: และคุณสามารถมีพื้นผิวของเสียงรบกวนสีฟ้าเช่นนี้: ฉันได้ภาพนั้นในภาพแรกมีหนึ่งอินพุต (ดัชนีตัวอย่าง) และเอาต์พุตสองจุด (พิกัด x, y ของจุด) และภาพที่สองนั้นกลับด้านโดยมีสองอินพุต (x พิกัด y ของตัวอย่าง) และหนึ่งเอาต์พุต (ค่าของจุด) ฉันสงสัยว่าสิ่งเหล่านี้เกี่ยวข้องกันอย่างไร หากคุณใช้ DFT ของภาพที่สองคุณจะเห็นว่ามันมีส่วนประกอบความถี่สูงมากกว่าต่ำ แต่ฉันไม่แน่ใจว่าคุณจะใช้ DFT ของจุดข้อมูลชุดแรกได้อย่างไร ฉันสงสัยว่าเป็นไปได้ไหมที่จะใช้ลำดับความคลาดเคลื่อนต่ำอื่น ๆ (เช่น halton หรือ jittered grid) และสร้างพื้นผิวจากแนวคิดเช่นภาพที่สอง?
9 sampling 

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

3
เป็นวิธีที่เหมาะสมในการหนีบเสียงรบกวน dither คืออะไร?
เมื่อลดความลึกของสีและ dithering ด้วยเสียง 2 บิต (โดยมี n =] 0.5,1.5 [และเอาท์พุท = พื้น (อินพุต * (2 ^ บิต -1) + n)) จุดสิ้นสุดของช่วงค่า (อินพุต 0.0 และ 1.0 ) มีเสียงดัง มันจะเป็นที่พึงปรารถนาที่จะให้พวกเขาเป็นสีทึบ ตัวอย่าง: https://www.shadertoy.com/view/llsfz4 (ด้านบนเป็นสกรีนช็อตของ shadertoy ซึ่งเป็นภาพการไล่ระดับสีและปลายทั้งสองซึ่งควรเป็นสีขาวและดำตามลำดับ แต่มีเสียงดังแทน) แน่นอนว่าปัญหาสามารถแก้ไขได้โดยเพียงแค่บีบอัดช่วงของค่าเพื่อให้จุดสิ้นสุดได้รับการปัดเศษเป็นค่าเดียวเสมอ แม้ว่าจะรู้สึกแฮ็คเล็กน้อยและฉันสงสัยว่าจะมีวิธีการใช้ "ถูกต้อง" นี้หรือไม่?

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

4
ทำไมไม่ควรแก้ไขแกมม่า Bump, Normal และ Displacement?
ดังนั้นฉันจึงพยายามปิดหัวของฉันลงไปจากมุมมองทางเทคนิคอย่างเป็นธรรม เมื่อคุณเพิ่มแผนที่ Bump หรือ Normal หรือ Displacement ใน shader ของคุณพวกเขาไม่ควรแก้ไขแกมม่า แต่ควรกระจายพื้นผิว แต่ทำไม เมื่อคุณบันทึกไฟล์ใน 8 บิต (หรือ 16 บิต Integer) ด้วยรูปแบบเช่น JPEG, PNG หรือ TIFF พวกเขาจะได้รังสีแกมม่า 0.4545 (1 / 2.2) ที่ถูกเผาไหม้ดังนั้นกล้องจึงจับแสงจากโลกแห่งความเป็นจริง (นั่นคือเป็นเส้นตรง) และเมื่อบันทึกภาพเป็น JPEG จะเพิ่มค่าแกมม่า 1 / 2.2 เป็นวิธีการบีบอัดข้อมูลลงใน 8 บิตจากนั้นเมื่อคุณดูภาพบนจอภาพที่เพิ่มแกมม่า 2.2 ทำให้ความสว่างเป็นเส้นตรงอีกครั้ง ดังนั้นเมื่อใช้พื้นผิวแบบกระจาย (เช่นภาพถ่าย) คุณจำเป็นต้อง "ลบ" ที่ 1 / 2.2 …
9 gamma 

1
การปรับแสงเงาเพื่อให้ดูดีขึ้น
ฉันมีเกมที่เล่นง่ายและหัวเรื่องก็คือเส้นเล็ก ๆ เหล่านี้ มันมีเป้าหมายสำหรับ iOS และ Android ดังนั้นจึงมีโปรเซสเซอร์หลากหลายประเภทที่สามารถทำงานได้ในตอนนี้ ฉันกำลังพยายามเพิ่มแสงแบบเรียลไทม์ให้กับพวกเขาด้วยเหตุผลสองประการ ฉันพยายามซ่อนความจริงที่ว่าฉันไม่มีเวลาในการเรนเดอร์เพื่อประมวลผล anti-aliasing บนอุปกรณ์ส่วนใหญ่ เรื่องของเกมนั้นควรจะเป็นแสงที่บริสุทธิ์, ดังนั้นรูปที่ควรมีลักษณะเหมือนสิ่งเหล่านั้นเป็นแสงที่บริสุทธิ์ ฉันได้ปรับแต่ง sha blur ที่แยกกันไม่ออกนานแล้วและฉันก็มาถึงจุดที่หงุดหงิดฉันไม่สามารถทำให้มันถูกต้องได้บางทีปัญหาคือฉันพยายามซ่อนขอบขรุขระของแสงอย่างไร้ขอบเขต ในขณะเดียวกันก็ไม่ทำให้แสงเบลอ ปัญหาที่ใหญ่ที่สุดของฉันคือตัวแปรทั้งหมดที่เกี่ยวข้องในการทำให้มันดูดีที่สุด ฉันยังใหม่กับกราฟิก / การเรนเดอร์และฉันก็ไม่ได้เป็นศิลปิน บางทีสิ่งที่น่าผิดหวังที่สุดเกี่ยวกับการส่งเสียงถึงฉันก็คือตัวแปรทั้งหมดที่ดูเหมือนจะเกี่ยวข้อง ด้วยแสงที่ฉันได้เห็นการเปลี่ยนแปลงที่เป็นไปได้มากมาย A. เพิ่มโหมดการผสมผสานโหมดการผสมผสานหน้าจอหรือการผสมอื่น ๆ B. น้ำหนักเบลอและปกติแตกต่างกันก่อนที่จะรวมกัน C. ซิกม่าของฟังก์ชั่นกระดิ่งเกาส์ (ฉันใช้ เครื่องคิดเลขที่สับสนนี้แต่ดูเหมือนจะไม่ได้ให้คุณค่าเดียวกับที่ฉันเห็นคนอื่นมีอยู่) D. Scalars สำหรับค่า "x" ที่ส่งไปยังฟังก์ชัน sigma E. ตัวอย่างขนาด (ทำให้รัศมีการเบลอน้อยกว่าหรือใหญ่กว่า) F. การเปลี่ยนความละเอียดของบัฟเฟอร์เรืองแสง วิธีการหาค่าคงที่ "ดูดีที่สุด" เมื่อทำงานกับตัวแปรมากมายเช่นนี้? ฉันยังมีปัญหาเพราะเวลาที่ฉันทำการปรับแต่งและการเห็นมันเป็นเวลานานที่มันยากที่จะเห็นการเปลี่ยนแปลงฉันจะทำมันในของเล่น shader …

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
การกระเจิงของปริมาตร Monte-Carlo แบบเต็ม
ฉันต้องการเพิ่มการกระจัดกระจายปริมาตร monte-carlo อย่างเต็มรูปแบบเพื่อติดตามเส้นทางของฉัน แต่ฉันมีเวลายากวิจัยวิธีการทำ ให้ฉันอธิบายสิ่งที่ฉันต้องการจะทำ: รังสีเข้าสู่วัสดุและเราใช้ BTDF จากนั้นหลังจากระยะทางหนึ่งเหตุการณ์การกระเจิงของปริมาตรเกิดขึ้นหลังจากนั้น (ในกรณี isotropic) รังสีจะกระจายไปในทิศทางใดก็ได้ใน รูปทรงกลม การทำซ้ำนี้จนกว่ารังสีจะออกจากวัสดุด้วย BTDF อื่น คำถามของฉันมีดังนี้: ฉันจะเลือกระยะห่างระหว่างเหตุการณ์กระจายได้อย่างไร สัญชาตญาณบอกฉันว่าควรจะมีการกระเจิงแบบ pdf ซึ่งให้โอกาสในการกระจายหลังจากระยะทางที่แน่นอน? สิ่งนี้จะถูกต้องหรือไม่ pdf จะเป็นฟังก์ชันเชิงเส้นสำหรับวัสดุ isotropic หรือไม่ ฟังก์ชั่นนี้มีชื่อหรืออะไรที่ฉันสามารถใช้กับ Google Beer-Lambert จะยังคงใช้งานระหว่างเหตุการณ์กระจายหรือไม่ ฉันจะไม่คิด เนื่องจาก Beer-Lambert เป็นการทำให้การคำนวณกระจัดกระจายง่ายขึ้น จากนั้นอีกครั้งบางทีเบียร์ - แลมเบิร์ตเป็นการคำนวณในระดับไมโครและการติดตามเส้นทางอยู่ในระดับมหภาค ปริมาตรที่เทียบเท่ากับ BSDF คืออะไร? ดูเหมือนว่าฉันสามารถใช้ฟังก์ชันเฟสเช่น Henyey-Greenstein เพื่อกำหนดทิศทางใหม่ แต่ฉันจะใช้เพื่อลดทอนอะไรบ้าง สุดท้ายวลี Google ดีกว่าสำหรับการกระเจิงเชิงปริมาตร Monte-Carlo คืออะไร? การค้นหาการกระจัดกระจายตามปริมาตรหรือ SSS …

1
รูปแบบที่ถูกต้องของคำศัพท์เรขาคณิต GGX
ฉันกำลังพยายามนำ BRDF ของ microfacet ไปใช้ใน raytracer ของฉัน แต่ฉันพบปัญหาบางอย่าง เอกสารและบทความจำนวนมากที่ฉันได้อ่านให้นิยามคำเรขาคณิตบางส่วนเป็นฟังก์ชันของมุมมองและเวกเตอร์ครึ่งหนึ่ง: G1 (v, h) อย่างไรก็ตามเมื่อใช้งานนี้ฉันได้รับผลลัพธ์ดังต่อไปนี้: (แถวล่างเป็นฉนวนความหยาบ 1.0 - 0.0, แถวบนสุดเป็นโลหะที่มีความหยาบ 1.0 - 0.0) มีไฮไลท์แปลก ๆ อยู่รอบ ๆ ขอบและตัดรอบ ๆ nl == 0 ฉันไม่สามารถเข้าใจได้ว่ามันมาจากไหน ฉันใช้ Unity เป็นข้อมูลอ้างอิงในการตรวจสอบการแสดงผลของฉันดังนั้นฉันจึงตรวจสอบแหล่งที่มาของ shader เพื่อดูว่าพวกเขาใช้อะไรและจากสิ่งที่ฉันสามารถบอกได้ว่าเทอมเรขาคณิตของพวกเขานั้นไม่ได้ถูกพาราเมท ดังนั้นฉันจึงลองใช้รหัสเดียวกัน แต่ใช้กับพื้นผิวมาโครปกติแทนที่จะเป็นครึ่งเวคเตอร์และได้ผลลัพธ์ดังนี้ สำหรับดวงตาที่ไม่ผ่านการฝึกฝนของฉันสิ่งนี้ดูเหมือนจะใกล้เคียงกับผลลัพธ์ที่ต้องการ แต่ฉันมีความรู้สึกว่ามันไม่ถูกต้อง? บทความที่ฉันอ่านส่วนใหญ่ใช้เวกเตอร์ครึ่งตัว แต่ไม่ใช่ทั้งหมด มีเหตุผลสำหรับความแตกต่างนี้หรือไม่? ฉันใช้รหัสต่อไปนี้เป็นคำเรขาคณิตของฉัน: float RayTracer::GeometryGGX(const Vector3& v, const Vector3& …

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

3
การสั่งซื้อชุดของจุดที่ไม่มีการรวบรวมกันตามแนวโค้ง
ฉันมีชุดของคะแนน 3 มิติ (ซึ่งฉันกู้คืนจากห้องสมุดที่ดำเนินการ tessellation ของร่างกายที่เป็นของแข็ง) ที่เป็นของเส้นโค้ง (เช่นขอบของของแข็ง) นั่นหมายความว่าเส้นโค้งผ่านแต่ละจุดเหล่านี้อย่างแน่นอน อย่างไรก็ตามชุดจุดไม่ได้เรียงลำดับดังนั้นฉันจำเป็นต้องเรียงลำดับเพื่อให้สามารถวาดเส้นโค้งนี้ได้อย่างถูกต้อง มีวิธีใดที่ทราบสำหรับปัญหาประเภทนี้หรือไม่ ข้อมูลเพิ่มเติมบางส่วน: เส้นโค้งเป็นพารามิเตอร์ทั่วไป (เส้นโค้ง / bezier ชิ้นวงกลม .. ) คะแนนจะได้รับเป็นพิกัดจุดลอย คะแนนอัดแน่นมาก (แต่พวกมันอาจหนาแน่นได้ตามที่ฉันต้องการ) เพื่อให้ความคิดแก่คุณสำหรับเส้นโค้งที่มี 19 หน่วยใน x, 10 หน่วยใน x และ 5 หน่วยใน z ผมพูดลำดับของจุดในส่วนของเส้นโค้ง: (20.7622, ​​25.8676, 0) (20.6573, 25.856, 0) (20.5529, 25.8444, 0) (20.4489, 25.8329, 0) (20.3454, 25.8213, 0)
9 geometry  mesh  curve 

1
แมปเท็กซ์เจอร์ลงบนสามเหลี่ยมซึ่งเกินความจริง
ฉันติดอยู่กับวิธีการนี้ในขณะที่ดังนั้นข้อเสนอแนะใด ๆ จะได้รับการชื่นชมอย่างสุดซึ้ง! ฉันต้องการแมปเท็กซ์เจอร์ในรูปของสามเหลี่ยมยูคลิดล่างขวากับสามเหลี่ยมไฮเพอร์โบลิกบนดิสก์ Poincare นี่คือพื้นผิว (สามเหลี่ยมด้านซ้ายบนของพื้นผิวโปร่งใสและไม่ได้ใช้) คุณอาจจำได้ว่าสิ่งนี้เป็นส่วนหนึ่งของ Circle Limit I ของ Escher ขออภัยเห็นความคิดเห็นที่ฉันไม่ได้รับอนุญาตให้โพสต์มากกว่าสองลิงค์ดูเหมือน! และนี่คือสิ่งที่รูปหลายเหลี่ยมของฉันดูเหมือน (อยู่กึ่งกลางที่จุดกำเนิดซึ่งหมายความว่าขอบสองเส้นเป็นเส้นตรงอย่างไรก็ตามโดยทั่วไปขอบทั้งสามจะเป็นส่วนโค้งแบบวงกลม): จุดกึ่งกลางของรูปหลายเหลี่ยมคือ incentre ของสามเหลี่ยม euclidean ที่เกิดจากจุดยอดของมันและฉันกำลังทำแผนที่ UV พื้นผิวโดยใช้ incentre โดยแบ่งออกเป็นจำนวนใบหน้าเท่ากันกับรูปหลายเหลี่ยมที่มีและทำแผนที่แต่ละหน้าบนใบหน้ารูปหลายเหลี่ยมที่เกี่ยวข้อง อย่างไรก็ตามผลลัพธ์จะเป็นดังนี้: หากใครคิดว่าสิ่งนี้สามารถแก้ไขได้โดยใช้การทำแผนที่ UV ฉันยินดีที่จะให้รหัสตัวอย่าง แต่ฉันเริ่มคิดว่าอาจเป็นไปไม่ได้และฉันจะต้องเขียนฟังก์ชั่นการทำแผนที่ของตัวเอง แก้ไขแล้วด้วยการปรับแต่งบางส่วนของคำตอบของ @ Nathan ด้านล่างเนื่องจากบรรทัด AB, AC, BC อาจไม่ใช่เส้นโค้งจริงๆ วิธีการ: เลือกด้านที่ยาวที่สุดพูด BC แล้วแบ่งส่วนนี้เป็นจำนวนคู่ แบ่งอีกสองด้านออกเป็นจำนวนชิ้นส่วนเท่ากัน จากนั้นเส้นที่เชื่อมต่อ (DE ในคำตอบด้านล่าง) จะต้องเป็นเส้นโค้งไม่ใช่เส้นตรง แบ่งส่วนโค้งใหม่เหล่านี้ตามที่ต้องการเพิ่มรูปสามเหลี่ยมใหม่เป็นใบหน้าแล้ว UV แผนที่สามเหลี่ยมด้านล่างขวาของพื้นผิวให้กับใบหน้าใหม่เหล่านี้ …

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.