19 VRMLAppearance(
const VrmlNode *appearance) {
20 _has_material =
false;
22 _color.set(1.0f, 1.0f, 1.0f, 1.0f);
23 _has_tex_transform =
false;
25 if (appearance !=
nullptr) {
26 const VrmlNode *material = appearance->get_value(
"material")._sfnode._p;
27 if (material !=
nullptr) {
29 const double *c = material->get_value(
"diffuseColor")._sfvec;
30 _transparency = material->get_value(
"transparency")._sffloat;
31 _color.set(c[0], c[1], c[2], 1.0 - _transparency);
34 const VrmlNode *tex_transform = appearance->get_value(
"textureTransform")._sfnode._p;
35 if (tex_transform !=
nullptr) {
36 if (strcmp(tex_transform->_type->getName(),
"TextureTransform") == 0) {
37 _has_tex_transform =
true;
38 const double *c = tex_transform->get_value(
"center")._sfvec;
39 _tex_center.set(c[0], c[1]);
40 _tex_rotation = tex_transform->get_value(
"rotation")._sffloat;
41 const double *s = tex_transform->get_value(
"scale")._sfvec;
42 _tex_scale.set(s[0], s[1]);
43 const double *t = tex_transform->get_value(
"translation")._sfvec;
44 _tex_translation.set(t[0], t[1]);
48 const VrmlNode *texture = appearance->get_value(
"texture")._sfnode._p;
49 if (texture !=
nullptr) {
50 if (strcmp(texture->_type->getName(),
"ImageTexture") == 0) {
51 MFArray *url = texture->get_value(
"url")._mf;
53 const char *filename = (*url->begin())._sfstring;
56 if (_has_tex_transform) {
57 _tex->add_translate2d(-_tex_center);
58 _tex->add_scale2d(_tex_scale);
59 _tex->add_rotate2d(rad_2_deg(_tex_rotation));
60 _tex->add_translate2d(_tex_center);
61 _tex->add_translate2d(_tex_translation);