2012-03-05 33 views
13

Tôi có cảnh bằng một hình tam giác đơn giản. Và tôi đang sử dụng phép chiếu phối cảnh. Tôi đã thiết lập ma trận MVP của mình (với sự trợ giúp của GLM) như sau:Thay đổi Từ Phối cảnh sang Ma trận Chỉnh hình

glm::mat4 Projection = glm::perspective(45.0f, 4.0f/3.0f, 0.1f, 100.0f); 
glm::mat4 View  = glm::lookAt(
    glm::vec3(0,0,5), // Camera is at (0,0,5), in World Space 
    glm::vec3(0,0,0), // and looks at the origin 
    glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down) 
); 
glm::mat4 Model  = glm::mat4(1.0f); 
glm::mat4 MVP  = Projection * View * Model; 

Và mọi thứ đều ổn, tôi có thể thay đổi giá trị của máy ảnh và hình tam giác vẫn hiển thị đúng cách.

Nhưng tôi muốn sử dụng phép chiếu chính xác. Và khi tôi thay đổi ma trận chiếu thành orthographic, nó hoạt động không thể đoán trước, tôi không thể hiển thị hình tam giác, hoặc tôi chỉ thấy một phần nhỏ của nó ở góc màn hình. Để sử dụng phép chiếu chính xác, tôi thực hiện điều này:

glm::mat4 Projection = glm::ortho(0.0f, 800.0f, 600.0f, 0.0f,-5.0f, 5.0f); 

trong khi tôi không thay đổi bất kỳ thứ gì trong ma trận Xem và Mô hình. Và tôi không hoạt động đúng cách.

Tôi chỉ cần đẩy theo đúng hướng, tôi có đang làm gì sai không? Tôi đang thiếu gì, tôi nên làm gì để thiết lập đúng cách chiếu chiếu?

PS tôi không biết nếu nó là cần thiết, nhưng đó là những tọa độ của tam giác:

static const GLfloat g_triangle[] = { 
    -1.0f, 0.0f, 0.0f, 
    1.0f, 0.0f, 0.0f, 
    0.0f, 2.0f, 0.0f, 
}; 

Trả lời

14

tam giác của bạn là khoảng 1 đơn vị lớn. Nếu bạn sử dụng ma trận chiếu hình học có chiều rộng 800/600, thì hình tam giác của bạn sẽ xuất hiện rất nhỏ. Chỉ cần giảm các giới hạn của ma trận chỉnh hình và đảm bảo rằng hình tam giác nằm trong khu vực này (ví dụ: đỉnh đầu tiên nằm ngoài khung nhìn, vì tọa độ x của nó nhỏ hơn 0).

Ngoài ra, hãy đảm bảo rằng hình tam giác của bạn không bị xóa bằng cách lấy nét mặt sau hoặc cắt xén. Btw .. giá trị âm cho zNear hơi khác một chút nhưng nên làm việc cho các phép chiếu chính xác.

+0

@Nico_Schertler Cảm ơn, tôi thực sự ngu ngốc: \ Đã làm việc! nếu tôi có thể hỏi bạn chỉ một điều nữa - tôi đã cố gắng loại bỏ hoàn toàn mô hình và xem ma trận và mọi thứ vẫn được hiển thị đúng cách! Tôi có cần chỉ ma trận chiếu khi tôi đang sử dụng phương pháp chỉnh hình không? Xin lỗi nếu câu hỏi có chút khó hiểu, tôi mới bắt đầu với OpenGL vài ngày trước. Cảm ơn rất nhiều! – IanDess

+1

Hệ tọa độ không được định dạng mặc định là trên cùng bên trái (-1,1), dưới cùng bên phải (1, -1). z-phối hợp phụ thuộc vào việc bạn sử dụng một hệ thống tọa độ RH hoặc LH. Nếu mức độ này phù hợp với nhu cầu của bạn, bạn có thể để ma trận chiếu tại danh tính và chỉ sử dụng ma trận chế độ xem để điều hướng cảnh. Nếu không, bạn có thể sử dụng ma trận chiếu để mở rộng khung cảnh, v.v. –

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