Dato mappa normale nello spazio mondo che cosa è un algoritmo adatto per trovare i bordi?

StackOverflow https://stackoverflow.com/questions/1467177

  •  13-09-2019
  •  | 
  •  

Domanda

Se ho le normali ai vertici di una scena normale che mostra come i colori in una texture nello spazio mondo c'è un modo per calcolare i bordi in modo efficiente o è matematicamente impossibile? So che è possibile calcolare bordi se si dispone delle normali nello spazio vista ma non sono sicuro se è possibile farlo se si hanno le normali nello spazio mondo (ho cercato di capire un modo per il passato ora ..)

Sto usando DirectX con HLSL.

È stato utile?

Soluzione

Presumo che si sta tentando di fare bordi di stile del fumetto per uno shader cellulare?

Se è così, è sufficiente fare un prodotto scalare dello spazio mondo normale con la posizione del pixel posizione della telecamera meno spazio mondo. Fino a quando i tuoi operandi sono tutti nello stesso spazio si dovrebbe essere ok.

float edgy = dot(world_space_normal, pixel_world_pos - camera_world_pos);

Se edgy è vicina 0, è un vantaggio.

Se si desidera un bordo di dimensioni spazio sullo schermo è necessario per rendere ulteriori informazioni ID oggetto su un altro processo di superficie e post le differenze rispetto alla superficie di colore.

Altri suggerimenti

if ( normalA dot normalB > cos( maxAngleDiff ) 

, allora si ha un vantaggio. Non sarà perfetto, ma sarà sicuramente trovare bordi che altri metodi non sarà.

o sono io equivoco il problema?

Modifica:? Che ne dici, semplicemente, passa-alto filtrare l'immagine

Dipenderà da quanti colori l'immagine contiene, e il modo in cui si fondono: spigoli vivi, dithering, mescolato, ...
Dal momento che si dice di avere le normali ai vertici Io parto dal presupposto che è possibile accedere il colore-informazione su un unico piano.
Ho usato due tecniche con risultati più o meno:

  1. Ho cercato l'immagine per le aree locali dello stesso colore (RGB) e quindi utilizzato il più alto di R, G o B per trovare il 'bordo' - è qui che il R selezionato, G o B non è più la più alta è valore;
  2. Il secondo metodo che ho usato è quello di ridurre l'immagine a 16 colori internamente, ed è facile da trovare i contorni in questo caso.

Per costruire vettori dipenderebbe da quanto bene si desidera che la granularità del vostro 'wireframe'-immagine di essere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top