Моделирование I-секции в библиотеке 3D-графики

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

  •  04-07-2019
  •  | 
  •  

Вопрос

Я использую Direct3D для отображения количества I-секций, используемых в стальной конструкции. Могут быть сотни экземпляров этих I-секций по всей моей сцене.

Я мог бы сделать это двумя способами:

I-Sections

Используя метод A, у меня меньше поверхностей. Однако при включенном отбраковке задних поверхностей поверхности будут видны только с одной стороны. Если отбраковка задней поверхности отключена, то фланцы (горизонтальные пластины) и перемычка (вертикальная плита) могут отображаться в неправильном порядке.

Метод B кажется правильным (и я мог бы сохранить выборку задней поверхности), но в моей модели толщина пластин в I-секции не имеет значения, и я хотел бы избежать создания отдельной треугольной полосы для каждого сторона пластин.

Есть ли лучшее решение? Есть ли способ отключить выборку обратной стороны только для определенных вызовов DrawIndexedPrimitives? Я также хотел бы получить независимый от платформы ответ на этот вопрос, если он есть.

Это было полезно?

Решение

Во-первых, отбор задних поверхностей не имеет никакого отношения к порядку отображения объектов. Кроме этого, я бы пошел к подходу B без особой причины, кроме того, что он, вероятно, будет выглядеть лучше. Также этот объект, вероятно, не более чем рука, полная треугольников; наличие сотен в сцене не должно быть проблемой. Если это так, попробуйте изучить аппаратные экземпляры.

Другие советы

В OpenGL вы можете переключать выборку задней поверхности для каждого нарисованного треугольника:

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

Я думаю, что нечто подобное также возможно в Direct3D

Если ваши I-секции меняются не так часто, загрузите все секции в один большой буфер вершин / индексов и нарисуйте их одним вызовом. Это самый эффективный способ рисовать вещи, и графическая карта будет работать быстро, даже если вы добавите к ней полмиллиона треугольников.

Да, для этого необходимо дублировать данные вершин для всех секций, но именно так D3D9 предназначен для использования.

Я бы выбрал A, поскольку расстояние, с которого вы будете видеть B, было бы пустой тратой вычислительной мощности, чтобы нарисовать все эти вырожденные треугольники.

Кроме того, я бы просто запустил их в z-буфере и позволил бы с этим разобраться.

Если это происходит слишком медленно, я бы начал смотреть на оптимизацию, но даже потребительские видеокарты могут рисовать миллионы полигонов в секунду.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top