mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 00:32:57 -04:00
bam2egg: support multitexturing, multiple UV sets
This commit is contained in:
parent
ebd538a7f8
commit
9966ddaa33
@ -750,6 +750,7 @@ convert_primitive(const GeomVertexData *vertex_data,
|
|||||||
const LMatrix4 &net_mat, EggGroupNode *egg_parent,
|
const LMatrix4 &net_mat, EggGroupNode *egg_parent,
|
||||||
CharacterJointMap *joint_map) {
|
CharacterJointMap *joint_map) {
|
||||||
GeomVertexReader reader(vertex_data);
|
GeomVertexReader reader(vertex_data);
|
||||||
|
const GeomVertexFormat *format = vertex_data->get_format();
|
||||||
|
|
||||||
// Make a zygote that will be duplicated for each primitive.
|
// Make a zygote that will be duplicated for each primitive.
|
||||||
PT(EggPrimitive) egg_prim;
|
PT(EggPrimitive) egg_prim;
|
||||||
@ -808,14 +809,14 @@ convert_primitive(const GeomVertexData *vertex_data,
|
|||||||
// Check for a texture.
|
// Check for a texture.
|
||||||
const TextureAttrib *ta;
|
const TextureAttrib *ta;
|
||||||
if (net_state->get_attrib(ta)) {
|
if (net_state->get_attrib(ta)) {
|
||||||
EggTexture *egg_tex = get_egg_texture(ta->get_texture());
|
for (size_t i = 0; i < ta->get_num_on_stages(); ++i) {
|
||||||
|
TextureStage *tex_stage = ta->get_on_stage(i);
|
||||||
|
|
||||||
if (egg_tex != nullptr) {
|
EggTexture *egg_tex = get_egg_texture(ta->get_on_texture(tex_stage));
|
||||||
TextureStage *tex_stage = ta->get_on_stage(0);
|
if (egg_tex != nullptr) {
|
||||||
if (tex_stage != nullptr) {
|
|
||||||
switch (tex_stage->get_mode()) {
|
switch (tex_stage->get_mode()) {
|
||||||
case TextureStage::M_modulate:
|
case TextureStage::M_modulate:
|
||||||
if (has_color_off == true) {
|
if (has_color_off == true && i == 0) {
|
||||||
egg_tex->set_env_type(EggTexture::ET_replace);
|
egg_tex->set_env_type(EggTexture::ET_replace);
|
||||||
} else {
|
} else {
|
||||||
egg_tex->set_env_type(EggTexture::ET_modulate);
|
egg_tex->set_env_type(EggTexture::ET_modulate);
|
||||||
@ -836,12 +837,44 @@ convert_primitive(const GeomVertexData *vertex_data,
|
|||||||
case TextureStage::M_blend_color_scale:
|
case TextureStage::M_blend_color_scale:
|
||||||
egg_tex->set_env_type(EggTexture::ET_blend_color_scale);
|
egg_tex->set_env_type(EggTexture::ET_blend_color_scale);
|
||||||
break;
|
break;
|
||||||
|
case TextureStage::M_modulate_glow:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_modulate_glow);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_modulate_gloss:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_modulate_gloss);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_normal:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_normal);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_normal_height:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_normal_height);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_glow:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_glow);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_gloss:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_gloss);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_height:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_height);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_selector:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_selector);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_normal_gloss:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_normal_gloss);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
egg_prim->set_texture(egg_tex);
|
const InternalName *name = tex_stage->get_texcoord_name();
|
||||||
|
if (name != nullptr && name != InternalName::get_texcoord()) {
|
||||||
|
egg_tex->set_uv_name(name->get_basename());
|
||||||
|
}
|
||||||
|
|
||||||
|
egg_prim->add_texture(egg_tex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -906,10 +939,15 @@ convert_primitive(const GeomVertexData *vertex_data,
|
|||||||
color[3] * color_scale[3]));
|
color[3] * color_scale[3]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vertex_data->has_column(InternalName::get_texcoord())) {
|
for (size_t ti = 0; ti < format->get_num_texcoords(); ++ti) {
|
||||||
reader.set_column(InternalName::get_texcoord());
|
const InternalName *texcoord_name = format->get_texcoord(ti);
|
||||||
|
reader.set_column(texcoord_name);
|
||||||
LTexCoord uv = reader.get_data2();
|
LTexCoord uv = reader.get_data2();
|
||||||
egg_vert.set_uv(LCAST(double, uv));
|
if (texcoord_name == InternalName::get_texcoord()) {
|
||||||
|
egg_vert.set_uv(LCAST(double, uv));
|
||||||
|
} else {
|
||||||
|
egg_vert.set_uv(texcoord_name->get_basename(), LCAST(double, uv));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EggVertex *new_egg_vert = _vpool->create_unique_vertex(egg_vert);
|
EggVertex *new_egg_vert = _vpool->create_unique_vertex(egg_vert);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user