2013-11-27 4 views
0

Как DirectX определяет порядок полигональной намотки? Мне особенно интересно узнать, как отбрасывать заднюю поверхность. Исследуя это, я видел, что он предположил, что DX вычисляет поверхностную нормаль и принимает точечный продукт этого и вектор камеры и отбирает, если это> 0.Как DirectX определяет порядок намотки?

Во-первых, это тот метод, который использует DirectX? Во-вторых, если это так, учитывая, что на каждой поверхности есть две нормали - одна противоположная другой - как DirectX знает, что нормально использовать?

ответ

4

Нет, это не используемая техника, ни opengl, ни directx не имеют концепции векторного вида камеры. Что происходит, так это то, что вершины преобразуются в пространство координат с координатами нормализованного устройства (сначала позволяя пользователю преобразовать постпроективное пространство в вершинном шейдере и затем делить компоненты xyz на w). В этой системе координат мы можем использовать х и у-компоненты вершин для вычисления «подписанной области» треугольника.

float signedArea = 0; 
    for(int k = 1; k < output->count; k++) { 
     signedArea += (output->vertices[k - 1].values[0] * output->vertices[k - 0].values[1]); 
     signedArea -= (output->vertices[k - 0].values[0] * output->vertices[k - 1].values[1]); 
    } 

В зависимости от того, вершины вычисляются по часовой стрелке или против часовой стрелки они дают положительную или отрицательную область. Просмотр треугольника сзади, сделает отрицательную отрицательную область и наоборот. И это значение впоследствии используется для определения того, следует ли растеризовать передние, задние или оба шрифта - & обратные треугольники.

Смежные вопросы