Start making an actual road mesh

This commit is contained in:
sergeypdev 2025-01-03 01:11:39 +04:00
parent 72bd683900
commit 1815ab9ef2

View File

@ -296,7 +296,6 @@ draw :: proc() {
camera := game_camera_3d() camera := game_camera_3d()
{ {
rl.BeginMode3D(camera) rl.BeginMode3D(camera)
defer rl.EndMode3D() defer rl.EndMode3D()
@ -311,19 +310,35 @@ draw :: proc() {
points := &g_mem.track.points points := &g_mem.track.points
points_len := len(points) points_len := len(points)
// road: rl.Mesh
// defer rl.UnloadMesh(road)
// road_vertices: [dynamic]f32
// road_normals: [dynamic]f32
// road_uvs: [dynamic]f32
// road_indices: [dynamic]u16
// road_vertices.allocator = context.temp_allocator
// road_normals.allocator = context.temp_allocator
// road_uvs.allocator = context.temp_allocator
// road_indices.allocator = context.temp_allocator
// spline_segment_count := max(len(g_mem.track.points) - 4, 0)
SPLINE_SUBDIVS_U :: 4
SPLINE_SUBDIVS_V :: 8
ROAD_WIDTH :: 2.0
{ {
rlgl.Begin(rlgl.LINES) rlgl.Begin(rlgl.LINES)
defer rlgl.End() defer rlgl.End()
rlgl.Color3f(1, 0, 0) rlgl.Color3f(1, 0, 0)
SPLINE_SUBDIVS :: 8
for i in 0 ..< points_len { for i in 0 ..< points_len {
if i >= 1 && i < points_len - 2 { if i >= 1 && i < points_len - 2 {
for j in 0 ..< SPLINE_SUBDIVS { for v in 0 ..< SPLINE_SUBDIVS_V {
t := f32(j) / f32(SPLINE_SUBDIVS) t := f32(v) / f32(SPLINE_SUBDIVS_V)
t2 := f32(j + 1) / f32(SPLINE_SUBDIVS) t2 := f32(v + 1) / f32(SPLINE_SUBDIVS_V)
point := linalg.catmull_rom( point := linalg.catmull_rom(
points[i - 1], points[i - 1],
points[i], points[i],
@ -339,6 +354,23 @@ draw :: proc() {
t2, t2,
) )
tangent := linalg.normalize0(point2 - point)
right := -linalg.cross(tangent, rl.Vector3{0, 1, 0})
// normal := linalg.cross(tangent, right)
for u in 0 ..< SPLINE_SUBDIVS_U {
offset := f32(u) / f32(SPLINE_SUBDIVS_U)
offset = offset * 2 - 1
offset2 := f32(u + 1) / f32(SPLINE_SUBDIVS_U)
offset2 = offset2 * 2 - 1
p1 := point + offset * right
p2 := point + offset2 * right
rlgl.Vertex3f(p1.x, p1.y, p1.z)
rlgl.Vertex3f(p2.x, p2.y, p2.z)
}
rlgl.Vertex3f(point.x, point.y, point.z) rlgl.Vertex3f(point.x, point.y, point.z)
rlgl.Vertex3f(point2.x, point2.y, point2.z) rlgl.Vertex3f(point2.x, point2.y, point2.z)
} }