Chƣơng trình thử nghiệm

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số kỹ thuật rút gọn bề mặt mô hình 3d (Trang 64 - 67)

Trong luận văn của mình tôi sử dụng chƣơng trình của tiến sĩ

Forstmann, J. Ohyadùng kỹ thuật QEM có tên gốc là “FastQuadricMeshSimplification” đƣợc viết trên môi trƣờng Visual Studio 2013, sử dụng ngôn ngữ lập trình Visual C++. Chƣơng trình gốc của tác giả chỉ chạy đƣợc với một mô hình tại một thời điểm vì tên tệp mô hình cần rút gọn đƣợc cố định trong chƣơng trình. Vì lời gọi thủ tục OBJ obj("../data/bunny.obj",1);) để mở tệp là cố định, muốn thay đổi mô hình thì cần vào hàm main() để gõ tên mô hình cần rút gọn.

Trong chƣơng trình gốc của tác giả,tham số mặt cần rút gọn và tên của tệp output cũng đƣợc cố định trong hàm main()nhƣ sau:

Simplify::simplify_mesh(20000);

Simplify::write_obj("../test_out.obj");nên rất bất lợi cho việc đóng gói và khó triển khai sử dụng rông rãi.

Để thuận thiện cho việc thử nghiệm, học viên đã sửa lại chƣơng trình nguồn để có thể đƣa tệp đầu vào nhƣ một tham số và chuyển chƣơng trình sang dạng dòng lệnh (commander) nhằm tham số hóa đầu vào, đầu ra giúp cho việc đóng gói sử dụng sau này đƣợc hiệu quả.

int main(int argc, char* argv[]) {

int temp_c; //Chứa số mặt cần giảm tới

char input_name[256]; //Chứa tên tệp mô hình vào

char output_name[256]; //Chứa tên tệp mô hình ra

float c;

if (argc == 1) {

OutputUsage(); // Đƣa ra hƣớng đẫn sử dụng

}

else if (argc = 4) {

strcpy(input_name, argv[1]); //Gán tệp vào

strcpy(output_name, argv[2]); //Gán tệp ra

sscanf(argv[3], "%f", &c); //Gán mặt cần giảm tới

} … obj.load_obj(input_name, 100); … Simplify::simplify_mesh((int)c); Simplify::write_obj(output_name); …

Nhƣ vậy ta đã tham số hóa đƣợc chƣơng trình, để sử dụng chƣơng trình sau khi biên dịch đóng gói, mang tới máy khác vô cùng đơn giản (cần cài thêm VC++ 2012 Runtime) và sử dụng với cú pháp nhƣ sau:

Simplification <tệp input><tệp output><số mặt cần có> Ví dụ: Gõ lệnh Simplification bunny.obj o_bun1000.obj 1000

Ví dụ trên cho thấy việc rút gọn mô hình bunny.obj và đƣa ra tệp kết quả o_bun1000.obj với số mặt cần có là 1000.

Để rút gọn nhiều mô hình ta chỉ cần soạn một tệp *.bat nhiều dòng với cú

pháp nhƣ trên. Ví dụ: tệp test.bat có nội dung:

Simplification bunny.obj b100.obj 100 //Rút gọn thỏ xuống 100

mặt

Simplification bunny.obj b1000.obj 10000 Simplification dragon.obj d500.obj 5000 Simplification horse.obj h2000.obj 2000

Lƣu ý tệp cần rút gọn phải nằm cùng thƣ mực với tệp chƣơng trình.

(Mã nguồn: https://github.com/sp4cerat/Fast-Quadric-Mesh- Simplification)

Thử nghiệm 1. Input: “bunny.obj” là mô hình con thỏ gốc Hình 3.3 a

Output: Hình 3.3 b, Hình 3.3 c

Hình 3.3. Thử nghiệm mô hình Bunny

Tệp gốc hình a 3,389Kb với hình b 397Kb (85%) thời gian xử lý 163ms, hình c 15Kb với thời gian xử lý là 187ms

Thử nghiệm 2. Input: “Dragon.obj” là mô hình con rồng gốc Hình 3.4a

Hình 3.4. Thử nghiệm mô hình Dragon

Tệp gốc hình a 9,342Kb với hình b 396Kb (92%) thời gian xử lý 706ms, hình c 14Kb với thời gian xử lý là 832ms

Thử nghiệm 3. Input: “Horse.obj” là mô hình con ngựa gốc Hình 3.5a

Output: Hình 3.5b, Hình 3.5c

Hình 3.5. Thử nghiệm mô hình Horse

Tệp gốc hình a 3,389Kb với hình b 393Kb thời gian xử lý 187ms, hình c 13Kb với thời gian xử lý là 226ms.

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số kỹ thuật rút gọn bề mặt mô hình 3d (Trang 64 - 67)

Tải bản đầy đủ (PDF)

(75 trang)