Я хочу заполнить мой куб. Я нашел алгоритм отбраковки спины. Можете ли вы объяснить мне, как это работает? У меня есть 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;
Предположительно, вы хотите сделать куб непрозрачным телом.
Это действительно сделано, рисуя лица таким способом, которым вы видите лица ближе к зрителю.
Я предполагаю что
Вы можете прибегнуть к двум методам:
алгоритм художника, то есть рисование всех граней от начала до конца. Вы можете достичь этого, сортируя грани по координате глубины ближайшей вершины каждой грани. Это легко сделать, но немного неэффективно, так как вы нарисуете шесть граней, когда достаточно трех.
отбраковка задней поверхности, то есть игнорирование граней, у которых компонента глубины их вектора нормалей направлен назад. просто немного векторного исчисления.
Других решений пока нет …