00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "xFileVertex.h"
00016 #include "eggVertex.h"
00017 #include "eggPrimitive.h"
00018 #include "config_xfile.h"
00019
00020
00021
00022
00023
00024
00025 XFileVertex::
00026 XFileVertex() {
00027 _has_color = false;
00028 _has_uv = false;
00029 _point.set(0.0, 0.0, 0.0);
00030 _uv.set(0.0, 0.0);
00031 _color.set(1.0f, 1.0f, 1.0f, 1.0f);
00032 }
00033
00034
00035
00036
00037
00038
00039 void XFileVertex::
00040 set_from_egg(EggVertex *egg_vertex, EggPrimitive *egg_prim) {
00041 LVertexd pos = egg_vertex->get_pos3();
00042
00043 if (xfile_one_mesh) {
00044
00045
00046 pos = pos * egg_prim->get_vertex_frame();
00047 } else {
00048
00049 pos = pos * egg_prim->get_vertex_to_node();
00050 }
00051
00052 _point = pos;
00053
00054 if (egg_vertex->has_uv()) {
00055 LTexCoordd uv = egg_vertex->get_uv();
00056 if (egg_prim->has_texture()) {
00057
00058 EggTexture *egg_tex = egg_prim->get_texture();
00059 if (egg_tex->has_transform2d()) {
00060 uv = uv * egg_tex->get_transform2d();
00061 }
00062 }
00063
00064 _uv[0] = uv[0];
00065
00066 _uv[1] = 1.0 - uv[1];
00067 _has_uv = true;
00068 }
00069
00070 if (egg_vertex->has_color()) {
00071 _color = egg_vertex->get_color();
00072 _has_color = true;
00073 } else if (egg_prim->has_color()) {
00074 _color = egg_prim->get_color();
00075 _has_color = true;
00076 }
00077 }
00078
00079
00080
00081
00082
00083
00084 int XFileVertex::
00085 compare_to(const XFileVertex &other) const {
00086 int ct;
00087 ct = _point.compare_to(other._point);
00088 if (ct == 0) {
00089 ct = _uv.compare_to(other._uv);
00090 }
00091 if (ct == 0) {
00092 ct = _color.compare_to(other._color);
00093 }
00094 return ct;
00095 }