Panda3D
Loading...
Searching...
No Matches
mayaShaderColorDef.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file mayaShaderColorDef.h
10 * @author drose
11 * @date 2003-04-12
12 */
13
14#ifndef MAYASHADERCOLORDEF_H
15#define MAYASHADERCOLORDEF_H
16
17#include "pandatoolbase.h"
18
19#include "luse.h"
20#include "lmatrix.h"
21#include "pmap.h"
22#include "pvector.h"
23
24class MayaShader;
28
29/**
30 * This defines the various attributes that Maya may associate with the
31 * "color" channel for a particular shader (as well as on the "transparency"
32 * channel).
33 */
35public:
39
40 std::string strip_prefix(std::string full_name);
41
42 LMatrix3d compute_texture_matrix() const;
43 bool has_projection() const;
44 LTexCoordd project_uv(const LPoint3d &pos, const LPoint3d &ref_point) const;
45 bool reset_maya_texture(const Filename &texture);
46
47 void write(std::ostream &out) const;
48
49 enum BlendType {
50 BT_unspecified,
51 BT_modulate,
52 BT_decal,
53 BT_blend,
54 BT_replace,
55 BT_add,
56 BT_blend_color_scale,
57 BT_modulate_glow,
58 BT_modulate_gloss,
59 BT_normal,
60 BT_normal_height,
61 BT_gloss,
62 BT_glow,
63 BT_height,
64 BT_selector,
65 };
66
67 enum ProjectionType {
68 PT_off,
69 PT_planar,
70 PT_spherical,
71 PT_cylindrical,
72 PT_ball,
73 PT_cubic,
74 PT_triplanar,
75 PT_concentric,
76 PT_perspective,
77 };
78
79 BlendType _blend_type;
80 ProjectionType _projection_type;
81 LMatrix4d _projection_matrix;
82 double _u_angle;
83 double _v_angle;
84
85 Filename _texture_filename;
86 std::string _texture_name;
87 LColor _color_gain;
88
89 LVector2 _coverage;
90 LVector2 _translate_frame;
91 double _rotate_frame;
92
93 bool _mirror;
94 bool _stagger;
95 bool _wrap_u;
96 bool _wrap_v;
97
98 LVector2 _repeat_uv;
99 LVector2 _offset;
100 double _rotate_uv;
101
102 bool _is_alpha;
103
104 std::string _uvset_name;
105 MayaShaderColorDef *_opposite;
106
107 std::string get_panda_uvset_name();
108
109private:
110 MObject *_color_object;
111
112private:
113 static void find_textures_modern(const std::string &shadername, MayaShaderColorList &list, MPlug inplug, bool is_alpha);
114 void find_textures_legacy(MayaShader *shader, MObject color, bool trans=false);
115
116 void set_projection_type(const std::string &type);
117
118 LPoint2d map_planar(const LPoint3d &pos, const LPoint3d &centroid) const;
119 LPoint2d map_spherical(const LPoint3d &pos, const LPoint3d &centroid) const;
120 LPoint2d map_cylindrical(const LPoint3d &pos, const LPoint3d &centroid) const;
121
122 // Define a pointer to one of the above member functions.
123 LPoint2d (MayaShaderColorDef::*_map_uvs)(const LPoint3d &pos, const LPoint3d &centroid) const;
124
125 friend class MayaShader;
126
127
128/*
129 * Legacy Fields - these fields are only used by the legacy codepath. These
130 * fields are deprecated for the following reasons: * has_texture is redundant
131 * --- if there's no texture, just don't allocate a MayaShaderColorDef. *
132 * has_flat_color and flat_color don't belong here, they belong in the shader.
133 * * has_alpha_channel is not needed - there are better ways to determine if a
134 * texture stage involves an alpha channel. * keep_color, keep_alpha, and
135 * interpolate are all adjuncts to blend_mode - it would make more sense just
136 * to add some more blend_modes.
137 */
138
139public:
140 bool _has_texture; // deprecated, see above.
141 bool _has_flat_color; // deprecated, see above.
142 LColord _flat_color; // deprecated, see above.
143 bool _has_alpha_channel; // deprecated, see above.
144 bool _keep_color; // deprecated, see above.
145 bool _keep_alpha; // deprecated, see above.
146 bool _interpolate; // deprecated, see above.
147
148};
149
150#endif
The name of a file, such as a texture file or an Egg file.
Definition filename.h:44
This defines the various attributes that Maya may associate with the "color" channel for a particular...
bool reset_maya_texture(const Filename &texture)
Changes the texture filename stored in the Maya file for this particular shader.
LMatrix3d compute_texture_matrix() const
Returns a texture matrix corresponding to the texture transforms indicated by the shader.
bool has_projection() const
Returns true if the shader has a projection in effect.
std::string get_panda_uvset_name()
Maya's default uvset name is "map1".
LTexCoordd project_uv(const LPoint3d &pos, const LPoint3d &ref_point) const
If the shader has a projection (has_projection() returns true), this computes the appropriate UV corr...
Corresponds to a single "shader" in Maya.
Definition mayaShader.h:30
This is our own Panda specialization on the default STL map.
Definition pmap.h:49
This is our own Panda specialization on the default STL vector.
Definition pvector.h:42
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.