Có một vài lựa chọn. Là một phương pháp chung, bộ đệm stpson thường rất tiện dụng trong đó bản vẽ nhất định cần được che đi, giống như phác thảo nơi các vòng tròn chồng lên nhau trong ví dụ của bạn.
Trong trường hợp này, tôi nghĩ rằng điều này có thể được thực hiện dễ dàng mà không cần bộ đệm stpson. Bạn có thể sử dụng bộ đệm độ sâu để loại bỏ các phác thảo nơi các vòng tròn chồng lên nhau. Ý tưởng là bạn vẽ phần bên trong của các vòng tròn thành bộ đệm có chiều sâu (vì chúng ta không muốn nhìn thấy phần bên trong), và sau đó vẽ phác thảo. Bằng cách này, một phần của phác thảo chồng lấp với một vòng tròn khác sẽ được loại bỏ bằng thử nghiệm độ sâu.
Nhắc nhở duy nhất là bạn phải cẩn thận về chiến đấu chuyên sâu. Bạn có thể sử dụng một phần bù nhỏ để đảm bảo rằng các đường viền trên thực tế nằm phía sau phần bên trong và được loại bỏ bằng bài kiểm tra độ sâu. Một thay thế sẽ được sử dụng glPolygonOffset()
.
Giả sử bạn có hai vòng tròn song song với mặt phẳng xy, với các tâm tại (x1, y1, z) và (x2, y2, z). Và bạn có các hàm vẽ này:
// Draw interior part of circle, shown in green in the schematic in the question.
drawInterior(x, y, z);
// Draw outline of circle, shown in red in the schematic in the question.
drawOutline(x, y, z);
Trình tự vẽ sau đó trông như thế này, với delta
một phần bù nhỏ:
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
drawInterior(x1, y1, z + delta);
drawInterior(x2, y2, z + delta);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
drawOutline(x1, y1, z);
drawOutline(x2, y2, z);