Just continuation of making circle, keep adding to it different things with help of forum, and this is came back as I tried to add indices 
code @normalized
extends MeshInstance3D
func _ready() -> void:
var surface_array = []
surface_array.resize(Mesh.ARRAY_MAX)
var my_vertices = PackedVector3Array()
var my_uvs = PackedVector2Array()
var my_normals = PackedVector3Array()
var my_indices = PackedInt32Array()
var current_indices_iteration = 0
var point := Vector3.RIGHT
var steps := 32
var angle_step := TAU / steps
for i in steps:
my_vertices.append(point)
point = point.rotated(Vector3.UP, angle_step)
my_uvs.append(Vector2(0,0))
my_normals.append(Vector3.UP)
my_vertices.append(my_vertices.get(0) + my_vertices.get(steps/2))
my_uvs.append(Vector2(0,0))
my_normals.append(Vector3.UP)
for n in steps:
var a = steps
var b = 1
var c = 2
my_indices.append(a)
my_indices.append(c +current_indices_iteration)
my_indices.append(b +current_indices_iteration)
current_indices_iteration += 1
surface_array[Mesh.ARRAY_VERTEX] = my_vertices
surface_array[Mesh.ARRAY_TEX_UV] = my_uvs
surface_array[Mesh.ARRAY_NORMAL] = my_normals
surface_array[Mesh.ARRAY_INDEX] = my_indices
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)
actually it was change a = steps to a = 0
You can do it in one loop:
extends MeshInstance3D
func _ready():
mesh = ArrayMesh.new()
var arrays := []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = PackedVector3Array()
arrays[Mesh.ARRAY_INDEX] = PackedInt32Array()
var steps := 32
var angle_step := TAU / steps
arrays[Mesh.ARRAY_VERTEX].push_back(Vector3.ZERO)
for i in steps + 1:
arrays[Mesh.ARRAY_VERTEX].push_back(Vector3.RIGHT.rotated(Vector3.UP, angle_step * i))
arrays[Mesh.ARRAY_INDEX].append_array([0, i, i+1])
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
1 Like
I see that looks a cool - way less lines
, how about UV and normals ? if I want add like random colors to make it a bit of challenge ?
{ reversing it back to shaded )
For this type of color treatment you don’t really need shading. You can use vertex color array and set the material to use vertex colors as albedo.
1 Like
extends MeshInstance3D
func _ready():
mesh = ArrayMesh.new()
var arrays := []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = PackedVector3Array()
arrays[Mesh.ARRAY_COLOR] = PackedColorArray()
var steps := 16
var angle_step := TAU / steps
for i in steps + 1:
arrays[Mesh.ARRAY_VERTEX].push_back(Vector3.ZERO)
arrays[Mesh.ARRAY_VERTEX].push_back(Vector3.RIGHT.rotated(Vector3.UP, angle_step * i))
arrays[Mesh.ARRAY_VERTEX].push_back(Vector3.RIGHT.rotated(Vector3.UP, angle_step * (i + 1)))
var color := Color.from_hsv(randf(), 0.8, randf())
arrays[Mesh.ARRAY_COLOR].append_array([color, color, color])
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
I’m leaving the gaps implementation to you 
1 Like
is this correct thing I’m looking at ?
I know how to set vertex to use as albedo , but never used array of colors
,
wow you just posted it 
if you check it with "Overide in-game Camera " you notice clipping .
So print size of array with color return
print(arrays[Mesh.ARRAY_COLOR].size())
on steps 8 - 27 ( 27/3 = 9 ) so one is overlaps
easy fix 
12 -
for i in steps:
this was results in other code , god know what I changed there to get this
this was my attempt
extends MeshInstance3D
func _ready() -> void:
var surface_array = []
surface_array.resize(Mesh.ARRAY_MAX)
var my_vertices = PackedVector3Array()
var my_uvs = PackedVector2Array()
var my_normals = PackedVector3Array()
var my_indices = PackedInt32Array()
var my_colors = PackedColorArray()
var current_indices_iteration = 0
var point := Vector3.RIGHT
var steps := 32
var angle_step := TAU / steps
for i in steps:
my_vertices.append(point)
point = point.rotated(Vector3.UP, angle_step)
my_uvs.append(Vector2(0,0))
my_normals.append(Vector3.UP)
var color := Color.from_hsv(randf(), 0.8, randf())
my_colors.append(color)
my_vertices.append(my_vertices.get(0) + my_vertices.get(steps/2))
my_uvs.append(Vector2(0,0))
my_normals.append(Vector3.UP)
var color := Color.from_hsv(randf(), 0.8, randf())
my_colors.append(color)
for n in steps:
var a = 0
var b = 1
var c = 2
my_indices.append(a)
my_indices.append(c +current_indices_iteration)
my_indices.append(b +current_indices_iteration)
current_indices_iteration += 1
surface_array[Mesh.ARRAY_VERTEX] = my_vertices
surface_array[Mesh.ARRAY_TEX_UV] = my_uvs
surface_array[Mesh.ARRAY_NORMAL] = my_normals
surface_array[Mesh.ARRAY_INDEX] = my_indices
surface_array[Mesh.ARRAY_COLOR] = my_colors
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)
print(my_colors)
2 Likes
@normalized thanks a lot with help and guidance on this topic 
Once I’m back on PC will try figure out what’s wrong in code ( the long version )
And tym aiming to so this shape of overlaping circles to create to flower patterns inside crossing centre .
It’s basically r applied around circle as origin for new circle , will be interesting to figure out this simple geometry .
Ok gaps implemented maybe a bit obscure condition but it’s working
- purpose was occupy two vertices with same color instead of two random
extends MeshInstance3D
func _ready():
var arrays := []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = PackedVector3Array()
arrays[Mesh.ARRAY_COLOR] = PackedColorArray()
var steps := 16
var angle_step := TAU / steps
for i in steps:
arrays[Mesh.ARRAY_VERTEX].push_back(Vector3.ZERO)
arrays[Mesh.ARRAY_VERTEX].push_back(Vector3.LEFT.rotated(Vector3.UP, angle_step * i))
arrays[Mesh.ARRAY_VERTEX].push_back(Vector3.LEFT.rotated(Vector3.UP, angle_step * (i + 1)))
if i%3 == 0:
var color := Color.WHITE
arrays[Mesh.ARRAY_COLOR].append_array([color, color, color])
elif i%2 == 0:
var color := Color.from_hsv(randf(), 0.8, randf())
arrays[Mesh.ARRAY_COLOR].append_array([color, color, color])
arrays[Mesh.ARRAY_COLOR].append_array([color, color, color])
elif i%1 == 0 and i%3 != 0:
pass
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
with steps 18 it looks a even as multiplier or 3
1 Like