Không thể hiểu các tọa độ kết cấu UV này (phạm vi KHÔNG 0,0 đến 1,0)


9

Tôi đang cố gắng vẽ một đối tượng 3D đơn giản do Google SketchUp 8 Pro tạo ra trên ứng dụng WebGL của mình, mô hình là một hình trụ đơn giản.

Tôi đã mở tệp đã xuất và sao chép các vị trí đỉnh, chỉ mục, quy tắc và tọa độ kết cấu vào tệp .json để có thể sử dụng tệp đó trên javascript. Mọi thứ dường như hoạt động tốt, ngoại trừ tọa độ kết cấu có một số giá trị khá lớn, như 46,331676 và cả các giá trị âm. Bây giờ tôi không biết liệu mình có sai không, nhưng không phải tọa độ kết cấu 2D chỉ nằm trong phạm vi từ 0,0 đến 1?

Chà, vẽ mô hình bằng cách sử dụng các tọa độ kết cấu này mang lại cho tôi một cái nhìn hoàn toàn kỳ lạ và tôi chỉ có thể nhìn thấy kết cấu một cách chính xác khi tôi ở rất gần (không thực sự là tôi, cam) với mô hình, như thể kết cấu đã bị điên cuồng giảm kích thước của nó và lặp đi lặp lại vô tận trên khuôn mặt của người mẫu. (vâng, tôi đang sử dụng GL_REPEAT cho thứ bọc kết cấu đó)

Điều tôi nhận thấy là nếu tôi nhận được tất cả các tọa độ này và chia chúng cho 10 hoặc 100, tôi sẽ có một cái nhìn "bình thường" hơn nhiều, nhưng vẫn không nằm trong phạm vi 0,0 đến 1,0.

Đây là tập tin json của tôi: http://pastebin.com/Aa4wvGvv

Dưới đây là Trình tạo bóng GLSL của tôi: http://pastebin.com/DR4K37T9

Và đây là tệp .X được xuất bởi SketchUp: http://pastebin.com/hmYAJZwe

Tôi cũng đã thử vẽ mô hình này bằng XNA nhưng vẫn không hoạt động. Sử dụng trình tạo bóng HLSL này: http://pastebin.com/RBgVFq08

Tôi đã thử xuất cùng một mô hình sang các định dạng khác nhau, collada, fbx và x. Tất cả những điều mang lại cùng một điều.

Câu trả lời:


8

Bạn đúng là UV thường đi từ 0-1 mặc dù David X đã đề cập đây không phải là một yêu cầu. Trong trường hợp của bạn, vấn đề là tần số của tọa độ UV được tạo ra của SketchUp. Ví dụ: nếu trục Y (tọa độ V) của bạn đi từ 0 đến 46 thì kết cấu đó, nếu gói được bật, sẽ lặp lại 46 lần theo hướng V. Bao bọc cũng làm cho nó trông nhỏ hơn vì bạn phải nhân đôi hình ảnh nhiều lần trên cùng một diện tích bề mặt. Tái xuất dưới dạng FBX hoặc Collada không làm gì để giải quyết vấn đề vì đó là cùng một cách của UV. Để khắc phục điều này, bạn cần quay lại SketchUp và thay đổi cách tạo tia UV cho hình trụ. Có lẽ bạn có thể tự chỉ định phạm vi UV hoặc có thể bạn phải thay đổi cách hình học được tham số hóa. Tôi chưa bao giờ sử dụng SketchUp vì vậy tôi không '

Cuối cùng, nó trông giống như cuộn dây đỉnh của hình trụ có thể ngược lại với hình khối của bạn. Các API đồ họa như OpenGL và DirectX sử dụng cuộn dây hình tam giác để xác định hướng mà tam giác đang đối mặt. Đây là cách họ thực hiện loại bỏ backface - không hiển thị các hình tam giác hướng ra khỏi máy ảnh như một sự tối ưu hóa. Trong trường hợp hình trụ của bạn, có vẻ như chế độ xem đang nhìn vào hình trụ vì các hình tam giác gần camera nhất đang quay sai hướng. Một lần nữa, đây là một vấn đề cần được giải quyết trong SketchUp và nó có thể được xác minh bằng cách nhìn vào hướng của khuôn mặt bình thường cho mỗi tam giác (cần hướng ra ngoài, không phải hướng vào trong).


1

(Tọa độ kết cấu chắc chắn có thể nằm ngoài 0-1.) Tôi nghĩ rằng đây chỉ là OpenGL là lạ. IIRC, Spheres sử dụng tọa độ kết cấu đặt hình vuông 0-1 trên ~ 1/16 của bề mặt và tôi sẽ không bị bất ngờ nếu Xi lanh làm điều gì đó tương tự. Khắc phục sự cố, bạn có thể phải viết mã xi lanh của riêng mình, ban hành tọa độ kết cấu phù hợp.


1

Nếu bạn muốn tọa độ uv của bạn chính xác trong khoảng từ 0 đến 1, bạn có thể sử dụng ma trận tỷ lệ cho mô hình của mình.

Vì vậy, khi tải mô hình của bạn, bạn có thể kiểm tra tọa độ u và v tối đa của mình và tạo một ma trận chia tỷ lệ sẽ làm cho nó trở nên "bình thường" hơn. Vì vậy, điều đó sẽ thay thế tỷ lệ thủ công của bạn là 10 hoặc 100. Vì vậy, để cho phù hợp, bạn sẽ cần phải điều chỉnh tỷ lệ tọa độ uv của mình xuống [0,1].

|1/uMax|0     |
|0     |1/vMax|

Tất nhiên đây chỉ là một cách giải quyết và tốt hơn bạn có thể tìm cách đặt Sketchup ở cài đặt phù hợp (tôi nghĩ rằng nhà xuất khẩu hoặc Sketchup của bạn bị lỗi ở đây). Nhưng nếu nó không phù hợp với bạn, hãy tạo bộ xử lý hậu tải của bạn và lưu ma trận chia tỷ lệ kết cấu.


@Marmix Đây là một giải pháp rất đơn giản, hiệu quả và thanh lịch !!!
3d-indiana-jones

0

Có vẻ như SketchUp không bình thường hóa tọa độ kết cấu của bạn hoặc sử dụng một số liệu của chính nó. Có texcoords <0 hoặc> 1 và GL_REPEAT làm gói kết cấu có nghĩa là kết cấu sẽ được thu nhỏ lại để phù hợp với hình dạng và lặp lại theo chiều ngang và chiều dọc.

Hãy thử nhập lưới trong gói mô hình khác (MilkShape, Blender) và sửa bản đồ uv từ đó.


4
Có texcoords <0 hoặc> 1 và GL_REPEAT làm gói kết cấu có nghĩa là kết cấu sẽ được [ xóa câu lệnh sai ] lặp đi lặp lại theo chiều ngang và chiều dọc.
Kromster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.