attached): * Light point strings using the REPLICATE opcode should now be supported (>=15.6?) * Directional lights should now work as in Performer using a viewing frustrum defined by a direction vector, horizontal angular width, vertical angular width, and roll angle about the direction vector. The current directional light implementation had some bad assumptions which caused problems with direction vectors not on the XY plane. * IVE and OSG reader/writers were updated as appropriate"
129 lines
3.6 KiB
C++
129 lines
3.6 KiB
C++
/**********************************************************************
|
|
*
|
|
* FILE: LightPoint.cpp
|
|
*
|
|
* DESCRIPTION: Read/Write osgSim::LightPoint in binary format to disk.
|
|
*
|
|
* CREATED BY: Auto generated by iveGenerator
|
|
* and later modified by Rune Schmidt Jensen.
|
|
*
|
|
* HISTORY: Created 5.9.2003
|
|
*
|
|
**********************************************************************/
|
|
|
|
#include "Exception.h"
|
|
#include "LightPoint.h"
|
|
#include "BlinkSequence.h"
|
|
#include "AzimElevationSector.h"
|
|
#include "ElevationSector.h"
|
|
#include "AzimSector.h"
|
|
#include "ConeSector.h"
|
|
#include "DirectionalSector.h"
|
|
|
|
using namespace ive;
|
|
|
|
void LightPoint::write(DataOutputStream* out){
|
|
// Write LightPoint's identification.
|
|
out->writeInt(IVELIGHTPOINT);
|
|
|
|
// Write LightPoint's properties.
|
|
out->writeBool(_on);
|
|
out->writeVec3(_position);
|
|
out->writeVec4(_color);
|
|
out->writeFloat(_intensity);
|
|
out->writeFloat(_radius);
|
|
|
|
// Write out osgSim::sector.
|
|
out->writeBool(_sector.valid());
|
|
if(_sector.valid()){
|
|
if(dynamic_cast<osgSim::AzimElevationSector*>(_sector.get())){
|
|
((ive::AzimElevationSector*)(_sector.get()))->write(out);
|
|
}
|
|
else if(dynamic_cast<osgSim::ElevationSector*>(_sector.get())){
|
|
((ive::ElevationSector*)(_sector.get()))->write(out);
|
|
}
|
|
else if(dynamic_cast<osgSim::AzimSector*>(_sector.get())){
|
|
((ive::AzimSector*)(_sector.get()))->write(out);
|
|
}
|
|
else if(dynamic_cast<osgSim::ConeSector*>(_sector.get())){
|
|
((ive::ConeSector*)(_sector.get()))->write(out);
|
|
}
|
|
else if(dynamic_cast<osgSim::DirectionalSector*>(_sector.get())){
|
|
((ive::DirectionalSector*)(_sector.get()))->write(out);
|
|
}
|
|
else
|
|
throw Exception("Unknown sector in LightPoint::write()");
|
|
}
|
|
|
|
// Write out osgSim::BlinkSequence.
|
|
out->writeBool(_blinkSequence.valid());
|
|
if(_blinkSequence.valid()){
|
|
((ive::BlinkSequence*)(_blinkSequence.get()))->write(out);
|
|
}
|
|
|
|
// Write out blendingMode.
|
|
out->writeInt(_blendingMode);
|
|
}
|
|
|
|
void LightPoint::read(DataInputStream* in){
|
|
// Peek on LightPoint's identification.
|
|
int id = in->peekInt();
|
|
if(id == IVELIGHTPOINT){
|
|
// Read LightPoint's identification.
|
|
id = in->readInt();
|
|
|
|
// Read LightPoint's properties
|
|
_on = in->readBool();
|
|
_position = in->readVec3();
|
|
_color = in->readVec4();
|
|
_intensity = in->readFloat();
|
|
_radius = in->readFloat();
|
|
|
|
// read in osgSim::sector.
|
|
if(in->readBool()){
|
|
osgSim::Sector* sector;
|
|
int attributeID = in->peekInt();
|
|
if(attributeID == IVEAZIMELEVATIONSECTOR){
|
|
sector = new osgSim::AzimElevationSector();
|
|
((ive::AzimElevationSector*)(sector))->read(in);
|
|
_sector = sector;
|
|
}
|
|
else if(attributeID == IVEELEVATIONSECTOR){
|
|
sector = new osgSim::ElevationSector();
|
|
((ive::ElevationSector*)(sector))->read(in);
|
|
_sector = sector;
|
|
}
|
|
else if(attributeID == IVEAZIMSECTOR){
|
|
sector = new osgSim::AzimSector();
|
|
((ive::AzimSector*)(sector))->read(in);
|
|
_sector = sector;
|
|
}
|
|
else if(attributeID == IVECONESECTOR){
|
|
sector = new osgSim::ConeSector();
|
|
((ive::ConeSector*)(sector))->read(in);
|
|
_sector = sector;
|
|
}
|
|
else if(attributeID == IVEDIRECTIONALSECTOR){
|
|
sector = new osgSim::DirectionalSector();
|
|
((ive::DirectionalSector*)(sector))->read(in);
|
|
_sector = sector;
|
|
}
|
|
else
|
|
throw Exception("Unknown sector in LightPoint::read()");
|
|
}
|
|
|
|
// Read in osgSim::BlinkSequence.
|
|
if(in->readBool()){
|
|
osgSim::BlinkSequence* blinkSequence = new osgSim::BlinkSequence();
|
|
((ive::BlinkSequence*)(blinkSequence))->read(in);
|
|
_blinkSequence = blinkSequence;
|
|
}
|
|
|
|
// Read in blendingMode.
|
|
_blendingMode = (osgSim::LightPoint::BlendingMode)in->readInt();
|
|
}
|
|
else{
|
|
throw Exception("LightPoint::read(): Expected LightPoint identification.");
|
|
}
|
|
}
|