ในฐานะที่เป็นที่กล่าวถึงในเอกสารแฟนสามเหลี่ยมไม่ได้รับการสนับสนุนใน Direct3D 10 หรือในภายหลัง
ทำไม? การทำงานกับแฟน ๆ ของสามเหลี่ยมมีข้อเสียหรือไม่
ในฐานะที่เป็นที่กล่าวถึงในเอกสารแฟนสามเหลี่ยมไม่ได้รับการสนับสนุนใน Direct3D 10 หรือในภายหลัง
ทำไม? การทำงานกับแฟน ๆ ของสามเหลี่ยมมีข้อเสียหรือไม่
คำตอบ:
เป็นเวลากว่าทศวรรษที่ผู้จำหน่ายฮาร์ดแวร์ผลักดันแถบสามเหลี่ยมรายการสามเหลี่ยมที่จัดทำดัชนีและแถบสามเหลี่ยมที่จัดทำดัชนีไว้เป็นประเภทดั้งเดิมที่เร็วที่สุดที่จะใช้ ทำไม? Strips มีตำแหน่งแคชที่ดีกว่า (การใช้ verts 2 ตัวสุดท้ายที่ส่งมาแทนที่จะต้องข้ามกลับไปที่ Ver1 แรกอย่างต่อเนื่อง) และการทำดัชนีช่วยให้แคชจุดสุดยอดของฮาร์ดแวร์ใช้งานได้จริงรวมทั้งมีประสิทธิภาพมากขึ้นสำหรับการกำจัด
หากผู้ค้าฮาร์ดแวร์ทุกคนบอกว่า "ทำแบบนี้และคุณจะได้เร็วขึ้น" จากนั้นมีโอกาสที่ค่อนข้างดีถ้าคุณทำอย่างนี้คุณจะเร็วขึ้น
ดังนั้น D3D10 + ก็ทำแบบนี้ หากเป็นเส้นทางที่รวดเร็วนั่นคือเส้นทางที่คุณจะใช้และเส้นทางอื่น ๆ จะไม่มีอยู่จริง สิ่งนี้สอดคล้องกับหนึ่งในปรัชญาการออกแบบของ D3D10 + ซึ่งจะนำคุณไปสู่เส้นทางที่รวดเร็วและทำให้คุณอยู่ที่นั่น
ฉันไม่ทราบว่าสิ่งนี้มีผลกระทบต่อการพัฒนาอย่างแท้จริง แต่เช่นเดียวกับการเปลี่ยนแปลงดังกล่าวมีคนบอกว่าพวกเขาจะให้นักพัฒนาโปรแกรมควบคุมเขียนไดรเวอร์ที่ดีขึ้น ความซับซ้อนของไดรเวอร์ GPU นั้นน่าทึ่ง แต่ฉันไม่แน่ใจว่าการเปลี่ยนแปลงที่แน่นอนนี้จะช่วยได้มากเพียงใด
ไม่ว่าในกรณีใดก็เป็นไปได้ที่จะแทนที่พัดลมสามเหลี่ยมสำหรับความต้องการส่วนใหญ่ของคุณ (เช่นการสร้างรูปหลายเหลี่ยมนูน) ด้วยแถบซึ่งมักจะให้ผลลัพธ์ที่ดีกว่า
// A simplified API interface is presented for the purposes of having readable pseudocode
// Push( pos ) - pushes position data to make a new vertex
// TRIANGLE FANS:
for( i = 0; i < vertices.count; ++i )
Push( vertices[ i ] );
// TRIANGLE STRIPS:
for( i = 0; i < vertices.count; ++i )
{
if( i % 2 == 0 )
vertex = i / 2;
else
vertex = vertices.count - 1 - i / 2;
Push( vertices[ vertex ] );
}
แก้ไข: ลืมพูดถึง - หากคุณต้องการเปลี่ยนลำดับการไขลาน - เพียงแค่ย้อนกลับการทดสอบใน "if" (== ถึง! =)
(คำถามนี้รับประกันความเห็น :)
ผมคิดว่ามันเป็นดาราศาสตร์เชิงสถาปัตยกรรม OpenGLES ยังโยนสิ่งต่างๆมากมายเพื่อทำให้มัน 'ซับซ้อนน้อยลง' ในขณะที่เพียงแค่เพิ่มความซับซ้อนให้กับนักพัฒนาทุกคนด้วยรหัสดั้งเดิมแทน
แน่นอนว่าแม้ว่าฮาร์ดแวร์จะไม่รองรับก็ตามมันก็ไม่สำคัญที่จะให้ความเข้ากันได้กับผู้คนในการเรียงลำดับของแฟนสามเหลี่ยมโดยการแปลงเป็นแถบหรือสามเหลี่ยม
WebGL ทำงานเป็นเวลาและต้องติดตามบัฟเฟอร์ที่ตรวจสอบแล้วตลอดเวลาและไดรเวอร์สามารถจัดการคนที่ส่งแฟน ๆได้อย่างง่ายดายแม้ว่าพวกเขาจะไม่สนับสนุนก็ตาม
ดังนั้นการขว้างปาออกจาก FFP ทั้งหมดและเป็นเพียงIMO ที่น่ารำคาญ