Pergunta

Eu estou usando Direct3D para exibir uma série de secções em I utilizados na construção em aço. Poderia haver centenas de instâncias desses I-seções em toda a minha cena.

Eu poderia fazer isso de duas maneiras:

I-Seções

Usando o método A, que tem menor número de superfícies. No entanto, com a face traseira abate ligado, as superfícies serão visíveis a partir de apenas um lado. Se abate backface é desligada, em seguida, as flanges (placas horizontais) e web (placa vertical) pode ser processado na ordem errada.

Método B parece correto (e podia manter backface abate ligado), mas no meu modelo da espessura de placas na secção I não tem qualquer importância e gostaria de evitar ter de criar uma tira triângulo separado para cada lado das placas.

Existe uma solução melhor? Existe uma maneira de desligar backface abate apenas para determinadas chamadas de DrawIndexedPrimitives? Eu também como uma resposta de plataforma neutra para isso, se houver um.

Foi útil?

Solução

Primeiro, backface abate não tem nada a ver com a ordem em que os objetos são prestados. Fora isso, eu iria para abordagem B por nenhuma razão em particular que não seja aquele que provavelmente vai olhar melhor. Além disso, este objeto, provavelmente, não é mais que uma mão cheia de triângulos; ter centenas em uma cena não deve ser um problema. Se for, tente olhar para instancing hardware.

Outras dicas

Em OpenGL você pode alternar de abate backface para cada triângulo que você desenhar:

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

Eu acho que algo semelhante também é possível em Direct3D

Se o seu i-seções não mudam frequentemente, carregue todas as seções em um grande buffer de vértices / index e atraí-los com uma única chamada. Essa é a maneira mais perfeita para desenhar as coisas, e a placa gráfica vai fazer um trabalho rápido, mesmo se você empurrar meio milhão de triângulo para ele.

Sim, isso requer que você duplicar os dados de vértice para todas as seções, mas é assim que D3D9 se destina a ser utilizado.

Eu iria com A como a distância que você estaria vendo o B a partir seria uma perda de poder de processamento para desenhar todos os triângulos degenerados.

Também gostaria de simplesmente demiti-los em um z-buffer e permitir que resolver tudo isso.

Se ele ficar muito lenta, então eu iria começar a olhar para a otimização, mas os gráficos mesmo consumo cartões podem atrair milhões de polígonos por segundo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top