forked from AbleOS/ableos
Cube work
This commit is contained in:
parent
e6b972a7f3
commit
a95f1b5a4b
|
@ -44,7 +44,7 @@ put_line := mode.put_line
|
|||
clear := mode.clear
|
||||
put_surface := mode.put_surface
|
||||
put_scaled := mode.put_scaled
|
||||
put_tri_wireframe := mode.put_tri_wireframe
|
||||
put_tri := mode.put_tri
|
||||
put_filled_tri := mode.put_filled_tri
|
||||
// thanks peony for these three!
|
||||
put_trirect := mode.put_trirect
|
||||
|
|
|
@ -358,7 +358,7 @@ put_filled_tri := fn(surface: Surface, p0: Vec2(uint), p1: Vec2(uint), p2: Vec2(
|
|||
primary_dx := @as(int, @bitcast(p2.x - p0.x))
|
||||
primary_dy := @as(int, @bitcast(p2.y - p0.y))
|
||||
primary_x := p0.x
|
||||
primary_step := primary_dx / primary_dy
|
||||
primary_step := @as(int, primary_dx) / @as(int, primary_dy)
|
||||
primary_error := @as(int, 2) * primary_dx - primary_dy
|
||||
|
||||
secondary_dx := @as(int, @bitcast(p1.x - p0.x))
|
||||
|
|
|
@ -1,11 +1,68 @@
|
|||
.{Vec2} := @use("../../../../libraries/stn/src/lib.hb").math
|
||||
.{Vec2} := @use("../../../../libraries/stn/src/lib.hb").math;
|
||||
.{log, string, memory} := @use("../../../../libraries/stn/src/lib.hb");
|
||||
.{Color, Surface} := @use("../../../../libraries/render/src/lib.hb")
|
||||
render := @use("../../../../libraries/render/src/lib.hb")
|
||||
|
||||
Face := struct {a: uint, b: uint, c: uint, mode: u8, color: Color, texture: ^Surface}
|
||||
WIREFRAME := @as(u8, 0)
|
||||
FILLED := @as(u8, 1)
|
||||
TEXTURED := @as(u8, 2)
|
||||
|
||||
Vec3 := struct {x: int, y: int, z: int}
|
||||
|
||||
vertecies := [Vec3].(.(-1, -1, -1), .(1, -1, -1), .(1, 1, -1), .(-1, 1, -1), .(-1, -1, 1), .(1, -1, 1), .(1, 1, 1), .(-1, 1, 1))
|
||||
projected := @as([Vec3; 8], idk)
|
||||
|
||||
faces := [Face].(Face.(0, 1, 2, WIREFRAME, .(255, 0, 0, 255), @as(^Surface, idk)))
|
||||
|
||||
d := @as(int, 1)
|
||||
|
||||
example := fn(): void {
|
||||
screen := render.init(true)
|
||||
|
||||
unit := @as(int, 0)
|
||||
half_width := @as(int, @intcast(screen.width / 2))
|
||||
half_height := @as(int, @intcast(screen.height / 2))
|
||||
if screen.width < screen.height {
|
||||
unit = @intcast(half_width / 2)
|
||||
} else {
|
||||
unit = @intcast(half_height / 2)
|
||||
}
|
||||
|
||||
format_page := @as([u8; 1024], idk)
|
||||
loop {
|
||||
index := 0
|
||||
loop if index == 8 break else {
|
||||
vertex := vertecies[index]
|
||||
vertex = .(vertex.x * unit, vertex.y * unit, vertex.z * unit + unit)
|
||||
|
||||
vertex = .(vertex.x * d / (vertex.z / unit + d) + half_width, vertex.y * d / (vertex.z / unit + d) + half_height, vertex.z)
|
||||
projected[index] = vertex
|
||||
|
||||
log.info(string.display_int(vertex.x, @bitcast(&format_page), 10))
|
||||
log.info(string.display_int(vertex.y, @bitcast(&format_page), 10))
|
||||
|
||||
index += 1
|
||||
}
|
||||
|
||||
index = 0
|
||||
render.clear(screen, render.black)
|
||||
render.put_filled_tri(screen, .(128, 256), .(512, 512), .(10, 10), .(255, 255, 255, 255))
|
||||
loop if index == 1 break else {
|
||||
face := faces[index]
|
||||
|
||||
a := projected[face.a]
|
||||
b := projected[face.b]
|
||||
c := projected[face.c]
|
||||
|
||||
if face.mode == WIREFRAME {
|
||||
render.put_tri(screen, .(@intcast(a.x), @intcast(a.y)), .(@intcast(b.x), @intcast(b.y)), .(@intcast(c.x), @intcast(c.y)), face.color)
|
||||
}
|
||||
|
||||
index += 1
|
||||
}
|
||||
|
||||
|
||||
//render.put_filled_tri(screen, .(128, 256), .(512, 512), .(10, 10), .(255, 255, 255, 255))
|
||||
render.sync(screen)
|
||||
}
|
||||
return
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
.{example} := @use("./examples/gravity.hb")
|
||||
.{example} := @use("./examples/cube.hb")
|
||||
|
||||
main := example
|
Loading…
Reference in a new issue