mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
131 lines
4.7 KiB
C++
131 lines
4.7 KiB
C++
// Filename: builderProperties.h
|
|
// Created by: drose (17Sep97)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
|
|
//
|
|
// All use of this software is subject to the terms of the Panda 3d
|
|
// Software license. You should have received a copy of this license
|
|
// along with this source code; you will also find a current copy of
|
|
// the license at http://www.panda3d.org/license.txt .
|
|
//
|
|
// To contact the maintainers of this program write to
|
|
// panda3d@yahoogroups.com .
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
#ifndef BUILDERPROPERTIES_H
|
|
#define BUILDERPROPERTIES_H
|
|
|
|
#include "pandabase.h"
|
|
|
|
#include "builderTypes.h"
|
|
|
|
#ifndef HAVE_IOSTREAM
|
|
// We assume if your C++ library defines <iostream.h>, then it also
|
|
// defines <stl_config.h>.
|
|
#include <stl_config.h>
|
|
#endif
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Class : BuilderProperties
|
|
// Description : A class which defines several parameters used to
|
|
// control specific behavior of the builder and mesher.
|
|
// BuilderBucket inherits from this class, so each of
|
|
// these properties may be set directly on a
|
|
// BuilderBucket to control the geometry made with just
|
|
// that bucket. There may in this way be several
|
|
// different sets of properties in effect at a given
|
|
// time.
|
|
//
|
|
// The initial values for these are set in the private
|
|
// constructor to BuilderBucket, at the bottom of
|
|
// builderBucket.cxx.
|
|
////////////////////////////////////////////////////////////////////
|
|
class EXPCL_PANDAEGG BuilderProperties {
|
|
public:
|
|
bool operator < (const BuilderProperties &other) const;
|
|
void output(ostream &out) const;
|
|
|
|
// If this is true, the mesher will be invoked to break up large
|
|
// polygons and build triangles into tristrips wherever possible.
|
|
bool _mesh;
|
|
|
|
// If this is true, a pair of adjacent coplanar triangles that form
|
|
// a quad may be replaced with a pair of triangles forming the same
|
|
// quad but with the opposite diagonal, if this will help the
|
|
// building of tristrips.
|
|
bool _retesselate_coplanar;
|
|
|
|
// If this is true, a coplanar fan may be treated as a single large
|
|
// polygon, and then subdivided into a single tristrip, instead of
|
|
// treating it as a fan. This can sometimes help form longer
|
|
// continuous tristrips.
|
|
bool _unroll_fans;
|
|
|
|
// The following three flags serve to illustrate the mesher's
|
|
// effectiveness by coloring geometry.
|
|
|
|
// This colors each created triangle strip with a random color. The
|
|
// first triangle of each strip is a little darker than the rest of
|
|
// the strip.
|
|
bool _show_tstrips;
|
|
|
|
// This colors each rectangular group of quads--called a quadsheet
|
|
// by the mesher--with a random color. The mesher always creates
|
|
// linear tristrips across whatever quadsheets it can identify.
|
|
bool _show_qsheets;
|
|
|
|
// This colors quads blue, and doesn't mesh them further. Since a
|
|
// large part of the mesher's algorithm is reassembling adjacent
|
|
// triangles into quads, it's sometimes helpful to see where it
|
|
// thinks the best quads lie.
|
|
bool _show_quads;
|
|
|
|
// This shows normals created by creating little colored line
|
|
// segments to represent each normal.
|
|
bool _show_normals;
|
|
double _normal_scale;
|
|
BuilderC _normal_color;
|
|
|
|
// If this is true, large polygons will be subdivided into
|
|
// triangles. Otherwise, they will remain large polygons.
|
|
bool _subdivide_polys;
|
|
|
|
// This is the flatness tolerance below which two polygons will be
|
|
// considered coplanar. Making it larger makes it easier for the
|
|
// mesher to reverse triangle diagonals to achieve a good mesh, at
|
|
// the expense of precision of the surface.
|
|
double _coplanar_threshold;
|
|
|
|
// True if fans are to be considered at all. Sometimes making fans
|
|
// is more trouble than they're worth, since they tend to get in the
|
|
// way of long tristrips.
|
|
bool _consider_fans;
|
|
|
|
// The maximum average angle of the apex of each triangle involved
|
|
// in a fan. If the triangles are more loosely packed than this,
|
|
// don't consider putting them into a fan.
|
|
double _max_tfan_angle;
|
|
|
|
// The minimum number of triangles to be involved in a fan. Setting
|
|
// this number lower results in more fans, probably at the expense
|
|
// of tristrips. However, setting it to zero means no tfans will be
|
|
// built (although fans may still be unrolled into tstrips if
|
|
// _unroll_fans is true).
|
|
int _min_tfan_tris;
|
|
|
|
protected:
|
|
int sort_value() const;
|
|
};
|
|
|
|
INLINE ostream &operator << (ostream &out, const BuilderProperties &props) {
|
|
props.output(out);
|
|
return out;
|
|
}
|
|
|
|
#endif
|