📄 transform.v
字号:
// module to transform to screen coordinates. takes in u,v,w as world coordinates
module Transform (
vertex1_x_world,
vertex1_y_world,
vertex1_z_world,
vertex2_x_world,
vertex2_y_world,
vertex2_z_world,
vertex3_x_world,
vertex3_y_world,
vertex3_z_world,
vertex1_x_screen,
vertex1_y_screen,
z_canonical,
vertex2_x_screen,
vertex2_y_screen,
vertex3_x_screen,
vertex3_y_screen
);
input [17:0] vertex1_x_world, vertex1_y_world, vertex1_z_world,
vertex2_x_world, vertex2_y_world, vertex2_z_world,
vertex3_x_world, vertex3_y_world, vertex3_z_world;
output [9:0] vertex1_x_screen, vertex1_y_screen,
vertex2_x_screen, vertex2_y_screen,
vertex3_x_screen, vertex3_y_screen;
output signed[9:0] z_canonical;
wire [17:0] vertex1_x_screen_before,
vertex1_y_screen_before,
vertex1_z_screen_before,
vertex2_x_screen_before,
vertex2_y_screen_before,
vertex3_x_screen_before,
vertex3_y_screen_before;
wire [9:0] vertex1_x_screen_after,
vertex1_y_screen_after,
vertex2_x_screen_after,
vertex2_y_screen_after,
vertex3_x_screen_after,
vertex3_y_screen_after;
// multiplies by number of pixels per unit by adding to the exponent.
assign vertex1_x_screen_before = {vertex1_x_world[17], (vertex1_x_world[16:9] + 8'd4), vertex1_x_world[8:0]};
assign vertex1_y_screen_before = {vertex1_y_world[17], (vertex1_y_world[16:9] + 8'd4), vertex1_y_world[8:0]};
assign vertex1_z_screen_before = {vertex1_z_world[17], (vertex1_z_world[16:9] + 8'd3), vertex1_z_world[8:0]};
assign vertex2_x_screen_before = {vertex2_x_world[17], (vertex2_x_world[16:9] + 8'd4), vertex2_x_world[8:0]};
assign vertex2_y_screen_before = {vertex2_y_world[17], (vertex2_y_world[16:9] + 8'd4), vertex2_y_world[8:0]};
assign vertex3_x_screen_before = {vertex3_x_world[17], (vertex3_x_world[16:9] + 8'd4), vertex3_x_world[8:0]};
assign vertex3_y_screen_before = {vertex3_y_world[17], (vertex3_y_world[16:9] + 8'd4), vertex3_y_world[8:0]};
// converts to an int
fp2int f1(vertex1_x_screen_after, vertex1_x_screen_before, 8'b0);
fp2int f2(vertex1_y_screen_after, vertex1_y_screen_before, 8'b0);
fp2int f3(z_canonical, vertex1_z_screen_before, 8'b0);
fp2int f4(vertex2_x_screen_after, vertex2_x_screen_before, 8'b0);
fp2int f5(vertex2_y_screen_after, vertex2_y_screen_before, 8'b0);
fp2int f6(vertex3_x_screen_after, vertex3_x_screen_before, 8'b0);
fp2int f7(vertex3_y_screen_after, vertex3_y_screen_before, 8'b0);
// offsets from 0 for screen coordinates
assign vertex1_x_screen = vertex1_x_screen_after + 10'd159;
assign vertex1_y_screen = vertex1_y_screen_after + 10'd119;
assign vertex2_x_screen = vertex2_x_screen_after + 10'd159;
assign vertex2_y_screen = vertex2_y_screen_after + 10'd119;
assign vertex3_x_screen = vertex3_x_screen_after + 10'd159;
assign vertex3_y_screen = vertex3_y_screen_after + 10'd119;
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -