2011-09-22 21 views
7

Tôi phải gửi các thuộc tính đỉnh bằng cách sử dụng glVertexAttribPointer tới các trình tạo bóng trông đợi chúng như được xây dựng trong (gl_Vertex, gl_Color, v.v.).glVertexAttribPointer trên các thuộc tính đỉnh dựng sẵn như gl_Vertex, gl_Normal

Chức năng glVertexAttribPointer cần chỉ định chỉ mục (hoặc vị trí) của mỗi thuộc tính dựng sẵn. Tôi có thể làm điều đó trên việc triển khai NVidia vì vị trí của từng thuộc tính được cố định (xem http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php tại phần "Thuộc tính tùy chỉnh), tuy nhiên tôi không chắc chắn về các vị trí trong việc triển khai ATI. -1 khi cố gắng để có được vị trí của bất kỳ thuộc tính bắt đầu từ bắt đầu bằng "gl_".

tôi nghĩ rằng tôi đang thiếu một cái gì đó và điều này là một vấn đề tầm thường, tuy nhiên tôi đã không tìm thấy giải pháp đúng cho ATI.

+0

Chào mừng bạn đến với SO, tôi hy vọng bạn đã đọc [FAQ] (http://stackoverflow.com/faq). –

Trả lời

7

Các mảng thuộc tính dựng sẵn không được đặt bằng glVertexAttribPointer, nhưng với các chức năng như glVertexPointer, glColorPointer, .... Và bạn bật các thuộc tính này bằng cách gọi glEnableClientState có các hằng số như GL_VERTEX_ARRAY, GL_COLOR_ARRAY, ..., thay vì glEnableVertexAttribArray.

Trong khi trên nVidia glVertexAttribPointer có thể hoạt động, do bí danh các chỉ mục thuộc tính tùy chỉnh với thuộc tính dựng sẵn, đây không phải là tuân thủ chuẩn và tôi chắc chắn bạn không thể mong đợi điều này trên bất kỳ nhà cung cấp phần cứng nào khác. Vì vậy, hãy chắc chắn sử dụng glVertexAttribPointer cho các thuộc tính tùy chỉnh và các hàm glVertexPointer/glNormalPointer/... cho các thuộc tính bultin, cùng với các hàm bật/tắt phù hợp.

Hãy nhớ rằng các thuộc tính dựng sẵn sẽ không còn được dùng nữa, cùng với các chức năng được đề cập. Vì vậy, nếu bạn muốn viết mã OpenGL hiện đại, bạn nên định nghĩa các thuộc tính của riêng mình. Nhưng có thể bạn phải hỗ trợ các trình đổ bóng cũ hoặc không quan tâm đến tính tương thích về phía trước vào lúc này.

+0

Tuyệt vời! Đó là điều tôi nghi ngờ. Tuy nhiên, tôi đã cố gắng để có được nó làm việc bằng cách sử dụng glVertexAttribPointer kể từ khi gl * Pointer cuộc gọi không được chấp nhận trong phiên bản mới hơn của OpenGL. Cảm ơn!!! –

+4

@Pau Các thuộc tính bultin không được dùng nữa, vì vậy nếu bạn sử dụng các thuộc tính này, bạn đã sử dụng chức năng không dùng nữa. Và nếu câu trả lời đã giúp, việc chấp nhận sẽ được đánh giá cao. –

+0

Cảm ơn Christian, câu trả lời của bạn thực sự rất hữu ích. Đó là câu hỏi đầu tiên của tôi về stackoverflow. –

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