Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 34 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
34
Dung lượng
479 KB
Nội dung
Trường Đại Học Bách Khoa TP Hồ Chí Minh Khoa Khoa học & Kỹ thuật Máy tính ĐỒ HỌA MÁY TÍNH CHƯƠNG 7: PHÉP NHÌN TRONG KHƠNG GIAN CHIỀU NỘI DUNG TRÌNH BÀY Ơn tập camera Xây dựng camera chương trình Hình chiếu phối cảnh Hình chiếu phối cảnh điểm Hình chiếu phối cảnh đoạn thẳng Độ sâu giả Sử dụng tọa độ đồng Ý nghĩa hình học phép biến đổi phối cảnh Thể tích nhìn chuẩn Cắt xén với thể tích nhìn Faculty of Computer Science and Engineering - HCMUT Slide GIỚI THIỆU Xây dựng điều khiển camera tạo hình chiếu phối cảnh Điều khiển vị trí hướng camera Điều khiển thể tích nhìn camera Cắt xén với thể tích nhìn camera Faculty of Computer Science and Engineering - HCMUT Slide ƠN TẬP VỀ CAMERA Thể tích nhìn: phần hình chóp có đỉnh mắt nhìn Các thành phần: mắt nhìn, góc nhìn (tính độ), mặt phẳng gần, mặt phẳng xa, mặt phẳng nhìn (thường mặt phẳng gần) Faculty of Computer Science and Engineering - HCMUT Slide ÔN TẬP VỀ CAMERA Thiết lập thể tích nhìn: hình dạng thể tích nhìn chứa ma trận phép chiếu glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(viewAngle, aspecRatio, N, F); Faculty of Computer Science and Engineering - HCMUT Slide ƠN TẬP VỀ CAMERA Định vị trí định hướng cho camera glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(eye.x,eye.y,eye.z,look.x,look.y,look.z, up.x,u p.y,up.z); Faculty of Computer Science and Engineering - HCMUT Slide ÔN TẬP VỀ CAMERA Định vị trí định hướng cho camera Khi điều chỉnh hướng camera người ta thường dùng thuật ngữ ngành hàng không: pitch, roll, yaw a) pitch b) roll v n a ) c) yaw u u v u b ) v n u c ) v u n Faculty of Computer Science and Engineering - HCMUT Slide ÔN TẬP VỀ CAMERA Chức gluLookAt(): từ eye, look, up u, v, n n song song với eye – look u, v vng góc với n up hướng camera u phía bên camera n = eye – look u = up×n, v = n×u v up up n eye look u eye Faculty of Computer Science and Engineering - HCMUT look Slide ÔN TẬP VỀ CAMERA Ma trận mơ hình-phép nhìn tích V M ux u y uz d x (dx, dy, dz) = (-eye • u, -eye • v, -eye • n) vx v y vz d y V = nx n y nz d z 0 0 1 v n eyex eye y V = eyez 1 ux uy 0 V = uz 0 u ey e V y z Faculty of Computer Science and Engineering - HCMUT x Slide XÂY DỰNG CAMERA TRONG CT 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); }; Faculty of Computer Science and Engineering - HCMUT Slide 10 HÌNH CHIẾU PHỐI CẢNH CỦA ĐT Đường thẳng chạy phía sau mắt nhìn Bất hợp lý quan sát đt dài song song Faculty of Computer Science and Engineering - HCMUT Slide 20 ĐỘ SÂU GIẢ Phép chiếu phối cảnh làm thông tin độ sâu Tốn tg tính độ sâu theo cơng thức P + P + P x y z Vì Pz âm điểm xa dùng Pz tính độ sâu Py aPz + b Px ( x*, y*, z *) = N ,N , − Pz − Pz − Pz Faculty of Computer Science and Engineering - HCMUT Slide 21 ĐỘ SÂU GIẢ a b chọn cho độ sâu giả nằm [-1, 1] – chọn z* = -1 Pz = - N – chọn z* = Pz = - F F+N − FN a=− ,b = F−N F−N Faculty of Computer Science and Engineering - HCMUT Slide 22 SỬ DỤNG TỌA ĐỘ ĐỒNG NHẤT Biểu diễn tọa độ đồng P = (Px, Py, Pz) P = (Px, Py, Pz, 1) vector v = (vx, vy, vz) v = (vx, vy, vz, 0) Mở rộng cách biểu diễn đồng P = (wPx, wPy, wPz, w), cách điểm nằm tia, điểm vơ có w=0 (3, 6, 2, 3) tọa độ thông thường (1, 2, 2/3) Cách chuyển đổi: – thông thường đồng (thêm 1) – đồng thông thường (chia cho thành phần tọa độ thứ bỏ thành phần tọa độ thứ 4) Faculty of Computer Science and Engineering - HCMUT Slide 23 SỬ DỤNG TỌA ĐỘ ĐỒNG NHẤT Nhân với phép biến đổi affine 2 −1 0 0 wPx wQx wPy wQ y = − wPz wQz w w Nhân với ma trận chiếu (phép biến đổi phối cảnh) N 0 0 0 N 0 0 a −1 wPx wNPx wPy wNPy = w( aPz + b) b wPz w − wPz Faculty of Computer Science and Engineering - HCMUT Slide 24 SỬ DỤNG TỌA ĐỘ ĐỒNG NHẤT Phép chia phối cảnh Py aPz + b Px N ,N , − Pz − Pz − Pz Phép biến đổi phối cảnh Py aPz + b Px ( Px , Py , Pz ) → N , N , − Pz − Pz − Pz Phép chiếu trực giao Py aPz + b Px N → ,N , − Pz − Pz − Pz Py Px N ,N ,0 − Pz − Pz (phép chiếu phối cảnh) = (phép biến đổi phối cảnh) + (phép chiếu trực giao) Faculty of Computer Science and Engineering - HCMUT Slide 25 ... v.z; m[13] = -eVec.dot(v); m[2] = n.x ; m[6] = n.y; m[10] = n.z; m[14] = -eVec.dot(n); m[3] = ; m [7] = ; m[11] = ; m[15] = 1.0; glMatrixMode(GL_MODELVIEW); glLoadMatrixf(m); } void Camera :: set(Point3... ( x*, y*) = N ,N − Pz − Pz Faculty of Computer Science and Engineering - HCMUT Slide 17 HÌNH CHIẾU PHỐI CẢNH CỦA ĐT Phép chiếu đường thẳng song song - đt qua A = (Ax, Ay, Az) có hướng