⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transform.v

📁 Implementation of GPU (Graphics Processing Unit) that rendered triangle based models. Our goal was t
💻 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 + -