historical/toontown-classic.git/panda/include/qtessSurface.I
2024-01-16 11:20:27 -06:00

154 lines
3.9 KiB
Text

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file qtessSurface.I
* @author drose
* @date 2003-10-13
*/
/**
*
*/
INLINE const std::string &QtessSurface::
get_name() const {
return _egg_surface->get_name();
}
/**
* Returns true if the defined surface is valid, false otherwise.
*/
INLINE bool QtessSurface::
is_valid() const {
return (_nurbs != nullptr);
}
/**
* Sets the importance of the surface, as a ratio in proportion to the square
* of its size.
*/
INLINE void QtessSurface::
set_importance(double importance2) {
_importance = sqrt(importance2);
_importance2 = importance2;
}
/**
* Indicates the surface to which this surface must match in its U direction.
* If u_to_u is true, it matches to the other surface's U direction;
* otherwise, it matches to the other surface's V direction.
*
* Note that the surface pointer is an indirect pointer. The value passed in
* is the address of the pointer to the actual surface (which may or may not
* be filled in yet). The actual pointer may be filled in later.
*/
INLINE void QtessSurface::
set_match_u(QtessSurface **match_u, bool match_u_to_u) {
_match_u = match_u;
_match_u_to_u = match_u_to_u;
}
/**
* Indicates the surface to which this surface must match in its V direction.
* If v_to_v is true, it matches to the other surface's V direction;
* otherwise, it matches to the other surface's U direction.
*
* Note that the surface pointer is an indirect pointer. The value passed in
* is the address of the pointer to the actual surface (which may or may not
* be filled in yet). The actual pointer may be filled in later.
*/
INLINE void QtessSurface::
set_match_v(QtessSurface **match_v, bool match_v_to_v) {
_match_v = match_v;
_match_v_to_v = match_v_to_v;
}
/**
* Specifies the absolute minimum number of segments allowed in the U
* direction.
*/
INLINE void QtessSurface::
set_min_u(int min_u) {
_min_u = min_u;
}
/**
* Specifies the absolute minimum number of segments allowed in the V
* direction.
*/
INLINE void QtessSurface::
set_min_v(int min_v) {
_min_v = min_v;
}
/**
* Returns the number of patches the NURBS contains. Each patch is a square
* area bounded by isoparams. This actually scales by the importance of the
* surface, if it is not 1.
*/
INLINE double QtessSurface::
count_patches() const {
return _num_u * _num_v * _importance2;
}
/**
* Returns the number of triangles that will be generated by the current
* tesselation parameters.
*/
INLINE int QtessSurface::
count_tris() const {
return _tess_u * _tess_v * 2;
}
/**
* Returns the extra dimension number within the surface where the vertex
* membership in the indicated joint should be stored.
*/
INLINE int QtessSurface::
get_joint_membership_index(EggGroup *joint) {
JointTable::iterator jti = _joint_table.find(joint);
if (jti != _joint_table.end()) {
return (*jti).second;
}
int d = _next_d;
_next_d++;
_joint_table[joint] = d;
return d;
}
/**
* Returns the extra dimension number within the surface where the indicated
* Dxyz morph offset should be stored.
*/
INLINE int QtessSurface::
get_dxyz_index(const std::string &morph_name) {
MorphTable::iterator mti = _dxyz_table.find(morph_name);
if (mti != _dxyz_table.end()) {
return (*mti).second;
}
int d = _next_d;
_next_d += 3;
_dxyz_table[morph_name] = d;
return d;
}
/**
* Returns the extra dimension number within the surface where the indicated
* Drgba morph offset should be stored.
*/
INLINE int QtessSurface::
get_drgba_index(const std::string &morph_name) {
MorphTable::iterator mti = _drgba_table.find(morph_name);
if (mti != _drgba_table.end()) {
return (*mti).second;
}
int d = _next_d;
_next_d += 4;
_drgba_table[morph_name] = d;
return d;
}