Ao ler algumas coisas sobre como os aplicativos em tempo real lidam com cores no OpneGL, notei que alguns exemplos implementavam Color como uma coleção de 4 floats
, enquanto outros usavam 4 doubles
. Eu já vi alguns exemplos de compactação de vértices no campo de desenvolvimento de jogos que defendiam salvar cores como 4 short
.
Tudo isso me deixou ansioso por aprender mais sobre isso: qual é a precisão limite que o OpenGl (ou hardwares) manipula para cores? Mais importante, porém, quais são os limites de precisão acima dos quais as diferenças de cores se tornam impossíveis de observar?
Tenho a impressão de que aprender com mais cuidado sobre isso me ajudaria a pensar e decidir melhor como implementar uma classe Color para diferentes aplicativos e cenários (por exemplo, fazer escolhas de troca entre memória, velocidade e variedade de cores).
Obrigado por suas idéias sobre isso.
fonte
half
não teria os mesmos problemas que você mencionou antes, devido à falta de precisão? Eu pensei que isso seria particularmente importante na GPU, devido aos muitos cálculos de cores que são freqüentemente feitos em shadershalf
tem 16 bits, incluindo 11 bits efetivos de precisão de mantissa, portanto, embora não seja tão preciso quanto possívelfloat
, ainda é suficiente para a maioria das operações de cores. (Talvez não completamente ; suficiente se você estiver saída para um display de alta gama HDR eu não tenho certeza.)