Frustum Culling con VBO


8

Ho del terreno reso nel mio progetto usando VBO in OpenGL. Vorrei applicare un po 'di Frustum Culling ma non ho idea di come accedere a ciascun poligono come è disegnato per verificare se è in vista. Penso che sia qui che entrano in gioco gli octrees, ma non ho idea di come sia fatto davvero. Qualcuno conosce un buon tutorial su come fare questa cosa specifica o avere qualche pseudocodice per me?

Grazie in anticipo!

Risposte:


3

Maggiori informazioni su come stai memorizzando i dati del terreno sarebbero utili qui. Lo stai conservando in pezzi? Ricostruisci costantemente i VBO? Tutto il terreno è in un VBO e ne stai realizzando pezzi alla volta?

Cercare di abbattere per poligono probabilmente introdurrà più costi di quanti ne risparmi. Più è grande un pezzo di terreno che puoi testare contemporaneamente, più veloce sarà l'abbattimento, con l'evidente compromesso dell'accuratezza. Alla fine, dovrai fare un po 'di profilazione per capire qual è il punto ottimale di quel compromesso, quindi creare un sistema che ti permetta di cambiare in modo dinamico il modo in cui il tuo terreno è rotto sarà molto utile.


1

Una GPU può già abbattere i poligoni su una base per poligono, ma ciò accade al momento della rasterizzazione / impostazione che si verifica dopo ombreggiatura dei vertici (usando gli shader Vertex / Geometry / Hull / Domain). Ciò significa che la GPU può comunque finire con l'ombreggiatura dei vertici poligonali che finiranno per essere eliminati. Se ciò accade, la GPU avrà fatto molto lavoro per niente ed è quindi uno spreco di cicli GPU.

Per questo motivo, cerchiamo di non sprecare i cicli GPU eliminando la geometria invisibile sul lato CPU (o lato GPU utilizzando le funzionalità DX10 + come DrawIndirect e / o rendering predicato) in lotti di poligoni semplicemente non chiamando draw per quei lotti.

Tipicamente quel gruppo di poligoni può essere rappresentato da una sfera o scatola che circonda tutti quei poligoni. Questa sfera / scatola di delimitazione viene quindi testata contro il frustum e se tocca il frustum, il richiamo del sorteggio viene invocato per quei poligoni. In caso contrario, la chiamata di sorteggio viene ignorata. Un octree è semplicemente un altro modo per determinare quali lotti di geometria sono visibili, tranne che organizza tali dati in modo gerarchico. Gli ocre non sono necessariamente adatti a tutta la geometria.

Seguono alcuni riferimenti abbastanza validi che spiegano la tecnica sfera / frustum:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.