Bài giảng Đồ họa máy tính: Đồ họa ba chiều cung cấp cho người học những kiến thức như: Giới thiệu; Biểu diễn đối tượng đồ họa ba chiều; Một số công thức hình học; Các phép chiếu; Mặt ba chiều có quy luật. Mời các bạn cùng tham khảo!
ĐỒ HỌA BA CHIỀU NGÔ QUỐC VIỆT 2009 Giới thiệu Biểu diễn đối tượng đồ họa ba chiều Một số cơng thức hình học Các phép chiếu Mặt ba chiều có quy luật Bài tập Giải đáp thắc mắc OpenGL-GLUT (thư viện đồ họa 3D) Graphics Gems I, II, III, IV (mã nguồn mở) Modeling Transformation Lighting Biến đổi vô hệ toạ độ giới 3D Chiếu sáng theo ánh sáng độ phản chiếu Viewing Transformation Biến đổi vô hệ toạ độ 3D camera Projection Transformation Biến đổi vơ hệ toạ độ hình into 2D Clipping Scan Conversion Image Loại bỏ thực thể ngồi vùng nhìn camera Vẽ pixel (dán ảnh, khử mặt khuất, … Mơ hình đối tượng ba chiều Points Wire frame Mesh Solid Đồ họa OpenGL với thư viện GLUT Nguyên tắc bàn tay trái bàn tay phải Right-hand sử dụng OpenGL Góc xoay dương Thông qua ma trận chiếu 4x4 Gồm MODELVIEW PROJECTIONVIEW Model View: Tác động trực tiếp lên đối tượng (hay scene), vị trí camera Sử dụng glMatrixView(GL_MODELVIEW) Projection View: mô tả kiểu camera Phép biến đổi tác động lên camera (lens, field of view) glMatrixView(GL_PROJECTION) 3D Cartesian coordinate system Gốc (0,0,0) tâm hình Nguồn -Greg Sidelnikov Toạ độ đối tượng toạ độ thô chuyển cho OpenGL với hàm glVertex*() Toạ độ đối tượng chuyển thành toạ độ mắt nhìn với phép biến đổi qua ma trận ModelView Toạ độ mắt nhìn đượ chuyển thành toạ độ Clip qua ma trận Projection Toạ độ clip X, Y, Z chuyển thành Clip Coordinate W để tạo Normalized Device Coordinates Normalized Device Coordinates tỉ lệ tịnh tiến qua tham số viewport để tạo toạ độ Window 10 Xét công thức chiếu phối cảnh điểm 3D Do góc trái hình (0,0) Điểm (0,0,-16) chiếu tâm hình Giá trị HALFWIDTH HALFHEIGHT nửa độ rộng cao hình 22 Giá trị ViewingDistance liên quan đến viewer ViewingDistance lớn khối nhìn nhỏ đối tượng nhỏ Có mâu thuẫn với cơng thức ? 23 Viewing Volume cò gọi Clipping volume Frustum Mặt phẳng gần mặt xén xa Mọi thứ sau mặt xén xa invisible Frustum khơng gian hai mặp phẳng Viewing Distance khoảng cách viewer mặt gần Chỉ nhìn thấy view volumn Nguồn -Greg Sidelnikov 24 1 0 Mperspective 0 0 x 1 y 0 z 0 z d 0 0 0 1d 0 0 1d 0 0 0 0 0 x 0 y 0 z 0 Trong tọa độ 3-D: x , z d y , z d d 25 Chỉ vùng nhìn hình theo đơn vị pixel Xác lập GL nối với cửa sổ với kích thước glViewport xác định biến đổi từ toạ độ normalized device sang toạ độ cửa sổ, với (xnd, ynd) toạ độ chiếu điểm 3D, (x, y) góc trái viewport Normalized coordinates có miền xác định[-1 1] 26 Xác lập ma trận chiếu phối cảnh gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) fovy: liếc theo góc thẳng đứng; aspect: tỉ lệ ngang dọc; zNear, zFar: khoảng xén Ma trận chiếu xác định sau 27 Đồng với mắt nhìn Ln nằm tâm “view” ảo Camera có hệ toạ độ riêng Nguồn -Greg Sidelnikov 28 Điểm: Tập điểm ba chiều nhằm biểu diễn đối tượng typedef struct tagPoint3D { double x, y, z; } Point3D; Wireframe: tập điểm ba chiều cạnh nối điểm nhằm biểu diễn đối tượng 29 Sử dụng mảng, DSLK tập hợp để lưu trữ điểm cạnh đối tượng typedef struct tagEdge3D { int idEdge; Point3D end1, end2; //hai đỉnh cạnh data edgeProperties; //tính chất cạnh } Edge3D; typedef struct tagWirreFrame { //có thể chứa thêm mặt int numVertices, numVerEdges; //số đỉnh, số cạnh Point3D arrPoints[]; //mảng chứa tập đỉnh Edge3D arrEdges[]; //mảng chứa tập cạnh } 30 One Possible Data Structure: Point3D = record x, y, z : real; end ; Figure = array (1 8, 8) of Point3D; Map = array (1 8, 8) of boolean; Map(i, j) = true if i, j connected else Map(i, J) = false Example Map(1, 4) = true but Map(1, 8) = false for I in loop for J in loop if Map (I,J) then Draw line between point I and point J 31 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ); eye[XYZ]: vị trí camera toạ độ thực look[XYZ]: điểm nhìn camera up[XYZ]: vector xác định trục đứng camera Tạo ma trận nhằm biến đổi điểm giới thực vào hệ toạ độ camera Camera at origin Nhìn theo hướng -Z (âm Z) Vector hướng lên dọc theo trụcY 32 void SetUpViewing() { // The viewport isn’t a matrix, it’s just state glViewport( 0, 0, window_width, window_height ); // Set up camera->screen transformation first glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 60, 1, 1, 1000 ); // fov, aspect, near, far // Set up the model->camera transformation glMatrixMode( GL_MODELVIEW ); gluLookAt( 3, 3, 2, // eye point 0, 0, 0, // look at point 0, 0, ); // up vector glRotatef( theta, 0, 0, ); // rotate the model glScalef( zoom, zoom, zoom ); // scale the model } 33 Mơ hình kinh điển đồ họa chiều (tương tự ảnh Lena xử lý ảnh) Do Martin Newell xây dựng 1975 Dữ liệu tập tọa độ chiều Các mặt Bezier 34 Wireframe Points 35 Thực hành: cài đặt hiển thị điểm, line, polyline với OpenGL Sử dụng GLUT với Console Application Windows Application 36 ... Giới thiệu Biểu diễn đối tượng đồ họa ba chiều Một số công thức hình học Các phép chiếu Mặt ba chiều có quy luật Bài tập Giải đáp thắc mắc OpenGL-GLUT (thư viện đồ họa 3D) Graphics Gems I, II,... Projection Miền giá trị toạ độ trục từ -Wc đến Wc Phối cảnh thực Clip Coordinates tạo Normalized Device Coordinates, với miền giá trị -1 to cho trục Ngô Quốc Việt- 2010 11 Chiếu song song Chiếu phối... Matrix 7-1 3 17 Đối tượng gần người xem lớn Đường song song hội tụ điểm • Điểm hội tụ tâm hình • Xác định view frustum 18 • Khi làm việc với đồ họa 3-D graphics, xem cửa sổ hai chiều giới 3-D: