xin chào, tôi là một người mới hoàn toàn trong lĩnh vực máy tính, rất xin lỗi nếu đó là một câu trả lời ngu ngốc. Tôi đang cố gắng tạo ra một công cụ 3d đơn giản từ đầu, nhiều hơn cho mục đích giáo dục hơn là sử dụng thực tế.
bây giờ tôi chỉ tính mặt bình thường. theo cách này:
tôi có một đối tượng Surface với trong danh sách của Triangle. tôi tính các quy tắc trong lớp Tam giác, theo cách này:
triangle.computeFaceNormals() {
Vec3D u = v1.sub(v3)
Vec3D v = v1.sub(v2)
Vec3D normal = Vec3D.cross(u,v)
normal.normalized()
this.n1 = this.n2 = this.n3 = normal
}
và khi xây dựng bề mặt:
t = new Triangle(v1,v2,v3)
t.computeFaceNormals()
surface.addTriangle(t)
và tôi nghĩ rằng đây là cách tốt nhất để làm điều đó .. phải không?
Bây giờ .. điều này hoạt động, ok. nhưng ánh sáng nó không được làm mịn. Tôi đang cố gắng tính toán các tiêu chuẩn đỉnh. (Tôi đang thử nghiệm động cơ của mình với các bề mặt hình ống nên tôi có hầu hết các đỉnh được chia sẻ với nhiều hơn một hình tam giác)
Tôi đã tìm thấy thuật toán đơn giản này: đỉnh flipcode bình thường nhưng .. hei thuật toán này có .. độ phức tạp theo cấp số nhân? (nếu bộ nhớ của tôi không làm hỏng nền khoa học máy tính của tôi ..) (tạm thời .. nó có 3 vòng lặp lồng nhau .. tôi không nghĩ đó là cách tốt nhất để làm điều đó ..)
bất cứ đề nghị nào?
t
là kết quả củacomputeFaceNormals
(không trả về gì), không phải là một hình tam giác.