mirror of
https://github.com/Relintai/broken_seals.git
synced 2025-02-08 14:50:05 +01:00
Bit more work on uv unwrapping.
This commit is contained in:
parent
a6caaadb38
commit
626b02dc94
@ -26,9 +26,25 @@ func _draw():
|
|||||||
|
|
||||||
if indices.size() % 3 == 0:
|
if indices.size() % 3 == 0:
|
||||||
for i in range(0, len(indices), 3):
|
for i in range(0, len(indices), 3):
|
||||||
draw_line(uvs[indices[i]] * get_size(), uvs[indices[i + 1]] * get_size(), Color(1, 1, 1, 1), 1, false)
|
var c : Color = Color(1, 1, 1, 1)
|
||||||
draw_line(uvs[indices[i + 1]] * get_size(), uvs[indices[i + 2]] * get_size(), Color(1, 1, 1, 1), 1, false)
|
|
||||||
draw_line(uvs[indices[i + 2]] * get_size(), uvs[indices[i]] * get_size(), Color(1, 1, 1, 1), 1, false)
|
|
||||||
|
|
||||||
|
if uvs[indices[i]].is_equal_approx(Vector2()) || uvs[indices[i + 1]].is_equal_approx(Vector2()):
|
||||||
|
c = Color(1, 0, 0, 1)
|
||||||
|
else:
|
||||||
|
c = Color(1, 1, 1, 1)
|
||||||
|
|
||||||
|
draw_line(uvs[indices[i]] * get_size(), uvs[indices[i + 1]] * get_size(), c, 1, false)
|
||||||
|
|
||||||
|
if uvs[indices[i + 1]].is_equal_approx(Vector2()) || uvs[indices[i + 2]].is_equal_approx(Vector2()):
|
||||||
|
c = Color(1, 0, 0, 1)
|
||||||
|
else:
|
||||||
|
c = Color(1, 1, 1, 1)
|
||||||
|
|
||||||
|
draw_line(uvs[indices[i + 1]] * get_size(), uvs[indices[i + 2]] * get_size(), c, 1, false)
|
||||||
|
|
||||||
|
if uvs[indices[i + 2]].is_equal_approx(Vector2()) || uvs[indices[i]].is_equal_approx(Vector2()):
|
||||||
|
c = Color(1, 0, 0, 1)
|
||||||
|
else:
|
||||||
|
c = Color(1, 1, 1, 1)
|
||||||
|
|
||||||
|
draw_line(uvs[indices[i + 2]] * get_size(), uvs[indices[i]] * get_size(), c, 1, false)
|
||||||
|
@ -312,6 +312,9 @@ class SMesh:
|
|||||||
|
|
||||||
processed_calc_uvs.resize(vertices.size())
|
processed_calc_uvs.resize(vertices.size())
|
||||||
|
|
||||||
|
for i in range(processed_calc_uvs.size()):
|
||||||
|
processed_calc_uvs.set(i, Vector2())
|
||||||
|
|
||||||
var t = triangles[0]
|
var t = triangles[0]
|
||||||
|
|
||||||
#don't
|
#don't
|
||||||
@ -325,6 +328,8 @@ class SMesh:
|
|||||||
processed_calc_uvs[t.i2] = t.uv2
|
processed_calc_uvs[t.i2] = t.uv2
|
||||||
processed_calc_uvs[t.i3] = t.uv3
|
processed_calc_uvs[t.i3] = t.uv3
|
||||||
|
|
||||||
|
#print(str(t.uv1) + str(t.uv2) + str(t.uv3))
|
||||||
|
|
||||||
join_triangles(0)
|
join_triangles(0)
|
||||||
|
|
||||||
var count : int = 0
|
var count : int = 0
|
||||||
@ -350,36 +355,34 @@ class SMesh:
|
|||||||
processed_vertices[t.i1] = true
|
processed_vertices[t.i1] = true
|
||||||
|
|
||||||
processed_calc_uvs[t.i1] = transform_uv(t.vns2, t.vns3, t.vns1, processed_calc_uvs[t.i2], processed_calc_uvs[t.i3])
|
processed_calc_uvs[t.i1] = transform_uv(t.vns2, t.vns3, t.vns1, processed_calc_uvs[t.i2], processed_calc_uvs[t.i3])
|
||||||
|
#print(processed_calc_uvs[t.i1])
|
||||||
|
|
||||||
if !v2d:
|
if !v2d:
|
||||||
processed_vertices[t.i2] = true
|
processed_vertices[t.i2] = true
|
||||||
|
|
||||||
processed_calc_uvs[t.i2] = transform_uv(t.vns3, t.vns1, t.vns2, processed_calc_uvs[t.i3], processed_calc_uvs[t.i1])
|
processed_calc_uvs[t.i2] = transform_uv(t.vns1, t.vns3, t.vns2, processed_calc_uvs[t.i1], processed_calc_uvs[t.i3])
|
||||||
|
|
||||||
if !v3d:
|
if !v3d:
|
||||||
processed_vertices[t.i3] = true
|
processed_vertices[t.i3] = true
|
||||||
|
|
||||||
processed_calc_uvs[t.i3] = transform_uv(t.vns1, t.vns2, t.vns3, processed_calc_uvs[t.i1], processed_calc_uvs[t.i2])
|
# processed_calc_uvs[t.i3] = transform_uv(t.vns1, t.vns2, t.vns3, processed_calc_uvs[t.i1], processed_calc_uvs[t.i2])
|
||||||
|
|
||||||
join_triangles(t.neighbour_v1_v2)
|
join_triangles(t.neighbour_v1_v2)
|
||||||
join_triangles(t.neighbour_v2_v3)
|
join_triangles(t.neighbour_v2_v3)
|
||||||
join_triangles(t.neighbour_v1_v3)
|
join_triangles(t.neighbour_v1_v3)
|
||||||
|
|
||||||
func transform_uv(v1 : Vector2, v2 : Vector2, v3 : Vector2, vt1 : Vector2, vt2 : Vector2) -> Vector2:
|
func transform_uv(v1 : Vector2, v2 : Vector2, v3 : Vector2, vt1 : Vector2, vt2 : Vector2) -> Vector2:
|
||||||
if count == 2:
|
if count >= 2:
|
||||||
return Vector2()
|
return Vector2()
|
||||||
|
|
||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
var a : float = (v2 - v1).angle_to(v3 - v1)
|
var a : float = (v2 - v1).angle_to(v3 - v1)
|
||||||
var l : float = (v2 - v1).length()
|
var l : float = (v3 - v1).length()
|
||||||
|
|
||||||
var ret : Vector2 = (vt1 - vt2).normalized() * l
|
var ret : Vector2 = (vt2 - vt1).normalized() * l
|
||||||
|
|
||||||
var retr : Vector2 = ret.rotated(a)
|
var retr : Vector2 = ret.rotated(-a)
|
||||||
|
|
||||||
if overlaps(v1, v2, v3, retr, v3, v2):
|
|
||||||
retr = ret.rotated(-a)
|
|
||||||
|
|
||||||
return retr
|
return retr
|
||||||
|
|
||||||
@ -429,6 +432,8 @@ class SMesh:
|
|||||||
var uv_ymin : float = processed_calc_uvs[0].y
|
var uv_ymin : float = processed_calc_uvs[0].y
|
||||||
var uv_ymax : float = processed_calc_uvs[0].y
|
var uv_ymax : float = processed_calc_uvs[0].y
|
||||||
|
|
||||||
|
var incvec : Vector2 = Vector2()
|
||||||
|
|
||||||
for i in range(1, processed_calc_uvs.size()):
|
for i in range(1, processed_calc_uvs.size()):
|
||||||
var uv : Vector2 = processed_calc_uvs[i]
|
var uv : Vector2 = processed_calc_uvs[i]
|
||||||
|
|
||||||
@ -445,7 +450,7 @@ class SMesh:
|
|||||||
uv_ymax = uv.y
|
uv_ymax = uv.y
|
||||||
|
|
||||||
if uv_ymin < 0 || uv_xmin < 0:
|
if uv_ymin < 0 || uv_xmin < 0:
|
||||||
var incvec : Vector2 = Vector2()
|
|
||||||
|
|
||||||
if uv_xmin < 0:
|
if uv_xmin < 0:
|
||||||
incvec.x = -uv_xmin
|
incvec.x = -uv_xmin
|
||||||
@ -473,6 +478,17 @@ class SMesh:
|
|||||||
|
|
||||||
processed_calc_uvs[i] = v
|
processed_calc_uvs[i] = v
|
||||||
|
|
||||||
|
#debug
|
||||||
|
var z : Vector2 = Vector2(incvec.x, incvec.y)
|
||||||
|
|
||||||
|
z.x -= uv_xmin
|
||||||
|
z.y -= uv_ymin
|
||||||
|
z.x /= rx
|
||||||
|
z.y /= ry
|
||||||
|
|
||||||
|
for i in range(processed_calc_uvs.size()):
|
||||||
|
if processed_calc_uvs[i].is_equal_approx(z):
|
||||||
|
processed_calc_uvs[i] = Vector2()
|
||||||
|
|
||||||
func find_neighbour(current_index : int, i1 : int, i2 : int):
|
func find_neighbour(current_index : int, i1 : int, i2 : int):
|
||||||
for i in range(triangles.size()):
|
for i in range(triangles.size()):
|
||||||
|
Loading…
Reference in New Issue
Block a user