5 Hiện thực chương trình
5.1.3 Bài toán hiển thị nét đứt cho các đường bị khuất (trong
(trong không gian 3D)
Ẹ OpenGL không hỗ trợ xác định các đối tượng bị khuất trong một mơ hình Ẹ Mỗi pixel có chế độ lưu giá trị chiều sâu của điểm đó nếu nó được vẽ Ẹ OpenGL hỗ trợ kiểm tra, so sánh chiều sâu của điểm sắp được vẽ với giá trị
chiều sâu được lưu tại pixel đó Ẹ Phương pháp:
Ê Bật kiểm tra chiều sâu: glEnable(GLDEPTH_TEST)
Ê Tạo một lớp màng chiều sâu ẩn:
∗ Bật chế độ chiều sâu nhỏ hơn: glDepthFunc(GL_LESS) ∗ Bật chế độ ghi lại chiều sâu: glDepthMask(GL_TRUE)
Tại mỗi pixel, nếu có điểm mới sắp được vẽ sẽ kiểm tra: nếu chiều sâu của điểm đó nhỏ hơn chiều sâu hiện tại của pixel
→ Điểm đó sẽ được vẽ lên pixel, đồng thời cập nhật lại chiều sâu của pixel đó
∗ Vẽ hình với màu sắc trong suốt (alpha = 0) và tạo độ chênh lệch chiều sâu để tránh việc những đường thấy được có cùng chiều sâu với lớp màng này không được hiển thị: glPolygonOffset(2.0, 1.0);
Ê Vẽ đường nét đứt cho các đối tượng ở xa:
∗ Bật chế độ chiều sâu lớn hơn: glDepthFunc(GL_GREATER) ∗ Tắt chế độ ghi lại chiều sâu: glDepthMask(GL_FALSE)
Tại mỗi pixel, nếu có điểm mới sắp được vẽ sẽ kiểm tra: nếu chiều sâu của điểm đó lớn hơn chiều sâu hiện tại của pixel
→ Điểm đó sẽ được vẽ lên pixel, nhưng khơng cập nhật lại chiều sâu của pixel đó
5.1 Các bài tốn và khó khăn gặp phải Ê Vẽ nét liền cho các đối tượng ở gần nhất:
∗ Bật chế độ chiều sâu nhỏ hơn hoặc bằng: glDepthFunc(GL_LEQUAL) ∗ Bật chế độ ghi lại chiều sâu: glDepthMask(GL_TRUE)
Tại mỗi pixel, nếu có điểm mới sắp được vẽ sẽ kiểm tra: nếu chiều sâu của điểm đó nhỏ hơn hoặc bằng chiều sâu hiện tại của pixel → Điểm đó sẽ được vẽ lên pixel, và cập nhật lại chiều sâu của pixel đó ∗ Vẽ hình với định dạng là đường nét liền
5.1 Các bài tốn và khó khăn gặp phải