106 lines
2.9 KiB
C++
106 lines
2.9 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 eggVertexUV.h
|
|
* @author drose
|
|
* @date 2004-07-20
|
|
*/
|
|
|
|
#ifndef EGGVERTEXUV_H
|
|
#define EGGVERTEXUV_H
|
|
|
|
#include "pandabase.h"
|
|
|
|
#include "eggMorphList.h"
|
|
#include "eggNamedObject.h"
|
|
|
|
#include "luse.h"
|
|
|
|
/**
|
|
* The set of UV's that may or may not be assigned to a vertex. To support
|
|
* multitexturing, there may be multiple sets of UV's on a particular vertex,
|
|
* each with its own name.
|
|
*/
|
|
class EXPCL_PANDA_EGG EggVertexUV : public EggNamedObject {
|
|
PUBLISHED:
|
|
explicit EggVertexUV(const std::string &name, const LTexCoordd &uv);
|
|
explicit EggVertexUV(const std::string &name, const LTexCoord3d &uvw);
|
|
EggVertexUV(const EggVertexUV ©);
|
|
EggVertexUV &operator = (const EggVertexUV ©);
|
|
virtual ~EggVertexUV();
|
|
|
|
INLINE static std::string filter_name(const std::string &name);
|
|
INLINE void set_name(const std::string &name);
|
|
|
|
INLINE int get_num_dimensions() const;
|
|
INLINE bool has_w() const;
|
|
INLINE LTexCoordd get_uv() const;
|
|
INLINE const LTexCoord3d &get_uvw() const;
|
|
INLINE void set_uv(const LTexCoordd &texCoord);
|
|
INLINE void set_uvw(const LTexCoord3d &texCoord);
|
|
|
|
INLINE bool has_tangent() const;
|
|
INLINE bool has_tangent4() const;
|
|
INLINE const LNormald &get_tangent() const;
|
|
INLINE LVecBase4d get_tangent4() const;
|
|
INLINE void set_tangent(const LNormald &tangent);
|
|
INLINE void set_tangent4(const LVecBase4d &tangent);
|
|
INLINE void clear_tangent();
|
|
|
|
INLINE bool has_binormal() const;
|
|
INLINE const LNormald &get_binormal() const;
|
|
INLINE void set_binormal(const LNormald &binormal);
|
|
INLINE void clear_binormal();
|
|
|
|
static PT(EggVertexUV) make_average(const EggVertexUV *first,
|
|
const EggVertexUV *second);
|
|
|
|
void transform(const LMatrix4d &mat);
|
|
|
|
void write(std::ostream &out, int indent_level) const;
|
|
int compare_to(const EggVertexUV &other) const;
|
|
|
|
EggMorphTexCoordList _duvs;
|
|
|
|
private:
|
|
enum Flags {
|
|
F_has_tangent = 0x001,
|
|
F_has_binormal = 0x002,
|
|
F_has_w = 0x004,
|
|
F_has_tangent4 = 0x008,
|
|
|
|
// Only defined temporarily as we can't add a float to this class in 1.10.
|
|
F_flip_computed_binormal = 0x010,
|
|
};
|
|
|
|
int _flags;
|
|
LNormald _tangent;
|
|
LNormald _binormal;
|
|
LTexCoord3d _uvw;
|
|
|
|
public:
|
|
static TypeHandle get_class_type() {
|
|
return _type_handle;
|
|
}
|
|
static void init_type() {
|
|
EggNamedObject::init_type();
|
|
register_type(_type_handle, "EggVertexUV",
|
|
EggNamedObject::get_class_type());
|
|
}
|
|
virtual TypeHandle get_type() const {
|
|
return get_class_type();
|
|
}
|
|
virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
|
|
|
|
private:
|
|
static TypeHandle _type_handle;
|
|
};
|
|
|
|
#include "eggVertexUV.I"
|
|
|
|
#endif
|