Add shadow interfaces to PointLight - actual implementation not complete yet

This commit is contained in:
rdb 2009-08-01 19:01:55 +00:00
parent 30565b916a
commit bf444742fe
4 changed files with 58 additions and 9 deletions

View File

@ -21,6 +21,16 @@ INLINE PerspectiveLens::
PerspectiveLens() {
}
////////////////////////////////////////////////////////////////////
// Function: PerspectiveLens::Constructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE PerspectiveLens::
PerspectiveLens(float hfov, float vfov) {
_fov.set(hfov, vfov);
}
////////////////////////////////////////////////////////////////////
// Function: PerspectiveLens::Copy Constructor
// Access: Public

View File

@ -27,6 +27,7 @@
class EXPCL_PANDA_GOBJ PerspectiveLens : public Lens {
PUBLISHED:
INLINE PerspectiveLens();
INLINE PerspectiveLens(float hfov, float vfov);
public:
INLINE PerspectiveLens(const PerspectiveLens &copy);

View File

@ -65,8 +65,27 @@ fillin(DatagramIterator &scan, BamReader *) {
////////////////////////////////////////////////////////////////////
PointLight::
PointLight(const string &name) :
LightNode(name)
LightLensNode(name)
{
PT(Lens) lens;
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(1, 0, 0, 0, 0, 1);
set_lens(0, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(-1, 0, 0, 0, 0, 1);
set_lens(1, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(0, 1, 0, 0, 0, 1);
set_lens(2, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(0, -1, 0, 0, 0, 1);
set_lens(3, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(0, 0, 1, 0, 0, 1);
set_lens(4, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(0, 0, -1, 0, 0, 1);
set_lens(5, lens);
}
////////////////////////////////////////////////////////////////////
@ -78,9 +97,28 @@ PointLight(const string &name) :
////////////////////////////////////////////////////////////////////
PointLight::
PointLight(const PointLight &copy) :
LightNode(copy),
LightLensNode(copy),
_cycler(copy._cycler)
{
PT(Lens) lens;
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(1, 0, 0, 0, 0, 1);
set_lens(0, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(-1, 0, 0, 0, 0, 1);
set_lens(1, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(0, 1, 0, 0, 0, 1);
set_lens(2, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(0, -1, 0, 0, 0, 1);
set_lens(3, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(0, 0, 1, 0, 0, 1);
set_lens(4, lens);
lens = new PerspectiveLens(90, 90);
lens->set_view_vector(0, 0, -1, 0, 0, 1);
set_lens(5, lens);
}
////////////////////////////////////////////////////////////////////
@ -106,7 +144,7 @@ make_copy() const {
////////////////////////////////////////////////////////////////////
void PointLight::
xform(const LMatrix4f &mat) {
LightNode::xform(mat);
LightLensNode::xform(mat);
CDWriter cdata(_cycler);
cdata->_point = cdata->_point * mat;
mark_viz_stale();
@ -199,7 +237,7 @@ register_with_read_factory() {
////////////////////////////////////////////////////////////////////
void PointLight::
write_datagram(BamWriter *manager, Datagram &dg) {
LightNode::write_datagram(manager, dg);
LightLensNode::write_datagram(manager, dg);
manager->write_cdata(dg, _cycler);
}
@ -232,6 +270,6 @@ make_from_bam(const FactoryParams &params) {
////////////////////////////////////////////////////////////////////
void PointLight::
fillin(DatagramIterator &scan, BamReader *manager) {
LightNode::fillin(scan, manager);
LightLensNode::fillin(scan, manager);
manager->read_cdata(scan, _cycler);
}

View File

@ -17,14 +17,14 @@
#include "pandabase.h"
#include "lightNode.h"
#include "lightLensNode.h"
////////////////////////////////////////////////////////////////////
// Class : PointLight
// Description : A light originating from a single point in space, and
// shining in all directions.
////////////////////////////////////////////////////////////////////
class EXPCL_PANDA_PGRAPHNODES PointLight : public LightNode {
class EXPCL_PANDA_PGRAPHNODES PointLight : public LightLensNode {
PUBLISHED:
PointLight(const string &name);
@ -91,9 +91,9 @@ public:
return _type_handle;
}
static void init_type() {
LightNode::init_type();
LightLensNode::init_type();
register_type(_type_handle, "PointLight",
LightNode::get_class_type());
LightLensNode::get_class_type());
}
virtual TypeHandle get_type() const {
return get_class_type();