2024-07-26 21:32:20 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"math"
|
|
|
|
)
|
|
|
|
|
|
|
|
func Bresenham2(fb *Framebuffer, color uint, x0 int, y0 int, x1 int, y1 int) {
|
|
|
|
dx := int(math.Abs(float64(x1 - x0)))
|
|
|
|
sx := -1
|
|
|
|
if x0 < x1 {
|
|
|
|
sx = 1
|
|
|
|
}
|
|
|
|
dy := -int(math.Abs(float64(y1 - y0)))
|
|
|
|
sy := -1
|
|
|
|
if y0 < y1 {
|
|
|
|
sy = 1
|
|
|
|
}
|
|
|
|
err := dx + dy
|
|
|
|
|
|
|
|
for {
|
|
|
|
fb.SetSafe(uint(x0), uint(y0), color)
|
|
|
|
if x0 == x1 && y0 == y1 {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
e2 := 2 * err
|
|
|
|
if e2 >= dy {
|
|
|
|
if x0 == x1 {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
err += dy
|
|
|
|
x0 += sx
|
|
|
|
}
|
|
|
|
if e2 <= dx {
|
|
|
|
if y0 == y1 {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
err += dx
|
|
|
|
y0 += sy
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-26 21:48:47 +00:00
|
|
|
func line(fb *Framebuffer, color uint, v0 Vec2i, v1 Vec2i) {
|
|
|
|
Bresenham2(fb, color, v0.X, v0.Y, v1.X, v1.Y)
|
|
|
|
}
|
|
|
|
|
|
|
|
func Triangle1(fb *Framebuffer, color uint, v0 Vec2i, v1 Vec2i, v2 Vec2i) {
|
|
|
|
line(fb, color, v0, v1)
|
|
|
|
line(fb, color, v1, v2)
|
|
|
|
line(fb, color, v2, v0)
|
2024-07-26 21:32:20 +00:00
|
|
|
}
|