72 uv1.x =
MapUV[0].x * tw;
73 uv1.y =
MapUV[0].y * th;
74 uv2.x =
MapUV[1].x * tw;
75 uv2.y =
MapUV[1].y * th;
76 uv3.x =
MapUV[2].x * tw;
77 uv3.y =
MapUV[2].y * th;
80 Real m11, m12, m21, m22;
87 Real det = m11 * m22 - m12 * m21;
90 return ReportError(
"ComputeTextureMap: Bad UV coordinates");
94 Real inv_det = 1 / (m11 * m22 - m12 * m21);
95 Real tmp1, tmp2, tmp3, tmp4;
101 m11 = tmp4 * inv_det;
102 m12 = -tmp2 * inv_det;
103 m21 = -tmp3 * inv_det;
104 m22 = tmp1 * inv_det;
112 pl =
Vector2(m11 * v.x + m12 * v.y, m21 * v.x + m22 * v.y);
113 po = p1 + pl.x * (p2 - p1) + pl.y * (p3 - p1);
118 pl =
Vector2(m11 * v.x + m12 * v.y, m21 * v.x + m22 * v.y);
119 pu = p1 + pl.x * (p2 - p1) + pl.y * (p3 - p1);
124 pl =
Vector2(m11 * v.x + m12 * v.y, m21 * v.x + m22 * v.y);
125 pv = p1 + pl.x * (p2 - p1) + pl.y * (p3 - p1);
131 Real len1f = sqrt(len1.x * len1.x + len1.y * len1.y + len1.z * len1.z);
132 Real len2f = sqrt(len2.x * len2.x + len2.y * len2.y + len2.z * len2.z);
157 Real d = v_orig.squaredDistance(v1);
159 Real invl1 = 1 / sqrt(d);
161 d = v_orig.squaredDistance(v2);
163 Real invl2 = (d) ? 1 / sqrt(d) : 0;
165 Vector3 v_u = (v1 - v_orig) * len1 * invl1;
166 Vector3 v_v = (v2 - v_orig) * len2 * invl2;
167 Vector3 v_w = v_u.crossProduct(v_v);
181 Real det = m.Determinant();
235 m = m.Inverse(1e-10f);
250 poly1.reserve(orig.size());
251 poly2.reserve(orig.size());
254 Real sideA = 0, sideB = 0;
255 Vector3 ptA = orig[orig.size() - 1];
258 sideA = ptA.x - value;
260 sideA = ptA.y - value;
262 sideA = ptA.z - value;
267 for (
int i = -1; ++i < (int)orig.size();)
271 sideB = ptB.x - value;
273 sideB = ptB.y - value;
275 sideB = ptB.z - value;
293 sect = -(ptA.x - value) / v.x;
295 sect = -(ptA.y - value) / v.y;
297 sect = -(ptA.z - value) / v.z;
300 poly1.emplace_back(v);
301 poly2.emplace_back(v);
304 poly2.emplace_back(ptB);
319 sect = -(ptA.x - value) / v.x;
321 sect = -(ptA.y - value) / v.y;
323 sect = -(ptA.z - value) / v.z;
326 poly1.emplace_back(v);
327 poly2.emplace_back(v);
330 poly1.emplace_back(ptB);
334 poly1.emplace_back(ptB);
335 poly2.emplace_back(ptB);
352 float x1, y1, z1, x, y, z;
354 i1 = vertices.size() - 1;
355 x1 = (float)vertices[i1].x;
356 y1 = (float)vertices[i1].y;
357 z1 = (float)vertices[i1].z;
358 for (i = 0; i < vertices.size(); i++)
360 x = (float)vertices[i].x;
361 y = (float)vertices[i].y;
362 z = (float)vertices[i].z;
363 ayz += (z1 + z) * (y - y1);
364 azx += (x1 + x) * (z - z1);
365 axy += (y1 + y) * (x - x1);
371 float sqd = ayz * ayz + azx * azx + axy * axy;
376 invd = 1.0f / sqrt(sqd);
381 D = -norm.x * vertices[0].x - norm.y * vertices[0].y - norm.z * vertices[0].z;
482 Real denom =
plane.normal.x * (end.x - start.x) +
483 plane.normal.y * (end.y - start.y) +
484 plane.normal.z * (end.z - start.z);
490 plane.normal.y * start.y +
491 plane.normal.z * start.z +
493 Real r = num / denom;
501 isect.x = r * (end.x - start.x) + start.x;
502 isect.y = r * (end.y - start.y) + start.y;
503 isect.z = r * (end.z - start.z) + start.z;
506 if (r < 0 /*-SMALL_EPSILON*/ || r > 1)
509 normal =
plane.normal;
bool ComputeTextureSpace(Matrix3 &m, Vector3 &v, const Vector3 &v_orig, const Vector3 &v1, Real len1, const Vector3 &v2, Real len2)
bool ComputeTextureMap(Matrix3 &t_matrix, Vector3 &t_vector, PolyArray &vertices, const Vector3 &p1, const Vector3 &p2, const Vector3 &p3, Real tw, Real th)
std::vector< Vector2 > MapUV