2013-03-07 28 views
6

Cố gắng để có được ít nhất rất đơn giảnpart 1 of the Lighthouse3D Radar Frustum Culling tutorial để làm việc ... và tôi hoàn toàn bối rối rằng tôi thậm chí không thể làm cho phần đó hoạt động trong trình kết xuất của tôi. Vì vậy, bước đầu tiên là: bạn kiểm tra nếu một điểm là ở phía trước gần mặt phẳng hoặc phía sau mặt phẳng xa, và đầu-cull nếu đó là trường hợp. (Nếu không, bạn sẽ thực hiện các bài kiểm tra tiếp theo nhưng tôi chỉ bị mắc kẹt với phần đầu tiên đó.)"Cách tiếp cận Radar" tới Frustum Culling: thất bại trong thử nghiệm đơn giản đầu tiên?

Tôi sử dụng trung tâm không gian thế giới (x1y2z3) của khối 2x2 và có máy ảnh để di chuyển và xoay tự do. Tất cả các công cụ vector và ma trận của tôi phải khá chắc chắn vì trình kết xuất khác hoạt động tốt. Vì vậy, đây là của tôi đi (trong Go) của phần đầu tiên này, đơn giản "Z vs gần hoặc xa" thử nghiệm:

func (cam *Camera) frustumHasPoint(point *Vec3) bool { 
    var pc Vec3 
    v := point.Sub(&cam.Controller.Pos) // point minus camPos 
    ref := cam.Controller.dir // take a copy of camDir 
    ref.Z = -ref.Z 
    ref.Normalize() // camDir was already normalized but anyway... 
    pc.Z = v.Dot(&ref) 
    if pc.Z > cam.Perspective.ZFar || pc.Z < cam.Perspective.ZNear { 
     return false 
    } 
    return true 
} 

Bây giờ tại sao tôi đảo ngược Z ref? Bởi vì trong hướng dẫn họ viết: "Lưu ý rằng tham chiếu trong hình không phải là một hệ thống tay phải (như trong OpenGL), bởi vì định hướng của Z đã được đảo ngược để làm cho hướng dẫn trực quan hơn" - tốt, trong hướng dẫn GL tất nhiên điều này có tác dụng ngược lại ...

Vâng, nếu làm ngược Z như trên, nó sẽ tiêu tốn hơn 50% thời gian; nếu tôi không làm như vậy, thì "quá cùn" khoảng 98% thời gian ..

Tôi đang thiếu cái gì?

+0

Tôi tin rằng tất cả các tọa độ _z_ sẽ hoạt động như nhau. (ví dụ: v.z cũng nên được nhân đôi.) –

+0

'Cam.Controller.dir' là gì - đường ngắm (vector camera được định hướng dọc theo)? Nếu vậy, bạn không muốn phủ nhận z. Giả sử rằng cả máy ảnh và điểm của bạn đều nằm trong tọa độ thế giới (nghĩa là, với tất cả các biến đổi [ví dụ: dịch, tỷ lệ, v.v.] áp dụng cho chúng), ngoài Z từ chối, phần còn lại của toán học của bạn có vẻ hợp lý. Đảo ngược Z sẽ làm cho sản phẩm chấm của bạn âm, có vẻ như nó sẽ khiến cho hầu như tất cả các điểm của bạn bị hủy nếu các giá trị gần và xa của bạn là dương. – radical7

Trả lời

1

Đã giải quyết. Nguyên nhân là trục trặc não ... hướng dẫn rõ ràng viết về việc x/y/z trục đầu tiên để mô tả sự thất vọng, bằng cách nào đó tôi đã bỏ lỡ điều đó ..

+0

Bạn có thể chấp nhận câu trả lời của riêng mình để đánh dấu câu hỏi này là đã giải quyết :) – nemo

Các vấn đề liên quan