Mas, como é possível detectar colisões em formas feitas de pequenos triângulos?
Por não fazer isso.
A detecção de colisão contra uma coleção arbitrária de triângulos (ou pior, entre duas coleções de triângulos arbitrários) é proibitivamente cara.
Em vez disso, normalmente executamos a detecção de coleções de maneira hierárquica, começando primeiro com formas simples extremamente brutas (como caixas ou esferas) que aproximam (mal) o objeto subjacente.
Isso nos permite rejeitar rapidamente a maioria das colisões em potencial como "não ocorrendo", como é o caso usual. No caso em que uma verificação grosseira passa, isso indica uma possível colisão real, e procedemos à verificação em uma aproximação mais detalhada da forma subjacente (como uma feita de várias formas de cápsulas bem ajustadas ou muitas caixas delimitadoras alinhadas).
Essencialmente, a detecção de colisão começa com testes brutos e, à medida que esses testes passam, continua a ter uma representação cada vez mais detalhada. Esta imagem, fornecida por Shiro em um comentário à resposta de Alexandre , ilustra como um modelo complexo (um humano) pode ser representado por uma série de formas mais simples:
Raramente precisamos realmente executar colisão no nível do triângulo individual e, quando o fazemos, geralmente usamos os métodos mais brutos para detalhar um conjunto muito pequeno de triângulos em potencial para testar. Nesse ponto, algoritmos específicos são usados para executar os testes, assim como você testaria se dois retângulos se sobrepusessem. Por exemplo, você pode determinar se e onde um raio atinge um triângulo .