2009-05-26 27 views

Trả lời

6

Tôi nghĩ rằng đó là vì lý do tương tự mà có một hàm glColor. Nếu bình thường của toàn bộ hình học của bạn là giống nhau cho tất cả các đỉnh bạn có thể chỉ định nó với glNormal trước khi gọi glDrawArrays/glDrawElements.

+0

Chính xác là nó .. Trên OpenGL | ES nó glNormal thiết lập mặc định bình thường. Imho họ có thể sẽ làm tốt hơn nếu họ đã gỡ bỏ chức năng. glMultiTexCoord tồn tại cho cùng một lý do btw. –

0

Lý do duy nhất tôi có thể nghĩ là nó ở đó để hỗ trợ biểu diễn hiệu quả các bề mặt có nhiều đỉnh chia sẻ cùng một bình thường. Với phương pháp dựa trên mảng, bạn phải tạo một mảng có cùng giá trị được lặp lại cho mỗi đỉnh, làm lãng phí bộ nhớ.

Tôi thấy nó tò mò rằng manual page (OpenGL ES 1.1, ở đó) thậm chí không đề cập đến nó. Tôi đã tìm thấy một số iPhone programming tutorial (PDF) thậm chí còn tuyên bố glNormal() không còn ở đó nữa.

+0

Bởi "nơi có nhiều đỉnh chia sẻ cùng một bình thường", bạn có nghĩa là "nơi tất cả các đỉnh được vẽ trong một lệnh gọi' glDrawArrays' có chung một bình thường không? " Đó có phải là một sự hiểu biết chính xác về nó? – Gravity

0

OpenGL ES 1.1 không đề cập đến nó nhưng có đó là lỗi trong hướng dẫn lập trình iPhone.

0

Bạn không được phép sử dụng các chức năng này nữa. Dính vào glXXXXArray(). Tôi nghi ngờ rằng họ chỉ là trái overs treo ở đó để làm cho OpenGL để OpenGL ES chuyển dễ dàng hơn.

0

Trong OpenGL | ES glNormal3f() không phải là một hàm phản đối,
vì nó rất hữu ích cho rendering phẳng 2D hình dạng trong {X, Y} máy bay:

thay vì sử dụng:

glEnableClientState(GL_NORMAL_ARRAY); 
glNormalPointer(GL_FLOAT, 0, vbuf + normal_offset); 

nó là đơn giản và nó đòi hỏi ít bộ nhớ VBO gọi:

glNormal3f(0, 0, 1); 
+1

vui lòng đọc phần trợ giúp định dạng để hiểu cách gắn thẻ mã :-) – kleopatra

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