Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Đồ

hoạ máy tính nâng cao


Bài thực hành số 2 – Mô hình hoá hình học

1. Thông tin chung
Các bài thực hành được hiện với Công cụ dựng ảnh 3D POV-Ray.

Đọc kỹ hướng dẫn trước khi bắt đầu !

Bài thực hành được làm theo nhóm 2SV. Các bạn cũng có thể làm cá nhân (nhóm 1 SV).
Deadline: 17h00 thứ tư ngày 18/10/2017.
Tạo thư mục theo định dạng <TEN SV1>-<TEN SV2>, ví dụ: DUYEN-THANH
Soạn thảo báo cáo bằng MS. Word hoặc Libre office
Các file cần nộp: báo cáo, file nguồn của phần 5, file ảnh của phần 5
Để tất cả các file vào cùng một thư mục, đưa thư mục này lên Google Drive và share thư
mục này cho pnkhang@cit.ctu.edu.vn
Gởi email vởi subject: DHNC2 (viết liền không khoảng cách).
Nội dung email: Họ tên, mã số sinh viên của (các) sinh viên thực hiện, đường link đến thư
mục chứa báo cáo đã chia sẻ.


2. Tạo đối tượng bằng phương pháp xoay/tiện (lathe object)
Pov-ray cho phép tạo ra các đối tượng có bề mặt tròn xoay bằng cách quay một đường cong
quanh một trục. Thao tác này giống như một người thợ tiện/thợ gốm tạo ra sản phẩm.

Ta có thể sử dụng nhiều loại đường cong với bậc đa thức khác nhau (linear_spline, Bezier, …)
để làm đường sinh.

Đường linear_spline có bậc đa thức = 1, tương đương với đường gấp khúc. Để mô tả nó, ta
chỉ cần cung cấp danh sách n điểm (các toạ độ x, y) của đường gấp khúc này.

Các loại đường cong khác là quadratic_spline (bậc 2), cubic_spline (bậc 3) và bezier_spline
(đường cong Bézier).

Ví dụ bên dưới minh hoạ một đối tượng tròn xoay được tạo bằng cách quay một đường gấp
khúc 6 điểm quanh trục z.

#include "colors.inc"
background{White}
camera {
angle 10
location <1, 9, -50>
look_at <0, 2, 0>
}
light_source {
<20, 20, -20> color White
}
lathe {
linear_spline
6,
<0,0>, <1,1>, <3,2>, <2,3>, <2,4>, <0,4>
pigment { Blue }
finish {
ambient .3
phong .75
}
}



Đường sinh được mô tả trong mặt phẳng x – y. Sau đó, nó sẽ được quay quanh trục y để tạo
ra đối tượng tròn xoay.



Bài tập: Lần lượt thay linear_spline bằng quadratic_spline, cubic_spline và bezier_spline
Viết báo cáo: Dựng lại ảnh và insert ảnh kết quả vào báo cáo. Giải thích tại sao ta không thể
sử dụng bezier_spline trong trường hợp này.

Bài tập: Hãy thay đường sinh bằng đường linear_spline có 12 điểm:
<0.0, 0.0>, <0.0, 0.0>, <4.5, 0.5>, <5.0, 30>,
<1.5, 6.5>, <2.5, 10.0>, <2.5, 10.0>, <1.5, 6.5>,
<5.0, 3.0>, <4.5, 0.5>, <0.0, 0.0>, <0.0, 0.0>

Viết báo cáo: Dựng lại ảnh. Bạn phải thay đổi toạ độ (location) và điểm nhìn (look_at) của
camera thấy được đối tượng. Cho biết các giá trị đã thay đổi. Insert ảnh kết quả vào báo cáo.
Vẽ đường sinh trên mặt phẳng x – y (tương tự ví dụ trên).

Bài tập: Lần lượt thay linear_spline bằng quadratic_spline, cubic_spline và bezier_spline
Viết báo cáo: Dựng lại ảnh và insert ảnh kết quả vào báo cáo. Giải thích lúc này bezier_spline
lại chạy được.

