110 lines
2.6 KiB
C
110 lines
2.6 KiB
C
|
/**
|
||
|
* 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 cLwoSurface.h
|
||
|
* @author drose
|
||
|
* @date 2001-04-25
|
||
|
*/
|
||
|
|
||
|
#ifndef CLWOSURFACE_H
|
||
|
#define CLWOSURFACE_H
|
||
|
|
||
|
#include "pandatoolbase.h"
|
||
|
|
||
|
#include "cLwoSurfaceBlock.h"
|
||
|
|
||
|
#include "lwoSurface.h"
|
||
|
#include "luse.h"
|
||
|
#include "eggTexture.h"
|
||
|
#include "eggMaterial.h"
|
||
|
#include "pt_EggTexture.h"
|
||
|
#include "pt_EggMaterial.h"
|
||
|
#include "vector_PT_EggVertex.h"
|
||
|
|
||
|
#include "pmap.h"
|
||
|
|
||
|
class LwoToEggConverter;
|
||
|
class LwoSurfaceBlock;
|
||
|
class EggPrimitive;
|
||
|
|
||
|
/**
|
||
|
* This class is a wrapper around LwoSurface and stores additional information
|
||
|
* useful during the conversion-to-egg process.
|
||
|
*/
|
||
|
class CLwoSurface {
|
||
|
public:
|
||
|
CLwoSurface(LwoToEggConverter *converter, const LwoSurface *surface);
|
||
|
~CLwoSurface();
|
||
|
|
||
|
INLINE const std::string &get_name() const;
|
||
|
|
||
|
void apply_properties(EggPrimitive *egg_prim,
|
||
|
vector_PT_EggVertex &egg_vertices,
|
||
|
PN_stdfloat &smooth_angle);
|
||
|
bool check_texture();
|
||
|
bool check_material();
|
||
|
|
||
|
INLINE bool has_named_uvs() const;
|
||
|
INLINE const std::string &get_uv_name() const;
|
||
|
|
||
|
|
||
|
enum Flags {
|
||
|
F_rgb = 0x0001,
|
||
|
F_diffuse = 0x0002,
|
||
|
F_luminosity = 0x0004,
|
||
|
F_specular = 0x0008,
|
||
|
F_reflection = 0x0010,
|
||
|
F_transparency = 0x0020,
|
||
|
F_gloss = 0x0040,
|
||
|
F_translucency = 0x0080,
|
||
|
F_smooth_angle = 0x0100,
|
||
|
F_backface = 0x0200,
|
||
|
};
|
||
|
|
||
|
int _flags;
|
||
|
LRGBColor _rgb;
|
||
|
PN_stdfloat _diffuse;
|
||
|
PN_stdfloat _luminosity;
|
||
|
PN_stdfloat _specular;
|
||
|
PN_stdfloat _reflection;
|
||
|
PN_stdfloat _transparency;
|
||
|
PN_stdfloat _gloss;
|
||
|
PN_stdfloat _translucency;
|
||
|
PN_stdfloat _smooth_angle;
|
||
|
bool _backface;
|
||
|
|
||
|
LColor _color;
|
||
|
LColor _diffuse_color;
|
||
|
|
||
|
LwoToEggConverter *_converter;
|
||
|
CPT(LwoSurface) _surface;
|
||
|
|
||
|
bool _checked_material;
|
||
|
PT_EggMaterial _egg_material;
|
||
|
|
||
|
bool _checked_texture;
|
||
|
PT_EggTexture _egg_texture;
|
||
|
|
||
|
CLwoSurfaceBlock *_block;
|
||
|
|
||
|
private:
|
||
|
void generate_uvs(vector_PT_EggVertex &egg_vertices);
|
||
|
|
||
|
LPoint2d map_planar(const LPoint3d &pos, const LPoint3d ¢roid) const;
|
||
|
LPoint2d map_spherical(const LPoint3d &pos, const LPoint3d ¢roid) const;
|
||
|
LPoint2d map_cylindrical(const LPoint3d &pos, const LPoint3d ¢roid) const;
|
||
|
LPoint2d map_cubic(const LPoint3d &pos, const LPoint3d ¢roid) const;
|
||
|
|
||
|
// Define a pointer to one of the above member functions.
|
||
|
LPoint2d (CLwoSurface::*_map_uvs)(const LPoint3d &pos, const LPoint3d ¢roid) const;
|
||
|
};
|
||
|
|
||
|
#include "cLwoSurface.I"
|
||
|
|
||
|
#endif
|