2012-02-16 35 views
9

Tôi muốn hiển thị các mô hình lưới trong OpenGL ES 2.0, nơi nó hiển thị rõ ràng lưới thực tế, vì vậy tôi không muốn tô bóng mượt mà trên mỗi nguyên thủy/tam giác. Chỉ có hai lựa chọn tôi có thể nghĩ về nhữngTôi có thể chỉ định cho mỗi khuôn mặt bình thường trong OpenGL ES và đạt được độ bóng không phẳng/phẳng không?

  1. Mỗi tam giác đã thiết lập riêng của mình normals, tất cả các vuông góc với bề mặt hình tam giác (nhưng sau đó tôi đoán tôi không thể chia sẻ đỉnh trong tam giác với tùy chọn này)
  2. Chỉ ra các cạnh tam giác/nguyên thủy sử dụng các đường màu đen và dính vào một cách bình thường với các đỉnh được chia sẻ và một đỉnh bình thường cho mỗi đỉnh

Nó phải giống như thế này? Tại sao tôi không thể đơn giản đọc trong nguyên thủy và không chỉ định bất kỳ normals và bằng cách nào đó để cho OpenGL ES 2.0 làm cho một bóng râm phẳng trên mỗi khuôn mặt?

câu hỏi tương tự Similar Stackoverflow question, but no suggestion to solution

+0

bạn có tìm thấy câu trả lời cho điều này không? –

Trả lời

7

Bởi vì để có bóng trên lưới của bạn (bất kỳ, nhẵn hoặc phẳng), bạn cần một mô hình chiếu sáng, và OpenGL ES không thể đoán nó. Không có đường ống cố định trong GL ES 2, do đó bạn không thể sử dụng bất kỳ chức năng tích hợp nào sẽ thực hiện công việc cho bạn (sử dụng mô hình chiếu sáng tích hợp). Trong màu nền phẳng, toàn bộ hình tam giác sẽ được vẽ với cùng một màu, được tính từ góc giữa nguồn sáng thông thường và nguồn sáng (Có, bạn cũng cần nguồn sáng, có thể đơn giản là nguồn gốc của phối cảnh). Đây là lý do tại sao bạn cần ít nhất một bình thường cho mỗi tam giác.

Sau đó, GPU hoạt động theo cách rất song song, xử lý nhiều đỉnh (và sau đó phân đoạn) cùng một lúc. Để có hiệu quả, nó không thể chia sẻ dữ liệu giữa các đỉnh. Đây là lý do tại sao bạn cần phải nhân rộng các normals cho mỗi đỉnh.

Ngoài ra, lưới của bạn không thể chia sẻ các đỉnh trong tam giác nữa như bạn đã nói, vì chúng chỉ chia sẻ vị trí đỉnh, không phải là đỉnh bình thường. Vì vậy, bạn cần phải đặt 3 * NbTriangles đỉnh trong bộ đệm của bạn, mỗi đỉnh có một vị trí và một vị trí bình thường. Bạn không thể có lợi ích của việc sử dụng dải tam giác/người hâm mộ, bởi vì không có khuôn mặt nào của bạn sẽ có một đỉnh chung với một cái khác (vì, một lần nữa, các tiêu chuẩn khác nhau).

+0

Điều này cũng đúng với OpenGL (không phải ES)? – Rick

+0

OpenGL có một đường ống cố định kế thừa, nhưng không nên sử dụng nó. Xem bài viết này để biết thêm thông tin: https://www.opengl.org/wiki/Fixed_Function_Pipeline – Benlitz

+0

Cảm ơn bạn. Những gì tôi đang cố gắng để có được là sử dụng SceneKit trong OS X 10.10 (hoặc 10.11) để vượt qua một mảng các đỉnh chia sẻ, một mảng các chỉ số cho các hình tam giác, và có nó bóng râm mà. Bên dưới nó sử dụng OpenGL hoặc Metal, nhưng tôi cũng không biết về nó. Tác giả này (http://ronnqvi.st/custom-scenekit-geometry/) dường như nghĩ rằng nó không phải là một cái gì đó OpenGL có thể làm, vì vậy tôi đã tìm cách để xem nó có thể, và đó là cách tôi tìm thấy câu hỏi này SO . – Rick

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