{
renderTree ( node -> right, info, back, backCount );
if ( node -> facet -> isFrontFacing
( info.camera -> getPos () ) )
renderPoly ( *info.view, *info.camera, node -> facet, * info.tempPoly, *info. viewFrustrum, *info.post ) ,-
renderTree ( node -> left, info, front, frontCount \;
}
else
{
renderTree ( node -> left, info, front, frontCount );
if ( node -> facet -> isFrontFacing ( info.camera -> getPos () ) ).
renderPoly ( *info.view, *info.camera,
node -> facet, *infо.tempPoly, *infо.viewFrustrum, *info.post );
renderTree ( node -> right, info, back, backCount );
}
}
Как видно из приведенного кода, сначала осуществляется вывод всех непрозрачных объектов (как граней, так и экземпляров класса VisualObject) и строится список всех полупрозрачных объектов VisualObject. После этого осуществляется рекурсивный рендеринг дерева вместе с полупрозрачными объектами. Основное отличие от стандартной процедуры рисования BSP-дерева заключается в том, что на каждом шаге текущий список объектов разбивается на две части, в зависимости от положения каждого объекта по отношению к разбивающей плоскости. Построенные, списки передаются дальше каждому из соответствующих поддеревьев. Если поддерево пусто, то переданные объекты выводятся в произвольном порядке.
Ниже приводится описание класса Billboard для работы с панелями.
class Billboard : public VisualObject {
protected:
Texture * texture; float width, height;
Добавляем эффекты
public:
Biilboard ( const char * theName, const Vector3D& thePos, const Vector4D& theColor, Texture * theTexture, float theWidth, float theHeight );
-Billboard () ,-
float getWidth () const {
return width;
}
float getHeight () const {
return height;
}
Texture * getTexture () const {
return texture;
}
virtual void draw ( Views view, const Cameras
camera, const Frustrums frustrum, Fog * fog );
static MetaClass classlnstance;
};
Обратите внимание, что в данном классе определяется сам метод draw, а не do Draw.