Fix line issues
This commit is contained in:
parent
4b09b01617
commit
9a4ba6be67
@ -44,9 +44,9 @@ func main() {
|
|||||||
|
|
||||||
// Just draw a simple line (a million times or something)
|
// Just draw a simple line (a million times or something)
|
||||||
for range LineRepeat {
|
for range LineRepeat {
|
||||||
LineDumb3(&fb, 0xFFFFFF, 100, 100, 350, 200)
|
LineDumb4(&fb, 0xFFFFFF, 100, 100, 350, 200)
|
||||||
LineDumb3(&fb, 0xFF0000, 120, 100, 200, 350)
|
LineDumb4(&fb, 0xFF0000, 120, 100, 200, 350)
|
||||||
LineDumb3(&fb, 0xFF0000, 350, 200, 100, 100) // backward first line
|
LineDumb4(&fb, 0xFF0000, 350, 200, 100, 100) // backward first line
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Exporting ppm to stdout")
|
log.Printf("Exporting ppm to stdout")
|
||||||
|
@ -50,3 +50,45 @@ func LineDumb3(fb *Framebuffer, color uint, x0 int, y0 int, x1 int, y1 int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func LineDumb4(fb *Framebuffer, color uint, x0 int, y0 int, x1 int, y1 int) {
|
||||||
|
steep := false
|
||||||
|
// This one makes sure that going pixel by pixel will not make holes in the
|
||||||
|
// other direction by always moving in the less steep direction.
|
||||||
|
if math.Abs(float64(x1-x0)) < math.Abs(float64(y1-y0)) {
|
||||||
|
x0, y0 = y0, x0
|
||||||
|
x1, y1 = y1, x1
|
||||||
|
steep = true
|
||||||
|
}
|
||||||
|
// Don't let lines be invisible, always go left to right
|
||||||
|
if x0 > x1 { // need to be left to right
|
||||||
|
x0, x1 = x1, x0
|
||||||
|
y0, y1 = y1, y0 // Why are we swapping these? I guess because we're swapping the points...
|
||||||
|
}
|
||||||
|
dx := x1 - x0 // These MUST be POST calcs
|
||||||
|
dy := y1 - y0
|
||||||
|
// Delta error or something? Basically, as we move in one direction, we get farther
|
||||||
|
// and farther off course if we never move in the OTHER direction. This is the amount
|
||||||
|
// of that per x direction.
|
||||||
|
derror := math.Abs(float64(dy) / float64(dx))
|
||||||
|
y := uint(y0)
|
||||||
|
var err float64
|
||||||
|
// Same as dumb2, going across pixel by pixel. But "x" here might actually be y
|
||||||
|
// because of the inverted direction
|
||||||
|
for x := x0; x <= x1; x++ {
|
||||||
|
if steep {
|
||||||
|
fb.Set(y, uint(x), color)
|
||||||
|
} else {
|
||||||
|
fb.Set(uint(x), y, color)
|
||||||
|
}
|
||||||
|
err += derror
|
||||||
|
if err > 0.5 {
|
||||||
|
if y1 > y0 {
|
||||||
|
y += 1
|
||||||
|
} else {
|
||||||
|
y = y - 1
|
||||||
|
}
|
||||||
|
err -= 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ $# -ne 1 ]; then
|
||||||
|
echo "You must pass the basename for the .prof and .ppm"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Building"
|
echo "Building"
|
||||||
go build
|
go build
|
||||||
echo "Running"
|
echo "Running"
|
||||||
./tinyrender1 "$@" > image.ppm
|
./tinyrender1 "-cpuprofile=$1.prof" >"$1.ppm"
|
||||||
|
Loading…
Reference in New Issue
Block a user