3.3.1.Xử lý Vertex bằng Fixed Function Pipeline

Một phần của tài liệu Nghiên cứu và xây dựng thử nghiệm với 3d engine (Trang 26 - 28)

Trước khi tìm hiểu về Vertex Shader ta hêy xem qua qui trình xử lý Vertex mă Direct3D cung cấp sẵn thông qua Fixed Function Pipeline.

Dữ liệu đầu văo của quy trình lă sữ liệu đỉnh 3D (Vertex) trong không gian vật thể (model space ), trong không gian năy mọi vertex đều có toạ độ tính từ gốc toạ độ của vật thể.

Biến đổi thế giới (World transform). Biến đổi vertex từ không gian vật thể (model space ) sang không gian thế giới (world space), câc vertex sẽ có toạ độ tương đối với nhau trong không gian thế giới.

Vertex blending. Biến đổi toạ độ của 1 vertex trín nhiều ma trận biến đổi thế giới khâc nhau. Mức độ tham gia của mỗi ma trận được xâc định thông qua giâ trị trọng lượng (weight) ứng với mỗi ma trận.

Biến đổi quan sât ( View transform). Biến đổi vertex từ không gian thế giới văo không gian quan sât. Vị trí của camera nằm ở gốc toạ độ của không gian quan sât, sau biến đổi năy vertex sẽ có toạ độ lă toạ độ tương đối đối với camera.

Tính giâ trị sương mù trín từng vertex (Vertex fog). Tính toân giâ trị mău sắc của vertex khi âp dụng hiệu ứng sương mù.

Chiếu sâng ( lighting and material). Tính toân ânh sâng trín từng vertex dụa trín mức độ phản xạ ânh sâng của vertex.

Biến đổi chiếu ( Prọection transform). Biến đổi vertex từ không gian quan sât sang không gian chiếu. Đđy lă công đoạn cuối cùng của quy trình biến đổi.

Dữ liệu đầu ra của quy trình năy sẽ lă đầu văo quy trình xử lý đối tượng cơ sở (Primitive processing).

Toăn bộ quy trình xử lý vertex trín của Fixed Function có thể được thay thế bằng chương trình Vertex Shader, khi đố Direct3Dhoăn toăn chuyển giao quyền xử lý Vertex cho Vertex Shader. Vertex Shader sau khi kết thúc sẽ trat quyền điều khiển cùng với dữ liệu xử lý được lại cho Fixed Function Pipeline để xử lý tiếp.

3.3.2.Mây ảo Vertex Shader

Để biết được câch thiết kế 1 Vertex Shader trước tiín ta cần phải nắm được mô hình mây ảo Vertex Shader (Vertex Shader Virtual Machine ). Mây ảo Vertex Shader lă mô hình mang tính chất lý thuyết giúp ta dễ tiếp cận vă hình dung câch thức mă Vertex Shader hoạt động. Giống như 1 loại mây móc công nghiệp. Vertex Shader nhận dữ liệu đầu văo (input), sau đố tiến hănh xử lý dữ liệu đó bằng 1 số tâc vụ, cuối sùng lă xuất ra câc thănh phẩm lă câc dữ liệu đầu ra (output). Sau đđy lă sơ đồlý thuyết:

Trong sơ đồ trín dữ liệu vertex được truyền từ trâi sang phải. Câc thanh ghi (registers) lă nơi chứa vă quản lý câc dữ liệu đầu văo vă đầu ra của shader. Câc tâc vụ được thi hănh trong Shader được cấu tạo từ 1 tập câc vi lệnh hợp ngữ (assembly- language instructions), câc vi lệnh năy đwocj thi hănh ngay trín đơn vị số học vă luận lý (Arithmetic Logic Unit, ALU) nằm trín GPU (Graphic Processor Unit) của cảd 3D. Dữ liệu đầu văo của Vertex Shader đựoc truyền văo thông qua thanh ghi đầu văo (input registers). Vertex Shader sau khi thi hănh sẽ xuất câc giâ trị đầu ra thông qua câc thanh ghi đầu ra ( output registers). Dữ liệu đầu văo của Shader lă thông tin của 1 vertex được lấy từ trong vertex buffer ( do chương trình cung cấp), câc dữ liệu năy

có thít bao gồm toạ độ, phâp tuyến, toạ độ texture, mău diffuse… dữ liệu đầu ra của vertex Shader được trả thẳng lại cho qui trình xử lý (Graphic Pipeline) để chuyển qua công đoạn xử lý đối tượng cơ sở (primitive processing).

Câc thanh ghi được sử dụng trong Shader đều lă câc thanh ghi 4 chiều ( có thể lưu được 4 số thực trong 1 thanh ghi). Có 4 kiểu thanh ghi, mỗi kiểu có câch sử dụng rất khâc nhau.

Thanh ghi dữ liệu văo (input registers) chứa dữ liệu đầu văo. Thanh ghi hăng (constant registers ) chưa câc hằng số dùng trong ALU.

Thanh ghi tạm (temporary registers) chứa câc dữ liệu tạm thời. Thanh ghi dữ liệu ra (output registers) chứa kết quả tính toân của Vertex Shader.

Với câc thanh ghi đóng vai trò lưu trữ, ALU đống vai trò thi hănh câc lệnh, phần quan trọng nhất của Shader chính lă câc vi lệnh (instrutions). Vi lệnh trong Vertex Shgader chủ yếu lă câc vi lệnh toân học thực hiện 1 tâc vụ cụ thể như tính tích vô hưóng (dot product), tích hữu hướng (cross product), nhđn ma trận, tìm minmax…

Danh sâch câc loại thanh ghi cũng như câc vi lệnh có thể thanh khảo trong Direct3D SDK.

Một phần của tài liệu Nghiên cứu và xây dựng thử nghiệm với 3d engine (Trang 26 - 28)