Bài tập: Hãy thử bỏ bớt 1 số điểm bị trùng và thử lại với quadratic_spline và cubic_spline.
Viết báo cáo: Hãy quan sát các ảnh kết quả và giải thích theo sự hiểu biết của bạn.


Bài tập: Để có thể nhìn thấy được các điểm điều khiển, bạn hãy thêm các hình cầu vào vị trí
của chúng (với z=0) . Ví dụ: hãy thêm 3 hình cầu này vào cảnh của bạn:

sphere {<0.0, 0.0, 0.0>, 0.2 texture {pigment {Red}}}
sphere {<4.5, 0.5, 0.0>, 0.2 texture {pigment {Red}}}
sphere {<5.0, 3.0, 0.0>, 0.2 texture {pigment {Red}}}

Viết báo cáo: tại sao ta phải mô tả đường cong bằng các điểm 2 chiều mà không phải là 3
chiều ? Điều gì sẽ xảy ra nếu bạn cố tình mô tả đường cong bằng các điểm 3D ? Gợi ý: hãy thử
vẽ đường cong trên giấy và so sánh với quả bạn quan sát được trên màn hình.

Viết báo cáo: Sự khác giữa các loại đường cong: linear, quadratic, cubic, bezier là gì ? Bạn thấy
sự mềm mại của các đường cong có gì khác nhau không ? Khác nhau như thế nào ? Các đường
cong có đi qua các điểm điều khiển không ? Thời gian dựng ảnh có khác nhau không ?

3. Tạo đối tượng bằng cách tịnh tiến (prism object)
Tương tự như lathe, đối tượng có được bằng cách quay một đường sinh quanh trục y, đối
tượng prism được sinh ra bằng cách tịnh tiến một đường sinh theo một quỹ đạo nào đó. Kết
quả ta được 1 đối tượng có dạng giống hình lăng trụ.


Kiểu đường sinh cơ sở giống như các đối tượng lathe: linear_spline, quadratic_spline,
cubic_spline và bezier_spline.

Quỹ đạo của quá trình tịnh tiến có thể là đường thẳng (linear_sweep) hoặc đường cong bậc
hai (conic_sweep). Trong trường hợp thứ nhất, đường biên của đối tượng kết quả vuông góc
với mặt phẳng x-y. Trong trường hợp thứ hai, việc tạo hình được thực hiện bằng phép vị tự
(homothetic transformation – xem Hình học 11) chứ không phải phép tịnh tiến (translation).
Vì thế trong quá trình di chuyển đường cong cơ sở sẽ thay đổi kích thước so với đường cong
ban đầu. Kết quả ta thu được một đối tượng dạng conic chứ không phải hình dạng lăng trụ:


Đường cong gốc sẽ nằm ở vị trí y = 1 (height2). Sau đó kích thước giảm dần cho đến khi độ
cao = 0 (height 1). Lúc này đường cong chỉ còn 1 điểm.

Ta cũng có thể mô tả quá trình này theo chiểu ngược lại như sau: Bắt đầu tại vị trí y = 0
(height1), ta có 1 điểm, sau đó đường cong đi lên và lớn dần, cho đến khi y = 1 (height2), kích
thước nó đúng bằng kích thước đường sinh cơ sở. Nếu height2 > 1 đường cong tiếp tục đi lên
và lớn dần.

Nếu ta bắt đầu tại y = height1 < 0 thì sao ? Xem hình bên dưới và lý giải nhé !


Bài tập & viết báo cáo: Hãy một số đối tượng prism với các kiểu đường sinh khác nhau, kiểu
quét khác nhau và height1, height2 khác nhau (khác 0 và 1). Từ đó mô tả lại cách thức mà
POVRAY tạo đối tượng bằng lệnh prism. Copy code và ảnh kết quả vào báo cáo của các bạn.
4. Các phép biến đổi hình học
Có 3 phép biến đổi cơ bản: translate, scale và rotate (xem lại lý thuyết).
Bài tập:
Gõ lại đoạn chương trình sau
#include "colors.inc"
#include "textures.inc"
camera {
location <-12,4,4>
look_at <3,3,3>
}

light_source{<90, 30, -60> color White}
light_source{<90, -30, 60> color White}
light_source{<-90, 30, -60> color White}

sphere {<0,0,0>, 0.2 texture{pigment {Orange}}}

cylinder {<0,0,0><10,0,0>, 0.1 //axis x
texture{pigment {Cyan}}
}
cylinder {<0,0,0><0,10,0>, 0.1 //axis y
texture{pigment {Pink}}
}
cylinder {<0,0,0><0,0,10>, 0.1 //axis z
texture{pigment {Yellow}}
}

//object1
union {
cylinder {<1,1,1>, <2,2,2>, 1
texture {pigment {Green}}
}
sphere {<2,2,2>, 1
texture {pigment {Green}}
}
//bo sung cac lenh transform o day
}
//object2
union {
cylinder {<5,5,-5>, <7,7,-7>, 2
texture {pigment {Red}}
}
sphere {<5,5,-5>, 2
texture {pigment {Red}}
}
//bo sung cac lenh transform o day
}
a. Thêm các đoạn lệnh biến đổi hình học cho object1 (Green) để nó trở thành object2
(Red): giống hệt nhau về vị trí, kích thước, hướng.
b. Thêm các đoạn lệnh biến đổi hình học cho object2 (Red) để nó trở thành object2
(Green): giống hệt nhau về vị trí, kích thước, hướng.
Chú ý: câu a và b độc lập nhau.

Viết báo cáo: Ghi lại các đoạn lệnh biến đổi hình học (theo đúng thứ tự) bạn đã sử dụng cho
câu a và câu b. Lý giải tại sao bạn chọn thứ tự này. Theo bạn, có cách nào biến đổi nào khác
để đạt được kết quả như thế không ? Tại sao ? Sự khác nhau của các phép biến đổi ở câu a và
câu b là gì ?

5. Thêm chuỗi ký tự vào cảnh
POV-RAY hỗ trợ đối tượng text để thêm 1 chuỗi ký tự vào cảnh 3D. Cú pháp khá đơn giản:

text {ttf “Tên font” “Chuỗi ký tự cần thêm” độ_dày độ_lệch}
Trong đó, độ_dày giống như chiều cao (height) của đối tượng prism; độ_lệch là khoảng di
chuyển sau mỗi đối tượng. Tham số này cho phép ta tạo ra chuỗi ký tự được sắp xếp như
bậc thang. Thông thường tham số này được gán = 0 (tương đương với với <0, 0, 0>).

Chuỗi ký tự được tạo ra theo chiều ngang (trục x) từ trái sang phải. Mặt trước của các ký tự
nằm trên mặt phẳng x-y (z = 0). Độ dày của chữ hướng theo chiều dương của trục z. Vì thế,
mặt sau của chữ sẽ nằm trên mặt phẳng z = độ_dày.

6. Tự dựng ảnh 3D của bạn
Với các kiến thức bên trên, bạn có thể tự mình tạo ra một cảnh 3D của riêng bạn. Hãy tự mình
tưởng tượng và xây dựng một cảnh 3D và dựng ảnh kết quả. Thêm nội dung file nguồn (.pov)
và file ảnh kết quả (.png) kèm theo báo cáo của bạn.
Yêu cầu:
- Mỗi nhóm tạo 1 cảnh khác nhau.
- Định dạng file ảnh: PNG
- Sử dụng nhiều đối tượng khác nhau trong cảnh (prism, lathe).
- Sử dụng ít nhất 1 lathe bezier_spline, 1 prism conic_sweep, 1 prism rỗng (2 đường
biên, xem ví dụ bên trên)
- Sử dụng các phép toán CSG để tạo ra các đối tượng mới (union, intersection,
difference)

Viết báo cáo: Mô tả và giải thích cảnh của bạn. Hãy chứng minh cho mọi người thấy rằng đây
là một tác phẩm độc đáo !





Ví dụ:

Để nhớ lại 1 thời kỳ … chưa có điện.



Hay lãng mạn hơn ….



Chúc các bạn làm tốt !

You might also like