126 lines
3.1 KiB
Text
126 lines
3.1 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 billboardEffect.I
|
||
|
* @author drose
|
||
|
* @date 2002-03-14
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Use BillboardEffect::make() to construct a new BillboardEffect object.
|
||
|
*/
|
||
|
INLINE BillboardEffect::
|
||
|
BillboardEffect() {
|
||
|
_off = true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* A convenience function to make a typical axis-rotating billboard.
|
||
|
*/
|
||
|
INLINE CPT(RenderEffect) BillboardEffect::
|
||
|
make_axis() {
|
||
|
return make(LVector3::up(), false, true,
|
||
|
0.0f, NodePath(), LPoint3(0.0f, 0.0f, 0.0f));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* A convenience function to make a typical eye-relative point-rotating
|
||
|
* billboard.
|
||
|
*/
|
||
|
INLINE CPT(RenderEffect) BillboardEffect::
|
||
|
make_point_eye() {
|
||
|
return make(LVector3::up(), true, false,
|
||
|
0.0f, NodePath(), LPoint3(0.0f, 0.0f, 0.0f));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* A convenience function to make a typical world-relative point-rotating
|
||
|
* billboard.
|
||
|
*/
|
||
|
INLINE CPT(RenderEffect) BillboardEffect::
|
||
|
make_point_world() {
|
||
|
return make(LVector3::up(), false, false,
|
||
|
0.0f, NodePath(), LPoint3(0.0f, 0.0f, 0.0f));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the BillboardEffect is an 'off' BillboardEffect, indicating
|
||
|
* that it does not enable billboarding. This kind of BillboardEffect isn't
|
||
|
* particularly useful and isn't normally created or stored in the graph; it
|
||
|
* might be implicitly discovered as the result of a
|
||
|
* NodePath::get_rel_state().
|
||
|
*/
|
||
|
INLINE bool BillboardEffect::
|
||
|
is_off() const {
|
||
|
return _off;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the up vector in effect for this billboard.
|
||
|
*/
|
||
|
INLINE const LVector3 &BillboardEffect::
|
||
|
get_up_vector() const {
|
||
|
return _up_vector;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if this billboard interprets the up vector relative to the
|
||
|
* camera, or false if it is relative to the world.
|
||
|
*/
|
||
|
INLINE bool BillboardEffect::
|
||
|
get_eye_relative() const {
|
||
|
return _eye_relative;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if this billboard rotates only around the axis of the up
|
||
|
* vector, or false if it rotates freely in three dimensions.
|
||
|
*/
|
||
|
INLINE bool BillboardEffect::
|
||
|
get_axial_rotate() const {
|
||
|
return _axial_rotate;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if this billboard always appears at a fixed distance from the
|
||
|
* camera.
|
||
|
*/
|
||
|
INLINE bool BillboardEffect::
|
||
|
get_fixed_depth() const {
|
||
|
return _fixed_depth;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the distance toward the camera (or the look_at_point) the billboard
|
||
|
* is moved towards, after rotating. This can be used to ensure the billboard
|
||
|
* is not obscured by nearby geometry.
|
||
|
*/
|
||
|
INLINE PN_stdfloat BillboardEffect::
|
||
|
get_offset() const {
|
||
|
return _offset;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the node this billboard will rotate to look towards. If this is
|
||
|
* empty, it means the billboard will rotate towards the current camera node,
|
||
|
* wherever that might be.
|
||
|
*/
|
||
|
INLINE const NodePath &BillboardEffect::
|
||
|
get_look_at() const {
|
||
|
return _look_at;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the point, relative to the look_at node, towards which the
|
||
|
* billboard will rotate. Normally this is (0, 0, 0).
|
||
|
*/
|
||
|
INLINE const LPoint3 &BillboardEffect::
|
||
|
get_look_at_point() const {
|
||
|
return _look_at_point;
|
||
|
}
|