bresenham fix dx and dy equal 0
This commit is contained in:
parent
60ae492b0f
commit
45f75ea757
21
main.zig
21
main.zig
@ -140,7 +140,7 @@ fn fillBuffer() !void {
|
|||||||
defer allocator.free(buffer);
|
defer allocator.free(buffer);
|
||||||
|
|
||||||
var vec = Vec3{
|
var vec = Vec3{
|
||||||
.a = Point{ .x = 20, .y = 20, .z = 0, .direction = .{ .x = 1, .y = 1, .z = 1 } },
|
.a = Point{ .x = 20, .y = 30, .z = 0, .direction = .{ .x = 1, .y = 1, .z = 1 } },
|
||||||
.b = Point{ .x = 50, .y = 30, .z = 0, .direction = .{ .x = 1, .y = 1, .z = 1 } },
|
.b = Point{ .x = 50, .y = 30, .z = 0, .direction = .{ .x = 1, .y = 1, .z = 1 } },
|
||||||
.c = Point{ .x = 30, .y = 1, .z = 0, .direction = .{ .x = 1, .y = 1, .z = 1 } },
|
.c = Point{ .x = 30, .y = 1, .z = 0, .direction = .{ .x = 1, .y = 1, .z = 1 } },
|
||||||
};
|
};
|
||||||
@ -165,9 +165,8 @@ fn fillBuffer() !void {
|
|||||||
try triangle(buffer, w, vec);
|
try triangle(buffer, w, vec);
|
||||||
//_ = try bresenham(buffer, w, Point{ .x = 10, .y = 10, .z = 0 }, Point{ .x = 30, .y = 12, .z = 0 });
|
//_ = try bresenham(buffer, w, Point{ .x = 10, .y = 10, .z = 0 }, Point{ .x = 30, .y = 12, .z = 0 });
|
||||||
|
|
||||||
sleep(20000000);
|
|
||||||
|
|
||||||
try out.print("\x1B[2J", .{});
|
try out.print("\x1B[2J", .{});
|
||||||
|
//sleep(1000000);
|
||||||
|
|
||||||
try triangle(buffer, w, vec);
|
try triangle(buffer, w, vec);
|
||||||
bounce(w, &vec.a, 'x');
|
bounce(w, &vec.a, 'x');
|
||||||
@ -185,7 +184,7 @@ fn fillBuffer() !void {
|
|||||||
bounce(w, &vec2.c, 'x');
|
bounce(w, &vec2.c, 'x');
|
||||||
bounce(w, &vec2.c, 'y');
|
bounce(w, &vec2.c, 'y');
|
||||||
try out.print("{s}", .{buffer});
|
try out.print("{s}", .{buffer});
|
||||||
sleep(10000000);
|
sleep(30000000);
|
||||||
//_ = try stdin.readUntilDelimiterOrEof(&buf, '\n');
|
//_ = try stdin.readUntilDelimiterOrEof(&buf, '\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -253,7 +252,7 @@ fn bresenham(buf: []u8, w: Winsize, p1: Point, p2: Point) !void {
|
|||||||
er -= dx;
|
er -= dx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (dx < dy and dy > 0 and dx > 0) {
|
} else if (dx <= dy and dy >= 0 and dx >= 0) {
|
||||||
while (y <= p2.y) : (y += 1) {
|
while (y <= p2.y) : (y += 1) {
|
||||||
_ = try pixel(buf, w, x, y, '█');
|
_ = try pixel(buf, w, x, y, '█');
|
||||||
er += dx;
|
er += dx;
|
||||||
@ -262,7 +261,7 @@ fn bresenham(buf: []u8, w: Winsize, p1: Point, p2: Point) !void {
|
|||||||
er -= dy;
|
er -= dy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (@abs(dy) < dx and dy < 0 and dx > 0) {
|
} else if (@abs(dy) <= dx and dy <= 0 and dx >= 0) {
|
||||||
while (x <= p2.x) : (x += 1) {
|
while (x <= p2.x) : (x += 1) {
|
||||||
_ = try pixel(buf, w, x, y, '█');
|
_ = try pixel(buf, w, x, y, '█');
|
||||||
er -= dy;
|
er -= dy;
|
||||||
@ -271,7 +270,7 @@ fn bresenham(buf: []u8, w: Winsize, p1: Point, p2: Point) !void {
|
|||||||
er -= dx;
|
er -= dx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (@abs(dy) > dx and dy < 0 and dx > 0) {
|
} else if (@abs(dy) >= dx and dy <= 0 and dx >= 0) {
|
||||||
while (y >= p2.y) : (y -= 1) {
|
while (y >= p2.y) : (y -= 1) {
|
||||||
_ = try pixel(buf, w, x, y, '█');
|
_ = try pixel(buf, w, x, y, '█');
|
||||||
er += dx;
|
er += dx;
|
||||||
@ -280,7 +279,7 @@ fn bresenham(buf: []u8, w: Winsize, p1: Point, p2: Point) !void {
|
|||||||
er += dy;
|
er += dy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (@abs(dx) <= dy and dx < 0 and dy > 0) {
|
} else if (@abs(dx) <= dy and dx <= 0 and dy >= 0) {
|
||||||
while (y <= p2.y) : (y += 1) {
|
while (y <= p2.y) : (y += 1) {
|
||||||
_ = try pixel(buf, w, x, y, '█');
|
_ = try pixel(buf, w, x, y, '█');
|
||||||
er += @abs(dx);
|
er += @abs(dx);
|
||||||
@ -289,7 +288,7 @@ fn bresenham(buf: []u8, w: Winsize, p1: Point, p2: Point) !void {
|
|||||||
er -= dy;
|
er -= dy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (@abs(dx) > dy and dy > 0 and dx < 0) {
|
} else if (@abs(dx) >= dy and dy >= 0 and dx <= 0) {
|
||||||
while (x >= p2.x) : (x -= 1) {
|
while (x >= p2.x) : (x -= 1) {
|
||||||
_ = try pixel(buf, w, x, y, '█');
|
_ = try pixel(buf, w, x, y, '█');
|
||||||
er += dy;
|
er += dy;
|
||||||
@ -298,7 +297,7 @@ fn bresenham(buf: []u8, w: Winsize, p1: Point, p2: Point) !void {
|
|||||||
er -= @abs(dx);
|
er -= @abs(dx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (dx <= dy and dx < 0 and dy < 0) {
|
} else if (dx <= dy and dx <= 0 and dy <= 0) {
|
||||||
while (x >= p2.x) : (x -= 1) {
|
while (x >= p2.x) : (x -= 1) {
|
||||||
_ = try pixel(buf, w, x, y, '█');
|
_ = try pixel(buf, w, x, y, '█');
|
||||||
er += @abs(dy);
|
er += @abs(dy);
|
||||||
@ -307,7 +306,7 @@ fn bresenham(buf: []u8, w: Winsize, p1: Point, p2: Point) !void {
|
|||||||
er -= @abs(dx);
|
er -= @abs(dx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (dx > dy and dy < 0 and dx < 0) {
|
} else if (dx >= dy and dy <= 0 and dx <= 0) {
|
||||||
while (y >= p2.y) : (y -= 1) {
|
while (y >= p2.y) : (y -= 1) {
|
||||||
//print("x:{},y:{},er:{},dx:{},dy:{}\n", .{ x, y, er, dx, dy });
|
//print("x:{},y:{},er:{},dx:{},dy:{}\n", .{ x, y, er, dx, dy });
|
||||||
_ = try pixel(buf, w, x, y, '█');
|
_ = try pixel(buf, w, x, y, '█');
|
||||||
|
Loading…
Reference in New Issue
Block a user