mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 09:23:03 -04:00
gobj: support non-affine transformations in calc_tight_bounds
This makes it possible to get the 2D bounding volume of an object as it appears on screen.
This commit is contained in:
parent
ff12deeba4
commit
ab238bd153
@ -1612,7 +1612,7 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point,
|
|||||||
// Find the first non-NaN vertex.
|
// Find the first non-NaN vertex.
|
||||||
while (!found_any && i < cdata->_num_vertices) {
|
while (!found_any && i < cdata->_num_vertices) {
|
||||||
reader.set_row(cdata->_first_vertex + i);
|
reader.set_row(cdata->_first_vertex + i);
|
||||||
LPoint3 first_vertex = mat.xform_point(reader.get_data3());
|
LPoint3 first_vertex = mat.xform_point_general(reader.get_data3());
|
||||||
if (!first_vertex.is_nan()) {
|
if (!first_vertex.is_nan()) {
|
||||||
min_point = first_vertex;
|
min_point = first_vertex;
|
||||||
max_point = first_vertex;
|
max_point = first_vertex;
|
||||||
@ -1624,7 +1624,7 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point,
|
|||||||
|
|
||||||
for (; i < cdata->_num_vertices; ++i) {
|
for (; i < cdata->_num_vertices; ++i) {
|
||||||
reader.set_row_unsafe(cdata->_first_vertex + i);
|
reader.set_row_unsafe(cdata->_first_vertex + i);
|
||||||
LPoint3 vertex = mat.xform_point(reader.get_data3());
|
LPoint3 vertex = mat.xform_point_general(reader.get_data3());
|
||||||
|
|
||||||
min_point.set(min(min_point[0], vertex[0]),
|
min_point.set(min(min_point[0], vertex[0]),
|
||||||
min(min_point[1], vertex[1]),
|
min(min_point[1], vertex[1]),
|
||||||
@ -1677,7 +1677,7 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point,
|
|||||||
int ii = index.get_data1i();
|
int ii = index.get_data1i();
|
||||||
if (ii != strip_cut_index) {
|
if (ii != strip_cut_index) {
|
||||||
reader.set_row(ii);
|
reader.set_row(ii);
|
||||||
LPoint3 first_vertex = mat.xform_point(reader.get_data3());
|
LPoint3 first_vertex = mat.xform_point_general(reader.get_data3());
|
||||||
if (!first_vertex.is_nan()) {
|
if (!first_vertex.is_nan()) {
|
||||||
min_point = first_vertex;
|
min_point = first_vertex;
|
||||||
max_point = first_vertex;
|
max_point = first_vertex;
|
||||||
@ -1693,7 +1693,7 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
reader.set_row_unsafe(ii);
|
reader.set_row_unsafe(ii);
|
||||||
LPoint3 vertex = mat.xform_point(reader.get_data3());
|
LPoint3 vertex = mat.xform_point_general(reader.get_data3());
|
||||||
|
|
||||||
min_point.set(min(min_point[0], vertex[0]),
|
min_point.set(min(min_point[0], vertex[0]),
|
||||||
min(min_point[1], vertex[1]),
|
min(min_point[1], vertex[1]),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user