So che a questa domanda potrebbe sembrare un po 'facile rispondere ma mi sta facendo impazzire. Ci sono troppe possibili situazioni che un buon meccanismo di miscelazione alfa dovrebbe gestire, e per ogni algoritmo posso pensare che manchi qualcosa.
Questi sono i metodi che ho pensato finora:
Prima di tutto, però, per quanto riguarda l'ordinamento degli oggetti in base alla profondità, questo semplicemente non riesce perché gli oggetti non sono forme semplici, potrebbero avere curve e potrebbero scorrere l'uno all'interno dell'altro. Quindi non posso sempre dire quale è più vicino alla fotocamera.
Poi ho pensato di ordinare i triangoli, ma anche questo potrebbe fallire, ho pensato che non sono sicuro di come implementarlo, c'è un raro caso che potrebbe nuovamente causare un problema, in cui due triangoli si incrociano. Ancora una volta nessuno può dire quale è più vicino.
La cosa successiva è stata usare il buffer di profondità, almeno il motivo principale per cui abbiamo il buffer di profondità è a causa dei problemi con l'ordinamento che ho citato, ma ora abbiamo un altro problema. Poiché gli oggetti potrebbero essere trasparenti, in un singolo pixel potrebbero essere visibili più oggetti. Quindi per quale oggetto devo memorizzare la profondità dei pixel?
Quindi ho pensato che forse avrei potuto solo memorizzare la profondità dell'oggetto più frontale, e usando quello determinerei come avrei dovuto unire le successive chiamate di disegno a quel pixel. Ma ancora una volta c'era un problema, pensa a due piani semitrasparenti con un piano solido al centro di essi. Stavo per rendere il piano solido alla fine, si può vedere il piano più distante. Nota che avrei unito ogni due piani fino a quando non rimane un solo colore per quel pixel. Ovviamente posso usare anche i metodi di ordinamento per le stesse ragioni che ho spiegato sopra.
Infine, l'unica cosa che immagino di essere in grado di funzionare è rendere tutti gli oggetti in diverse destinazioni di rendering, quindi ordinare quei livelli e visualizzare l'output finale. Ma questa volta non so come posso implementare questo algoritmo.