Заполнение куба (алгоритм отбраковки лицевой стороны)?

Я хочу заполнить мой куб. Я нашел алгоритм отбраковки спины. Можете ли вы объяснить мне, как это работает? У меня есть 8 точек в векторе:

ПРОВЕРЬТЕ ЗДЕСЬ

Может быть, вы знаете другой более простой алгоритм или объясните мне, что я должен делать с отбором задних граней?

(wallX[0] — точка 0; wallX[1] — точка 1; wallX[2] — пункт 2 с картинки)

Код для кулачной стены:

x1[0]=wallX[1]-wallX[0];
y1[0]=wallY[1]-wallY[0];
z1[0]=wallZ[1]-wallZ[0];

x2[0]=wallX[2]-wallX[0];
y2[0]=wallY[2]-wallY[0];
z2[0]=wallZ[2]-wallZ[0];

x3[0]=0;
y3[0]=0;
z3[0]=1000;

wall1={y2[0]*z1[0]-z2[0]*y1[0], z2[0]*x1[0]-x2[0]*z1[0], x2[0]*y1[0]-y2[0]*x1[0]};
wall1*={X3, Y3, Z3};
if(wall1[2]>0) cout<<"wall is watching"<<endl;

-5

Решение

Предположительно, вы хотите сделать куб непрозрачным телом.

Это действительно сделано, рисуя лица таким способом, которым вы видите лица ближе к зрителю.

Я предполагаю что

  • у вас есть алгоритм рисования полигонов,
  • Вы можете рассчитать цвет / затенение для каждого лица.

Вы можете прибегнуть к двум методам:

  • алгоритм художника, то есть рисование всех граней от начала до конца. Вы можете достичь этого, сортируя грани по координате глубины ближайшей вершины каждой грани. Это легко сделать, но немного неэффективно, так как вы нарисуете шесть граней, когда достаточно трех.

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector