BÁO CÁO THỰC TẬP-CHỦ ĐỀ TÌM HIỂU VỀ PHÉP NHÌN TRONG KHÔNG GIAN BA CHIỀU - Pdf 27

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
ĐẠI HỌC THÁI NGUYÊN
BÁO CÁO THỰC TẬP CHUYÊN
NGHÀNH
CHỦ ĐỀ:TÌM HIỂU VỀ PHÉP NHÌN TRONG
KHÔNG GIAN BA CHIỀU
Giáo viên hướng dẫn: Nguyễn Thị Thanh Nhàn
Sinh viên thực hiện: Hà Thị Lệ
LỜI MỞ ĐẦU
Có câu rằng “một hình ảnh bằng cả nghìn lời nói ”. Điều đó thật không thể phủ
nhận. Và rõ ràng là nếu hiển thị thông tin chỉ với các ký hiệu, chữ cái, chữ số không thôi
thì không thể hấp dẫn và dễ hiểu như khi có thêm biểu diễn đồ họa Kỹ thuật đồ hoạ cũng
là công cụ không thể thiếu trong các ngành khoa học kỹ thuật, giáo dục, nghệ thuật, giải
trí, quảng cáo…(để diễn đạt máy móc thiết bị, kiến trúc, cấu trúc cơ thể, thông tin thiên
văn địa lý, hình ảnh minh hoạ ). Chính vì vậy, đồ họa là một vấn đề được quan tâm trong
ngành công nghệ thông tin.
Cùng với sự phát triển của tin học, kỹ thuật đồ họa trên máy vi tính, ngày càng trở
nên tinh xảo. Giao diện các phần mềm ngày nay trở nên thân thiện, đẹp mắt nhờ các thể
hiện đồ họa. Sự hổ trợ của tin học cho các ngành khác trở nên đắc lực hơn nhờ khả năng
đồ họa vi tính. Và thế giới thực thì được biểu diễn một cách sinh động, linh hoạt, đầy
màu sắc bằng không gian ba chiều.
Trong thành công của kỹ thuật đồ họa ngày nay không thể không nói đến sự phát
triển vượt bậc của tốc độ phần cứng lẫn hệ điều hành. Nhưng bản thân kỹ thuật đồ họa thì
có bước tiến nhảy vọt từ những phép tính toán học phức tạp đến những thư viện đồ họa
được tạo sẵn để phục vụ cho cuộc sống công nghiệp hóa , hiện đại hóa ngày nay. Như
không gian 3 chiều từ khi xuất hiện đã dần dần được sử dụng vào các lĩnh vực như: công
nghệ thông tin, điện ảnh ,giáo dục
Mục tiêu của bài thực tập chuyên nghành này là tìm hiểu về phép nhìn trong
không gian ba chiều .đồng thời cũng giới thiệu đôi nét về thư viện đồ họa OpenGL trong
việc minh họa các giải thuật đồ họa ba chiều.
Tuy nhiên, đề tài không thể không tránh khỏi những hạn chế và thiếu sót, nên rất

đơn giản hóa đi nhiều.
Với giao diện lập trình mạnh mẽ, OpenGL cho phép tạo các ứng dụng 3-D phức tạp với
độ tinh vi, chính xác cao, mà người thiết kế không phải đánh vật với các núi công thức
toán học và các mã nguồn phức tạp. Và do OpenGL là tiêu chuẩn công nghiệp, các ứng
dụng tạo từ nó dùng được trên các phần cứng và hệ điều hành khác nhau.
Các mục sau sẽ giới thiệu cách nhìn tổng quát về cách làm việc của OpenGL:
- Các phần tử đồ họa cơ bản và lệnh giới thiệu về các phần tử đồ họa cơ bản (primitive)
và sự thực hiện lệnh
- Cách làm việc của OpenGL cho biết các lọai thao tác đồ họa mà OpenGL kiểm soát
- Mô hình hoạt động nói về mô hình client/server cho việc thông dịch lệnh OpenGL
- Thao tác OpenGL cơ bản đưa ra một mô tả mức cao về cách OpenGL xử lý dữ liệu và
tạo ra hình ảnh tương ứng lên bộ điệm khung.
Các phần tử đồ họa cơ bản và lệnh:
Primitive được xác định bởi nhóm của một hay nhiều vertex là điểm trong không gian.
Mỗi vertex xác định một điểm, một đầu đoạn thẳng hay một đỉnh đa giác. Dữ liệu (bao
gồm tọa độ vertex, màu sắc, normal, texture và cờ xác định loại cạnh) kết hợi với vertex.
Khi xử lý primitive, mỗi cập vertex và dữ liệu liên kết với nó được sử lý độc lập với các
cập khác, theo thứ tự và cùng một phương pháp. Ngoại lệ duy nhất là trong trường hợp
khử phần khuất của primirite(clipping). Khi đó, dữ liệu vertex được sửa và các vertex
khác được tạo ra. Loại clipping tuỳ thuộc loại primirite mà nhóm vertex biểu diễn.
Các lệnh luôn luôn được xử lý theo thứ tự mà nó tiếp nhận, mặt dù có sự trì hoãn không
xác định trước khi lệnh có hiệu lực. Nghĩa là mỗi primirite được vẽ trọn vẹn trước khi
lệnh tiếp theo có hiệu lực.
Cách làm việc của OpenGL:
OpenGL là ngôn ngữ đồ họa theo thủ tục chứ không phải ngôn ngữ mô tả.Thay vì tả các
cảnh và cách chúng xuất hiện, OpenGL đưa ra các bước cần thiết để có được sự thể hiện
hay hiệu quả nhất định. Các “bước”này là các lời gọi đến giao diện lập trình ứng dụng
gồm xăp xỉ 120 lệnh và hàm. Chúng được dùng để vẽ các phần tử đồ họa cơ bản như
điểm, đường và đa giác trong không gian ba chiều. Ngoài ra, OpenGL còn hổ trợ chiếu
sáng, tô bóng, gán cấu trúc, tạo ảo giác chuyển động và các hiệu quả đặc biệt khác.

hiện bởi luồng ống dẫn đồ họa (graphics pipeline). Nó còn được gọi là bộ máy trạng thái
OpenGL. Đa số các lệnh OpenGL được dùng để tạo ra các hình học cơ bản đã gặp ở trên
hoặc là qui định cách chuyển đổi hình học trong bộ máy trạng thái OpenGL.
Các trò chơi được viết với OpenGL:
* City of Heroes
* City of Villains
* CounterStrike 1.6
* Doom 3
* ETQW
* Half-Life
CHƯƠNG I. TÌM HIỂU VỀ CAMERA
Các hệ thống sử dụng camera với mục đích giám sát , nhận dạng , an ninh, điều
khiển ngày càng phổ biến và được sử dụng rộng rãi.
 Cấu tạo:
Hình 1
- Một mắt nhìn được đặt ở vị trí nào đó trong không gian.
-Thể tích nhìn là một phần của hình chóp có đỉnh là mắt nhìn.Độ lớn của góc nhìn này là
do góc nhìn Ө quyết đinh.
-Hai mặt phẳng vuông góc với trục của camera là mặt phẳng gần và mặt phẳng xa.Hai
mặt phẳng này cắt hình chóp với thiết diện là hình chữ nhật ,những cửa sổ hình chữ nhật
này có hệ số tỉ lệ nhất định và có thể được thiết lập trong chương trình.OpenGL sẽ cắt
xén bất cứ phần nào của khung cảnh nằm ngoài thể tích nhìn.Điểm P nằm trong thể tích
nhìn được chiếu lên mặt phẳng nhìn thành điểm P’ giống như trong phần c .Trong phép
chiếu phối cảnh ,điểm P’ chính là giao điểm của đường thẳng đi qua mắt nhìn và điểm p
với mặt phẳng nhìn.Cuối cùng hình ảnh trên mặt phẳng nhìn đựơc ánh xạ lên khung nhìn
và được hiển thị trên màn hình (như trong phần c).
Hình2: camera và phép nhìn phối cảnh
1.2 Thiết lập thể tích nhìn:
Hình3:Camera khi ở vị trí mặc định của nó
Hình trên mô tả camera ở vị trí mặc định của nó với mắt nhìn ở gốc tọa độ ,trục của hình

mắt nhìn và 3 trục tọa độ để định hướng cho camera ,thường dùng là trục u,v,n .các trục
tọa độ này có hướng trùng với các hướng của các vector u,v,n như trong hình vẽ .Bởi vì
mặc định của camera hướng về phía âm trục z,vì thế chũng ta nói rằng mặc định camera
hướng về phía âm của trục n tức là theo hướng –n .Hướng u chỉ về phía phải của camera ,
hướng v chỉ phía trên của camera .Hãy nghĩ các trục u , v,n, là bản sao của các trục tọa độ
x , y, z trong hình 3 được di chuyển và quay khi chúng ta di chuyển camera.

n
u
v
Hình4 : Gắn hệ trục tọa độ cho camera.
Khi điều chỉnh hướng của camera người ta thường dùng các thuật ngữ của ngành hàng
không: pitch, roll, heading, yaw.
Hình 5:Hướng của chiếc máy bay so với thế giới.
Pitch chính là góc hợp bởi trục dọc của máy bay (chạy từ đuôi đến mũi máy bay tức là
theo hướng –n) với mặt phẳng nằm ngang.
Máy bay thực hiện động tác roll ( xoay tròn)bằng cách quay xung quanh trục dọc của nó
roll chính là góc quay so với phương nằm ngang.
Heading của máy bay chính là hướng mà nó hướng đến.Người ta còn dùng một số thuật
ngữ khác như azimuth và brearing thay cho heading.
Cho trước n chúng ta có thể dễ dàng tìm được thông số pitch và heading bằng cách biểu
diễn n trong tọa độ cầu .Kinh độ và vĩ độ của vector –n lần lượt là Ө và ϕ .Heading của
máy bay được cho bởi kinh độ Ө của –n , pitch của máy bay cho bởi vĩ độ ϕ của –n .
n
u
n
u
v
u
v

Trong hình a cho trước vị trí của mắt nhìn eye, điểm ngắm look và hướng up. Chúng ta
biết rằng n phải song song với vector eye- look, như trong hình b, vì thế chúng ta chọn
n=eye-look.
Bây giờ chúng ta cần phải tìm 2 vector u và v vuông góc với nhau vuông góc với
n.Vector u chỉ về phía bên hông của camera, vì thế hoàn toàn có lý để cho nó vuông góc
với up .Như vậy vector u vuông góc với cả n và up .
Để xây dựng một vector vuông góc với 2 vector cho trước người ta thường dùng tích có
hướng của chúng ,vì thế chúng ta xây dựng u = up×n,
thay vì n× up để cho u chỉ vào “ phía bên phải “khi chúng ta nhìn theo trục –n .
Có u và v chúng ta dễ dàng tạo được vector v: nó phải vuông góc với cả u và n vì thế
chúng ta lại dùng tích có hướng : v=n×u.Lưu ý v thường không trùng với up : v phải
vuông góc với n, trong khi người dùng cung cấp up như một gợi ý của hướng lên.
Tóm lại cho trước eye, look và up chúng ta xây dựng:
n = eye – look.
u = up×n, và
v = n×u
sau đó chuẩn hóa cả 3 vector u,v,n.
kiểm nghiệm lại công thức trên trong trường hợp up=(0,1,0), hãy chứng minh rằng trong
trường hợp này u=(n
z
,0,-n
x
)và v=( -n
x
n
y
.n
x
2
+ n












=
1000
zzyx
yzyx
xzyx
dnnn
dvvv
duuu
V
Ma trận mô hình-phép nhìn là tích của V và M
d
x
d
y
d
z
eye•ueye•veye•n



0
1
z
y
x
eye
eye
eye
V
 !"#$%&'()*+
,-.&'/0$12345

6
7


u
n
8(9:#$;+345













Hình 8:Phép biến đổ do glulookat() tạo ra.
Tương tự V ánh xạ v thành (0,1,0,0)
T
và ánh xạ n thành (0,0,1,0)
T
.Hàm glulookat() sẽ
tạo ma trận V và nhân nó với ma trận hiện hành.
1.4 Xây dựng camera trong chương trình.
Để có thể điều khiển camera chúng ta tạo và xử lý camera trong chương trình thay vì
dùng camera mặc định .
Chúng ta xây dựng lớp camera thực hiện tất cả những công việc mà camera có thể làm .
Các biến mô tả thể tích nhìn: viewAngle, aspect, nearDist, farDist;
Đoạn code:
class Camera
{
private:
Point3 eye;
Vector3 u, v, n;
double viewAngle, aspect, nearDist, farDist;
void setModelViewMatrix();
public:
Camera();
void set(Point3 Eye, Point3 look, Vector3 up);
void roll(float angle);
void pitch(loat angle);
void yaw(float angle);
void slide(float delU, float delV, float delN);
void setShape(float vAng,float asp,float nearD,float farD);
};

setModelViewMatrix();
}
 Quay camera: quay xung quay các trục u, v và n của nó
– pitch (quay xung quanh u), roll (quay xung quanh n),
yaw (quay xung quanh v).
v
u
u’ = cos(
α
)u + sin(
α
)v,
v’ = -sin(
α
)u + cos(
α
)v,
void Camera :: roll (float angle){
float cs = cos(3.14159265/180 * angle);
float sn = sin(3.14159265/180 * angle);
Vector3 t = u;
u.set(cs*t.x – sn*v.x, cs*t.y – sn*v.y, cs*t.z – sn*v.z);
v.set(sn*t.x + cs*v.x, sn*t.y + cs*v.y, sn*t.z + cs*v.z);
setModelViewMatrix();}
Ví dụ:
#include <windows.h>
#include <gl/gl.h>
#include <gl/glut.h>
#include “camera.h”
Camera cam;

mô tả bằng hình sau:
Hình 10:Phép chiếu phối cảnh trong hệ tọa độ mắt nhìn
Với mắt nhìn trùng với gốc tọa độ ,mặt phẳng gần vuông góc với trục z ở vị trí z= -N.
Đỉnh nằm ở vị trí P trong tọa độ mắt nhìn sẽ được đưa xuống khâu tiếp theo trong
đường ống đồ họa , ở đó nó sẽ được chiếu thành điểm có tọa độ ( x
*
,y
*
) trên mặt phẳng
gần sau đó phép cắt xén được thực hiện .Cuối cùng những điểm còn lại sau phép cắt xén
được ánh xạ lên khung nhìn của ứng dụng.
2.2.Hình chiếu phối cảnh của một điểm:
Thao tác cơ bản nhất của phép chiếu phối cảnh là chiếu một điểm trong không gian
3 chiều thành một điểm trong không gian 2 chiều.
Hình11: Tìm hình chiếu của điểm P trong tọa độ mắt nhìn
Ta thấy điểm (p
x
,p
y
,p
z
) trong không gian 3d được chiếu trên mặt phẳng gần của camera và
trở thành điểm (x
*
,y
*
).chúng ta xây dựng một hệ trục tọa độ trên mặt phẳng gần với gốc
tọa độ nằm trên trục z của camera .Khi đó ,hoàn toàn có nghĩa khi nói rằng một điểm nào
đó nằm về phía bên phải của gốc tọa độ x
*

*
) = (hình chiếu của điểm P)
Ví dụ: tìm hình chiếu của điểm P=(1, 0.5 ,-1.5) trên mặt phẳng nhìn biết rằng mặt phẳng
gần của camera ở vị trí N=1.
Áp dụng công thức: ta có : (x
*
,y
*
)= (0.6666 ,0.3333).
 Nhận xét :
1.Lưu ý giá trị -P
z
nằm ở mẫu số trong công thức giá trị này sẽ lớn đối với những điểm
nằm ở xa (tức là nằm ở phía xa hơn về phía cực âm của trục z) vì thế nó sẽ làm giảm giá
trị của y
*
.Đây chính là luật xa gần của phép chiếu phối cảnh , nó làm cho đối tượng ở
phần xa nhỏ hơn ở phần gần.
2.Khi giá trị có mẫu số bằng 0 chúng ta sẽ gặp phải rắc rối trong tính toán .P
z
có giá trị
bằng 0 khi P nằm trên cùng mặt phẳng với mắt nhìn tức là loại bỏ những điểm này trươc
khi thực hiện phép chiếu .
3.Nếu điểm P nằm ‘phía sau mắt nhìn’thì P sẽ đổi dấu và điều này gây ra sự phiền phức
như chúng ta sẽ thấy trong phần sau .Những điểm này cũng thường đựợc loại bỏ bằng
cách cắt xén.
4.Khoảng cách N của mặt phẳng gần chỉ có tác dụng co giãn hình chiếu của đối tượng .Vì
thế nếu chúng ta lựa chọn một mặt phẳng khác (vấnong song với mặt phẳng gần )làm mặt
phẳng thì hình chiếu trên đó chỉ khác nhau về kích cỡ so với hình chiếu về kích cỡ trên
mặt phẳng gần .Nhưng sự khác biệt về kích thước của hình chiếu không tạo ra sự khác

) ( trong tọa độ
camera) và có vector hướng c = (c
x
, c
y
, c
z
) đường thẳng này có phương trình tham số
là :P(t) = A + ct.Ta có dạng biểu diễn của hình chiếu đường thẳng :








−−
+
−−
+
=
tcA
tcA
N
tcA
tcA
Ntp
zz
yy

z
<0 khi tăng t lên đường thẳng lùi xa dần mắt nhìn .Khi giá trị t rất lớn công thức








−−
+
−−
+
=
tcA
tcA
N
tcA
tcA
Ntp
zz
yy
zz
xx
,)(





biến mất (VP).
Hình13 : Ý nghĩa hình học của điểm biến mất.
Nhìn xuống đường thẳng xz của camera từ phía trên ,chúng ta thấy mắt nhìn thấy rất
nhiều điểm trên đừong thẳng AB .Hình chiếu của A là A’, hình chiếu của B là B’… hình
chiếu của một điểm rất xa nằm trên đường thẳng chính là VP .Vì thế điểm VP nằm ở vị
trí sao cho đừờng thẳng đi qua nó và mắt song song với đường thẳng AB.
 Đường thẳng chạy ra sau mắt nhìn :
Hình 14 :Chiếu của đoạn thẳng AB với B nằm sau mắt nhìn
PHẦN III. PHÉP NHÌN LẬP THẾ.

Trích đoạn .Phân loại phép chiếu:
Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status