mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 01:07:51 -04:00
display cubes for a cube map or 3-d texture
This commit is contained in:
parent
02a740c143
commit
94eeacbbe2
@ -1253,25 +1253,99 @@ load_image_as_model(const Filename &filename) {
|
||||
card_node->set_attrib(TransparencyAttrib::make(TransparencyAttrib::M_alpha));
|
||||
}
|
||||
|
||||
bool is_3d = false;
|
||||
if (tex->get_texture_type() == Texture::TT_3d_texture ||
|
||||
tex->get_texture_type() == Texture::TT_cube_map) {
|
||||
// For a 3-d texture, generate a cube, instead of a plain card.
|
||||
is_3d = true;
|
||||
}
|
||||
|
||||
CPT(GeomVertexFormat) vformat;
|
||||
if (!is_3d) {
|
||||
// Vertices and 2-d texture coordinates, all we need.
|
||||
vformat = GeomVertexFormat::get_v3t2();
|
||||
|
||||
} else {
|
||||
// Vertices and 3-d texture coordinates.
|
||||
vformat = GeomVertexFormat::register_format
|
||||
(new GeomVertexArrayFormat
|
||||
(InternalName::get_vertex(), 3,
|
||||
GeomEnums::NT_float32, GeomEnums::C_point,
|
||||
InternalName::get_texcoord(), 3,
|
||||
GeomEnums::NT_float32, GeomEnums::C_texcoord));
|
||||
}
|
||||
|
||||
PT(GeomVertexData) vdata = new GeomVertexData
|
||||
("card", GeomVertexFormat::get_v3t2(),
|
||||
Geom::UH_static);
|
||||
("card", vformat, Geom::UH_static);
|
||||
GeomVertexWriter vertex(vdata, InternalName::get_vertex());
|
||||
GeomVertexWriter texcoord(vdata, InternalName::get_texcoord());
|
||||
|
||||
vertex.add_data3f(Vertexf::rfu(left, 0.02f, top));
|
||||
vertex.add_data3f(Vertexf::rfu(left, 0.02f, bottom));
|
||||
vertex.add_data3f(Vertexf::rfu(right, 0.02f, top));
|
||||
vertex.add_data3f(Vertexf::rfu(right, 0.02f, bottom));
|
||||
if (!is_3d) {
|
||||
// A normal 2-d card.
|
||||
vertex.add_data3f(Vertexf::rfu(left, 0.02f, top));
|
||||
vertex.add_data3f(Vertexf::rfu(left, 0.02f, bottom));
|
||||
vertex.add_data3f(Vertexf::rfu(right, 0.02f, top));
|
||||
vertex.add_data3f(Vertexf::rfu(right, 0.02f, bottom));
|
||||
|
||||
texcoord.add_data2f(0.0f, tex_scale[1]);
|
||||
texcoord.add_data2f(0.0f, 0.0f);
|
||||
texcoord.add_data2f(tex_scale[0], tex_scale[1]);
|
||||
texcoord.add_data2f(tex_scale[0], 0.0f);
|
||||
|
||||
texcoord.add_data2f(0.0f, tex_scale[1]);
|
||||
texcoord.add_data2f(0.0f, 0.0f);
|
||||
texcoord.add_data2f(tex_scale[0], tex_scale[1]);
|
||||
texcoord.add_data2f(tex_scale[0], 0.0f);
|
||||
} else {
|
||||
// The eight vertices of a 3-d cube.
|
||||
vertex.add_data3f(-1.0f, -1.0f, 1.0f); // 0
|
||||
vertex.add_data3f(-1.0f, -1.0f, -1.0f); // 1
|
||||
vertex.add_data3f(1.0f, -1.0f, -1.0f); // 2
|
||||
vertex.add_data3f(1.0f, -1.0f, 1.0f); // 3
|
||||
vertex.add_data3f(1.0f, 1.0f, 1.0f); // 4
|
||||
vertex.add_data3f(1.0f, 1.0f, -1.0f); // 5
|
||||
vertex.add_data3f(-1.0f, 1.0f, -1.0f); // 6
|
||||
vertex.add_data3f(-1.0f, 1.0f, 1.0f); // 7
|
||||
|
||||
texcoord.add_data3f(-1.0f, -1.0f, 1.0f); // 0
|
||||
texcoord.add_data3f(-1.0f, -1.0f, -1.0f); // 1
|
||||
texcoord.add_data3f(1.0f, -1.0f, -1.0f); // 2
|
||||
texcoord.add_data3f(1.0f, -1.0f, 1.0f); // 3
|
||||
texcoord.add_data3f(1.0f, 1.0f, 1.0f); // 4
|
||||
texcoord.add_data3f(1.0f, 1.0f, -1.0f); // 5
|
||||
texcoord.add_data3f(-1.0f, 1.0f, -1.0f); // 6
|
||||
texcoord.add_data3f(-1.0f, 1.0f, 1.0f); // 7
|
||||
}
|
||||
|
||||
PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static);
|
||||
strip->add_consecutive_vertices(0, 4);
|
||||
strip->close_primitive();
|
||||
|
||||
if (!is_3d) {
|
||||
// The two triangles that make up a quad.
|
||||
strip->add_consecutive_vertices(0, 4);
|
||||
strip->close_primitive();
|
||||
|
||||
} else {
|
||||
// The twelve triangles (six quads) that make up a cube.
|
||||
strip->add_vertex(7);
|
||||
strip->add_vertex(0);
|
||||
strip->add_vertex(4);
|
||||
strip->add_vertex(3);
|
||||
strip->close_primitive();
|
||||
|
||||
strip->add_vertex(1);
|
||||
strip->add_vertex(6);
|
||||
strip->add_vertex(2);
|
||||
strip->add_vertex(5);
|
||||
strip->close_primitive();
|
||||
|
||||
strip->add_vertex(5);
|
||||
strip->add_vertex(4);
|
||||
strip->add_vertex(2);
|
||||
strip->add_vertex(3);
|
||||
strip->add_vertex(1);
|
||||
strip->add_vertex(0);
|
||||
strip->add_vertex(6);
|
||||
strip->add_vertex(7);
|
||||
strip->add_vertex(5);
|
||||
strip->add_vertex(4);
|
||||
strip->close_primitive();
|
||||
}
|
||||
|
||||
PT(Geom) geom = new Geom(vdata);
|
||||
geom->add_primitive(strip);
|
||||
|
Loading…
x
Reference in New Issue
Block a user