intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng môn Đồ họa và hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở

Chia sẻ: Ti Vu | Ngày: | Loại File: PDF | Số trang:9

63
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng trình bày những nội dung sau: The Rendering Pipeline - 3D, phép biến đổi Transformation, Rendering - Transformations, rời rạc hóa điểm ảnh, thuật toán DDA, giải thuật Bresenham, giải thuật trung điểm-Midpoint,... Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng môn Đồ họa và hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở

Các giải thuật sinh các thực thể<br /> cơ sở<br /> <br /> Rendering Pipeline: 3-D<br /> Transform<br /> Illuminate<br /> Transform<br /> Clip<br /> Project<br /> <br /> Le Tan Hung<br /> hunglt@it-hut.edu.vn<br /> 0913030731<br /> <br /> Rasterize<br /> <br /> Model & Camera<br /> Parameters<br /> <br /> The Rendering Pipeline: 3-D<br /> <br /> z<br /> z<br /> <br /> Modeling<br /> Transforms<br /> <br /> • Các điểm của hệ thống tọa độ 3D thế giới thực<br /> <br /> Lighting<br /> Calculations<br /> <br /> • Các điểm bóng theo mô hình chiếu sáng<br /> <br /> Viewing<br /> Transform<br /> <br /> • Các điểm trong mô hình hệ tọa độ Camera hay tọa độ điểm nhìn<br /> <br /> Clipping<br /> <br /> • Các tọa độ điểm của vùng hình chóp cụt với điểm nhìn xác định<br /> <br /> z<br /> <br /> –<br /> –<br /> <br /> Rendering: Transformations<br /> <br /> Modeling transforms<br /> <br /> –<br /> <br /> Modeling transforms<br /> Viewing transforms<br /> Projection transforms<br /> <br /> • Điểm 22-D theo tọa độ màn hình sau phép chiếu được xén tỉa<br /> <br /> Rendering: Transformations<br /> –<br /> <br /> Display<br /> <br /> screen space- không gian màn hình<br /> model space Không gian mô hình<br /> (a.k.a. object space or world space)<br /> 3 loại phép biến đổi:<br /> <br /> –<br /> <br /> z<br /> <br /> Framebuffer<br /> <br /> Phép biến đổi Transformations<br /> <br /> Scene graph<br /> Object geometry<br /> <br /> Projection<br /> Transform<br /> <br /> Rendering Pipeline<br /> <br /> z<br /> <br /> Size, place, scale, and rotate objects parts of the<br /> model w.r.t. each other<br /> Object coordinates Æ world coordinates<br /> <br /> Viewing transform<br /> –<br /> <br /> Rotate & translate the world to lie directly in front of<br /> the camera<br /> z<br /> z<br /> <br /> –<br /> <br /> Typically place camera at origin<br /> Typically looking down -Z axis<br /> <br /> World coordinates Æ view coordinates<br /> <br /> Y<br /> Y<br /> X<br /> <br /> Z<br /> X<br /> <br /> Z<br /> <br /> 1<br /> <br /> Rendering: Transformations<br /> z<br /> <br /> Projection transform<br /> –<br /> <br /> Apply perspective foreshortening<br /> <br /> –<br /> <br /> View coordinates Æ screen coordinates<br /> <br /> z<br /> <br /> Rendering: Transformations<br /> z<br /> <br /> Distant = small: the pinhole camera model<br /> <br /> z<br /> z<br /> <br /> All these transformations involve shifting<br /> coordinate systems (i.e., basis sets)<br /> Oh yeah, that’s what matrices do…<br /> Represent coordinates as vectors, transforms<br /> as matrices<br /> <br /> ⎡X ′⎤ ⎡cos θ<br /> ⎢ ′⎥ = ⎢ θ<br /> ⎣Y ⎦ ⎣sin<br /> z<br /> <br /> Rendering: Transformations<br /> z<br /> <br /> Homogeneous coordinates: represent<br /> coordinates in 3 dimensions with a 4-vector<br /> –<br /> <br /> Denoted [x, y, z, w]T<br /> <br /> –<br /> <br /> To get 3-D coordinates, divide by w:<br /> [x’, y’, z’]T = [x/w, y/w, z/w]T<br /> <br /> z<br /> <br /> z<br /> z<br /> <br /> Note that w = 1 in model coordinates<br /> <br /> Transformations are 4x4 matrices<br /> Why? To handle translation and projection<br /> <br /> Multiply matrices = concatenate transforms!<br /> <br /> The Rendering Pipeline: 3-D<br /> Scene graph<br /> Object geometry<br /> <br /> z<br /> <br /> Illuminating a scene: coloring pixels according to<br /> some approximation of lighting<br /> –<br /> –<br /> <br /> z<br /> <br /> Global illumination: solves for lighting of the whole<br /> scene at once<br /> Local illumination: local approximation, typically<br /> lighting each polygon separately<br /> <br /> Interactive graphics (e.g., hardware) does only<br /> local illumination at run time<br /> <br /> Result:<br /> <br /> Modeling<br /> Transforms<br /> <br /> • All vertices of scene in shared 33-D “world” coordinate system<br /> <br /> Lighting<br /> Calculations<br /> <br /> • Vertices shaded according to lighting model<br /> <br /> Viewing<br /> Transform<br /> <br /> • Scene vertices in 33-D “view” or “camera” coordinate system<br /> <br /> Clipping<br /> Projection<br /> Transform<br /> <br /> Rendering: Ánh sáng - Lighting<br /> <br /> −sin θ ⎤ ⎡X ⎤<br /> ⎥⎢ ⎥<br /> cos θ ⎦ ⎣Y ⎦<br /> <br /> • Exactly those vertices & portions of polygons in view frustum<br /> • 2-D screen coordinates of clipped vertices<br /> <br /> The Rendering Pipeline: 3-D<br /> Scene graph<br /> Object geometry<br /> <br /> Result:<br /> <br /> Modeling<br /> Transforms<br /> <br /> • All vertices of scene in shared 33-D “world” coordinate<br /> <br /> Lighting<br /> Calculations<br /> <br /> • Vertices shaded according to lighting model<br /> <br /> system<br /> <br /> Viewing<br /> Transform<br /> <br /> • Scene vertices in 33-D “view” or “camera” coordinate<br /> system<br /> <br /> Clipping<br /> <br /> • Exactly those vertices & portions of polygons in view<br /> frustum<br /> <br /> Projection<br /> Transform<br /> <br /> • 2-D screen coordinates of clipped vertices<br /> <br /> 2<br /> <br /> Rendering: Clipping<br /> z<br /> <br /> Rendering: Xén tỉa - Clipping<br /> <br /> Clipping a 3-D primitive returns its intersection<br /> with the view frustum:<br /> <br /> z<br /> <br /> Clipping is tricky!<br /> <br /> The Rendering Pipeline: 3-D<br /> Transform<br /> <br /> z<br /> <br /> Transform<br /> <br /> z<br /> <br /> –<br /> <br /> Project<br /> <br /> –<br /> <br /> Rasterize<br /> <br /> z<br /> Framebuffer<br /> <br /> z<br /> z<br /> <br /> Tương ứng là các ma trận<br /> <br /> In: 1 polygon<br /> Out: 2 polygons<br /> <br /> Collection of primitives, other objects<br /> Associated matrix for transformations<br /> <br /> –<br /> <br /> 4 wheels on a car, 2 arms on a robot<br /> <br /> Modeling: The Scene Graph<br /> <br /> Đồ thị cảnh scene graph : cây đồ thị lưu trữ đối<br /> tượng, quan hệ giũa các đối tượng và các phép<br /> biến đổi trên đối tượng đó<br /> Nút là đối tượng;<br /> Cành là các thực thể biến đổi<br /> –<br /> <br /> Clip<br /> <br /> Instancing: using same geometry for multiple<br /> objects<br /> <br /> Display<br /> <br /> Modeling: The Scene Graph<br /> z<br /> <br /> In: 3 vertices<br /> Out: 6 vertices<br /> <br /> Common interactive 3-D primitives: points,<br /> lines, polygons (i.e., triangles)<br /> Organized into objects<br /> <br /> Clip<br /> <br /> Rendering Pipeline<br /> <br /> Clip<br /> <br /> Modeling: The Basics<br /> <br /> Illuminate<br /> <br /> Model & Camera<br /> Parameters<br /> <br /> We will have a whole assignment on clipping<br /> <br /> –<br /> <br /> z<br /> z<br /> <br /> Traverse the scene graph in depth-first order,<br /> concatenating transformations<br /> Maintain a matrix stack of transformations<br /> Robot<br /> <br /> Visited<br /> Head<br /> <br /> Robot<br /> <br /> Body<br /> <br /> Unvisited<br /> <br /> Head<br /> <br /> Body<br /> <br /> Active<br /> <br /> Matrix<br /> Stack<br /> <br /> Mouth<br /> <br /> Eye<br /> <br /> Leg<br /> <br /> Trunk<br /> <br /> Arm<br /> <br /> Foot<br /> Mouth<br /> <br /> Eye<br /> <br /> Leg<br /> <br /> Trunk<br /> <br /> Arm<br /> <br /> 3<br /> <br /> Modeling: The Camera<br /> z<br /> <br /> Finally: need a model of the virtual camera<br /> –<br /> <br /> Can be very sophisticated<br /> <br /> –<br /> <br /> Interactive graphics (OpenGL):<br /> <br /> z<br /> <br /> z<br /> <br /> Camera pose: position & orientation<br /> Captured in viewing transform (i.e., modelview matrix)<br /> <br /> –<br /> –<br /> <br /> (Scan Conversion rasterization)<br /> <br /> z<br /> <br /> –<br /> <br /> z<br /> <br /> Field of view<br /> Aspect ratio<br /> Near & far clipping planes<br /> <br /> Rời rạc hoá điểm ảnh<br /> <br /> –<br /> –<br /> –<br /> –<br /> <br /> Homogeneous coordinates Æ 4x4 matrix!<br /> See OpenGL Appendix F for the matrix<br /> <br /> The projection matrix premultiplies the viewing<br /> matrix, which premultiplies the modeling matrices<br /> –<br /> <br /> Actually, OpenGL lumps viewing and modeling<br /> transforms into modelview matrix<br /> <br /> Biểu diễn đoạn thẳng<br /> <br /> Là tiến trình sinh các đối tượng hình học cơ sở bằng<br /> phương pháp xấp xỉ dựa trên lưới phân giải của màn<br /> hình<br /> Tính chất các đối tượng cần đảm bảo :<br /> –<br /> <br /> Camera parameters (FOV, etc) are encapsulated<br /> in a projection matrix<br /> –<br /> <br /> Pinhole camera model<br /> –<br /> <br /> z<br /> <br /> z<br /> <br /> Field of view, depth of field, distortion, chromatic aberration…<br /> <br /> –<br /> <br /> z<br /> <br /> Modeling: The Camera<br /> <br /> z<br /> <br /> Biểu diễn tường minh<br /> <br /> (y-y1)/( x-x1) = ( y2-y1)/( x2-x1)1<br /> y = kx + m<br /> <br /> smooth<br /> continuous<br /> pass through specified points<br /> uniform brightness<br /> efficient<br /> <br /> –<br /> <br /> k = (y2-y1)/( x2-x1)<br /> <br /> –<br /> <br /> m = y1- kx1<br /> <br /> –<br /> <br /> z<br /> <br /> Δy = k Δx<br /> <br /> P(x2 , y2)<br /> <br /> Biểu diễn không tường minh<br /> <br /> (y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0<br /> hay rx + sy + t = 0<br /> <br /> z<br /> <br /> –<br /> <br /> s = -(x2-x1 )<br /> <br /> –<br /> <br /> r = (y2-y1) và t = x2y1 - x1y2<br /> <br /> Biểu diễn tham biến<br /> <br /> u<br /> P(x1, y1)<br /> <br /> P(u) = P1 + u(P2 - P1)<br /> u [0,1]<br /> X = x1 + u( x2 - x1 )<br /> Y = y1 + u( y2 - y1 )<br /> <br /> Thuật toán DDA<br /> (Digital Differential Analizer)<br /> <br /> Sinh đường tròn<br /> Scan Converting Circles<br /> z<br /> <br /> Explicit: y = f(x)<br /> <br /> Giải thuật thông thường<br /> <br /> y = ± R2 − x2<br /> <br /> z<br /> <br /> Usually, we draw a quarter circle by<br /> incrementing x from 0 to R in unit steps<br /> and solving for +y for each step.<br /> Parametric:<br /> <br /> x = R cosθ<br /> y = R sin θ<br /> <br /> z<br /> <br /> m<br /> <br /> - by stepping the angle from 0 to 90<br /> - avoids large gaps but still insufficient.<br /> <br /> Implicit: f(x) = x2+y2-R2<br /> If f(x,y) = 0 then it is on the circle.<br /> f(x,y) > 0 then it is outside the circle.<br /> f(x,y) < 0 then it is inside the circle.<br /> <br /> DrawLine(int x1,int y1, int x2,int y2,<br /> int color)<br /> {<br /> float y;<br /> int x;<br /> for (x=x1; x 0 ⇒ yi+1 = yi<br /> Pi+1 = Pi - 2Δy<br /> <br /> z<br /> z<br /> <br /> P1 = Δx(d1 - d2)<br /> P1 = -2Δy + Δx<br /> <br /> Bresenham’s Algorithm: Midpoint<br /> Algorithm<br /> z<br /> <br /> Sử dụng phương pháp biểu diễn không tường minh<br /> <br /> ax + by + c = 0<br /> axi + byi + c = 0 ⇒ ( xi , yi )<br /> <br /> axi + byi + c < 0 ⇒ ( xi , yi )<br /> <br /> z<br /> <br /> z<br /> <br /> xi+1<br /> <br /> else d1 > d2 => yi+1 = yi<br /> z D = d1 - d2<br /> = -2k(xi + 1) + 2yi - 2b + 1<br /> z Pi = ΔxD = Δx (d1 - d2)<br /> <br /> on line<br /> above line<br /> <br /> axi + byi + c > 0 ⇒ ( xi , yi ) below line<br /> Tại mỗi trung điểm của đoạn thẳng giá trị được tính<br /> là:<br /> 1⎞<br /> ⎛<br /> di = a( xi +1) + b⎜ yi + ⎟ + c<br /> 2⎠<br /> ⎝<br /> <br /> Jack Bresenham 1965 / Pitteway 1967<br /> VanAken áp dụng cho việc sinh các đường<br /> thẳng và đường tròn 1985<br /> Các công thức đơn giản hơn, tạo được các<br /> điểm tương tự như với Bresenham<br /> d = F (xi + 1, yi + 1/2) là trung điểm của đoạn<br /> AB<br /> Việc so sánh, hay kiểm tra M sẽ được thay<br /> bằng việc xét giá trị d.<br /> – Nếu d > 0 điểm B được chọn, yi+1 = yi<br /> – nếu d < 0 điểm A được chọn. ⇒ yi+1 = yi +<br /> 1<br /> – Trong trường hợp d = 0 chúng ta có thể<br /> chọn điểm bất kỳ hoặc A, hoặc B.<br /> <br /> Ayi+1<br /> M<br /> B<br /> <br /> M<br /> <br /> ( xi , yi )<br /> xi<br /> <br /> xi+1<br /> <br /> Bresenham’s Algorithm: Midpoint<br /> Algorithm<br /> z<br /> <br /> If di > 0 then chọn điểm A ⇒ trung điểm tiếp theo sẽ có dạng:<br /> <br /> 3⎞<br /> 3⎞<br /> ⎛<br /> ⎛<br /> ⎜ xi + 2, yi + ⎟ ⇒ di+1 = a( xi + 2) + b⎜ yi + ⎟ + c<br /> 2⎠<br /> 2⎠<br /> ⎝<br /> ⎝<br /> = di + a + b<br /> <br /> Chúng ta gọi di là biến quyết định của bước thứ i<br /> <br /> 5<br /> <br />
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
5=>2