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:
rdb 2019-07-10 09:30:16 +02:00
parent ff12deeba4
commit ab238bd153

View File

@ -1612,7 +1612,7 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point,
// Find the first non-NaN vertex.
while (!found_any && i < cdata->_num_vertices) {
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()) {
min_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) {
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(min_point[1], vertex[1]),
@ -1677,7 +1677,7 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point,
int ii = index.get_data1i();
if (ii != strip_cut_index) {
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()) {
min_point = first_vertex;
max_point = first_vertex;
@ -1693,7 +1693,7 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point,
continue;
}
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(min_point[1], vertex[1]),