fake 3d
This commit is contained in:
107
src/main.jai
107
src/main.jai
@@ -4,73 +4,29 @@ main :: () {
|
||||
w, h := get_console_size();
|
||||
init_screen(screen, w, h);
|
||||
|
||||
i := 0;
|
||||
j := 0;
|
||||
offset := 0;
|
||||
theta := 0;
|
||||
increase := true;
|
||||
while true {
|
||||
j += 1;
|
||||
theta += 1;
|
||||
|
||||
if i == 0 {
|
||||
increase = true;
|
||||
}
|
||||
|
||||
if i == 100 {
|
||||
increase = false;
|
||||
}
|
||||
if offset == 0 then increase = true;
|
||||
if offset == 100 then increase = false;
|
||||
|
||||
if increase {
|
||||
i += 1;
|
||||
offset += 1;
|
||||
} else {
|
||||
i -= 1;
|
||||
offset -= 1;
|
||||
}
|
||||
|
||||
fill_entire_screen(screen, BLANK_PIXEL);
|
||||
|
||||
t1 := Triangle.{
|
||||
.{30 - i, 20},
|
||||
.{95, 10 - (i / 2)},
|
||||
.{90 + i, 40},
|
||||
};
|
||||
cool_demo_1(screen, offset, theta);
|
||||
|
||||
scale(0.01 * i, *t1);
|
||||
draw_triangle(screen, t1, #char "%");
|
||||
|
||||
scale(0.02 * i, *t1);
|
||||
draw_triangle(screen, t1, #char "%");
|
||||
|
||||
scale(0.03 * i, *t1);
|
||||
draw_triangle(screen, t1, #char "%");
|
||||
|
||||
t2 := Triangle.{
|
||||
.{100, 30},
|
||||
.{140, 30},
|
||||
.{120, 20},
|
||||
};
|
||||
|
||||
rotate(*t2, get_triangle_centroid(t2), -j);
|
||||
|
||||
draw_triangle(screen, t2);
|
||||
|
||||
q1 := make_quad_from_rect(
|
||||
.{100, 10},
|
||||
.{110, 20}
|
||||
);
|
||||
|
||||
rotate(*q1, .{100, 10}, j);
|
||||
|
||||
draw_quad(screen, q1, #char "-");
|
||||
annoying_color_effect(screen, offset);
|
||||
|
||||
draw_text(screen, .{10, 10}, "[ TEXT-BASED RENDERING DEMO ]");
|
||||
|
||||
|
||||
if i % 3 == 0 {
|
||||
set_console_color(.RED);
|
||||
} else if i % 5 == 0 {
|
||||
set_console_color(.GREEN);
|
||||
} else {
|
||||
set_console_color(.BLUE, .BOLD);
|
||||
}
|
||||
|
||||
swap_buffer(screen);
|
||||
sleep_milliseconds(20);
|
||||
|
||||
@@ -78,6 +34,51 @@ main :: () {
|
||||
}
|
||||
}
|
||||
|
||||
annoying_color_effect :: (screen: *Screen, modifier: s64) {
|
||||
if modifier % 3 == 0 {
|
||||
set_console_color(.RED);
|
||||
} else if modifier % 5 == 0 {
|
||||
set_console_color(.GREEN);
|
||||
} else {
|
||||
set_console_color(.BLUE, .BOLD);
|
||||
}
|
||||
}
|
||||
|
||||
cool_demo_1 :: (screen: *Screen, offset: s64, theta: s64) {
|
||||
t1 := Triangle.{
|
||||
.{30 - offset, 20},
|
||||
.{95, 10 - (offset / 2)},
|
||||
.{90 + offset, 40},
|
||||
};
|
||||
|
||||
scale(.{0.5, 0.8}, *t1);
|
||||
translate(.{0, 20}, *t1);
|
||||
translate(.{50, 5}, *t1);
|
||||
rotate(theta, get_triangle_centroid(t1), *t1);
|
||||
|
||||
draw_triangle(screen, t1, #char "%");
|
||||
|
||||
t2 := t1;
|
||||
|
||||
scale(.{0.5, 0.5}, *t1);
|
||||
draw_triangle(screen, t1, #char "%");
|
||||
|
||||
draw_line(screen, t1.p1, t2.p1, #char "%");
|
||||
draw_line(screen, t1.p2, t2.p2, #char "%");
|
||||
draw_line(screen, t1.p3, t2.p3, #char "%");
|
||||
}
|
||||
|
||||
cool_demo_2 :: (screen: *Screen, offset: s64, theta: s64) {
|
||||
q1 := make_quad_from_rect(
|
||||
.{100, 10},
|
||||
.{110, 20}
|
||||
);
|
||||
|
||||
rotate(-theta, .{100, 10}, *q1);
|
||||
|
||||
draw_quad(screen, q1, #char "-");
|
||||
}
|
||||
|
||||
#import "Console_Render";
|
||||
#import "Basic";
|
||||
#import "Math";
|
||||
|
||||
Reference in New Issue
Block a user