Skip to content

Commit

Permalink
Add basic UV mapping to Trail3D
Browse files Browse the repository at this point in the history
Add basic UV mapping to Trail3D
Firepal authored May 1, 2021
1 parent 8ddbcab commit 5893778
Showing 3 changed files with 30 additions and 1 deletion.
10 changes: 10 additions & 0 deletions addons/godot-next-cs/3d/Trail3D.cs
Original file line number Diff line number Diff line change
@@ -110,15 +110,23 @@ public void RenderTrail()
{
var cur = verts[j];
var nxt = verts[j + 1];
// 1.0 added to avoid division by zero
float uv = (j + 1.0f) / (verts.Count + 1);
float uvnxt = (j + 2.0f) / (verts.Count + 1);
for (int i = 0; i < densityAround; i++)
{
var nxtI = (i + 1) % densityAround;
//order added affects normal
SetUv(new Vector2(uv, 0f));
AddVertex(cur[i]);
AddVertex(cur[nxtI]);
SetUv(new Vector2(uvnxt, 0f));
AddVertex(nxt[i]);
SetUv(new Vector2(uv, 0f));
AddVertex(cur[nxtI]);
SetUv(new Vector2(uvnxt, 0f));
AddVertex(nxt[nxtI]);
SetUv(new Vector2(uvnxt, 0f));
AddVertex(nxt[i]);
}
}
@@ -127,6 +135,7 @@ public void RenderTrail()
for (int i = 0; i < densityAround; i++)
{
var nxt = (i + 1) % densityAround;
SetUv(Vector2.Zero);
AddVertex(verts[0][i]);
AddVertex(Vector3.Zero);
AddVertex(verts[0][nxt]);
@@ -135,6 +144,7 @@ public void RenderTrail()
for (int i = 0; i < densityAround; i++)
{
var nxt = (i + 1) % densityAround;
SetUv(new Vector2(1f, 0f));
AddVertex(verts[verts.Count - 1][i]);
AddVertex(verts[verts.Count - 1][nxt]);
AddVertex(lastP);
8 changes: 8 additions & 0 deletions addons/godot-next/3d/trail_3d.gd
Original file line number Diff line number Diff line change
@@ -96,27 +96,35 @@ func render_trail():
for j in range(len(verts) - 1):
var cur = verts[j]
var nxt = verts[j + 1]
var uv = (j + 1.0) / (len(verts) + 1);
var uvnxt = (j + 2.0) / (len(verts) + 1);
for i in range(density_around):
var nxt_i = (i + 1) % density_around
# Order added affects normal.
set_uv(Vector2(uv, 0.0))
add_vertex(cur[i])
add_vertex(cur[nxt_i])
set_uv(Vector2(uvnxt, 0.0))
add_vertex(nxt[i])
set_uv(Vector2(uv, 0.0))
add_vertex(cur[nxt_i])
set_uv(Vector2(uvnxt, 0.0))
add_vertex(nxt[nxt_i])
add_vertex(nxt[i])

if verts.size() > 1:
# Cap off top.
for i in range(density_around):
var nxt = (i + 1) % density_around
set_uv(Vector2(0, 0))
add_vertex(verts[0][i])
add_vertex(Vector3())
add_vertex(verts[0][nxt])

# Cap off bottom.
for i in range(density_around):
var nxt = (i + 1) % density_around
set_uv(Vector2(1, 0))
add_vertex(verts[verts.size() - 1][i])
add_vertex(verts[verts.size() - 1][nxt])
add_vertex(last_p)
13 changes: 12 additions & 1 deletion demo/demo_3d.tscn
Original file line number Diff line number Diff line change
@@ -1,16 +1,27 @@
[gd_scene load_steps=5 format=2]
[gd_scene load_steps=8 format=2]

[ext_resource path="res://addons/godot-next/3d/trail_3d.gd" type="Script" id=1]
[ext_resource path="res://demo/scripts/wandering_node_3d.gd" type="Script" id=2]
[ext_resource path="res://addons/godot-next/3d/vector_display_3d.gd" type="Script" id=3]
[ext_resource path="res://demo/scripts/test_vector_display.gd" type="Script" id=4]

[sub_resource type="Gradient" id=1]
colors = PoolColorArray( 0, 0.25, 1, 1, 0, 0, 0, 1 )

[sub_resource type="GradientTexture" id=2]
gradient = SubResource( 1 )

[sub_resource type="SpatialMaterial" id=3]
flags_unshaded = true
albedo_texture = SubResource( 2 )

[node name="Demo3D" type="Spatial"]

[node name="WanderingNode3D" type="Spatial" parent="."]
script = ExtResource( 2 )

[node name="Trail3D" type="ImmediateGeometry" parent="WanderingNode3D"]
material_override = SubResource( 3 )
script = ExtResource( 1 )
length = 5.0
max_radius = 0.25

0 comments on commit 5893778

Please sign in to comment.