Trình tải sóng * .obj trong C ++


7

Tôi đang tạo một trò chơi bằng OpenGL (thông qua SDL) và C ++ (thông qua Visual Studios 2010 Professional). Trong trò chơi, tôi sẽ sử dụng hoạt hình nhân vật 3D. Tôi muốn sử dụng các tệp sóng * .obj cho tất cả các mô hình 3D (ngoại trừ địa hình). Các nhân vật sẽ cần phải có những chuyển động trôi chảy (thực tế), với khoảng 250-500 khung hình (để đi bộ, chạy, chạy nước rút, nhảy, cúi mình, bò, v.v.). Tôi muốn sử dụng md2 hoặc md3, nhưng công cụ tạo mô hình / hoạt hình 3D tôi sẽ sử dụng (Blender 3D 2.57) không hỗ trợ một trong hai. Trò chơi sẽ chỉ chạy trên Windows.

Những gì tôi cần là một trình tải và phân tích cú pháp * .obj nhỏ nhưng mạnh mẽ hỗ trợ hoạt hình. Nó phải được viết bằng C ++ và có thể sử dụng được bởi SDL.

Cảm ơn

Được rồi, sau khi xem tất cả các định dạng tệp mà Blender có thể xuất sang ... Tôi đã quyết định sử dụng 3DS vì nó tạo ra định dạng tệp nhỏ nhất khi tôi xuất khối mặc định. Cảm ơn @Daniel đã giới thiệu 3DS!


Bạn đã googled? Libobj đến với tâm trí.
giảm tốc

Bạn có chắc chắn .obj hỗ trợ hình ảnh động?

@Christian Rau: không nằm trong lõi nhưng bạn có thể xuất mọi khung hình động dưới dạng tệp .OBJ riêng biệt.
Amir Zadeh

Câu trả lời:


5

OBJ không hỗ trợ hình ảnh động, để biết thêm thông tin đọc này .

Đối với trình tải OBJ tuân thủ, lib-obj xuất hiện trong tâm trí.

Nếu bạn muốn pha tại nhà, bạn có thể đảm bảo tệp chỉ chứa các hình tam giác; không có quads, v.v. phân tích OBJ là tùy ý (văn bản duy nhất của nó!):

        char prefix[10] = {0};
        stream >> prefix;

        switch (prefix[0]) {
            case 'v' : {
                switch (prefix[1]) {
                    case 't' : {} break; // texcoords
                    case 'n' : {} break; // normals
                    default : { // points
                        float x, y, z;
                        stream >> x >> y >> z;
                        // put in a mesh etc
                    }
                }
            } break;
            case 'f' : {
                unsigned short a, b, c;
                stream >> a >> b >> c;

                // etc
            } break;
            default : {} // skip
        }
    }

Nếu nghi ngờ, hãy nhìn vào đặc điểm kỹ thuật .


Tôi sẽ sử dụng lib-obj hoặc homebrew, nhưng tôi thực sự cần hoạt hình. Bạn có biết về trình xuất tệp md2 hoặc md3 cho máy xay sinh tố 2.57 không? Tôi thích sử dụng một trong số đó ...!

Có bất kỳ lý do cho md2 hoặc md3? Có các định dạng khác có thể hỗ trợ hình ảnh động. Có thể nhìn vào định dạng 3DS?
giảm tốc

MD2 và MD3 là các định dạng được tôn trọng và rất phổ biến. Tôi chưa bao giờ nghe nói về 3DS và không biết gì về nó. Tôi sẽ xem xét nó ... Cảm ơn.

2
@jsvcycling: Bạn sống ở thập kỷ nào? MD2 và MD3 là từ những năm 1990. Ngày nay, chúng tôi sử dụng các định dạng như OpenCTM hoặc tương tự. Ngày nay, một mô hình không chỉ bao gồm vị trí đỉnh, tọa độ bình thường và kết cấu. Có các nhóm đỉnh, trọng lượng xương, thuộc tính bổ sung, vv MD2 và MD3 đơn giản là không phù hợp với công việc.
datenwolf

1
Tôi không thấy bất kỳ đề cập đến nó trong đặc điểm kỹ thuật? Đóng khung bằng tay không tính.
giảm tốc

1

Chỉ vì Blender cung cấp cho bạn một nhà xuất khẩu cho Wavefront không có nghĩa, toàn bộ hoạt hình cũng sẽ được xuất khẩu. OBJ của Wavefront không biết hoạt hình!

Mặt khác, hoàn toàn có thể triển khai nhà xuất khẩu Add On cho md2 / md3 và AFAIK đã tồn tại.

Điều đó đang được nói, như tôi đã hiểu, bạn có ý định lưu trữ toàn bộ lưới cho mỗi khung hình động. Đây là một cách rất không hiệu quả để làm hoạt hình. Một cách tiếp cận tốt hơn sẽ là chỉ lưu trữ các khung hình chính và nội suy giữa chúng. Hoặc thậm chí tốt hơn: Triển khai hệ thống biến dạng lưới tương thích với hệ thống hoạt hình của Blender hoặc triển khai hệ thống biến dạng lưới của riêng bạn cho cả Blender và chương trình của bạn. Hoạt hình biến đổi toàn bộ đối tượng đơn giản là dễ dàng. Biến dạng lưới trong Blender thường xảy ra thông qua bộ điều chỉnh Armature dựng sẵn, nhưng hoàn toàn có thể thực hiện một toán tử biến dạng lưới riêng để thay thế cho bộ điều chỉnh Armature.

ATM Tôi đang phát triển Tiện ích xuất / nhập Blender bổ sung tất cả dữ liệu hiện đang được tải sang định dạng JSON; hoặc một tệp lớn hoặc một tệp cho mỗi khối dữ liệu. Ý tưởng chính là sử dụng nó với WebGL (tức là triển khai một công cụ WebGL cho phép tải những thứ ban đầu được tạo ra cho Blender Game Engine). Có lẽ tôi có thể quan tâm đến bạn trong việc sử dụng JSON để lưu trữ mô hình và thông tin.


Vâng, tôi đã quên đề cập rằng tôi sẽ sử dụng chữ ký cho hoạt hình ...

Nhưng đâu là sự liên quan giữa trình tải OBJ, SDL và Hoạt hình?
giảm tốc

hmm ... JSON trông khá tốt Và nó có rất nhiều thư viện khác nhau để lựa chọn (trong C ++)! Tôi có thể sử dụng nó ...

Chà, tôi đã nghĩ đến việc làm một cái gì đó giống như cách các video mpeg4 hoạt động, các phần của các mô hình không di chuyển trong quá trình chuyển từ cảnh này sang cảnh khác, sẽ là "Sao chép lại". Vì vậy, nếu chỉ một ngón tay được di chuyển trong cảnh 53, phần còn lại của cơ thể từ cảnh 52 sẽ được sao chép sang cảnh 53. Có ai biết định dạng tệp 3D hoạt động như thế này không ...?

1
@jsvcycling: Loại hoạt hình thay thế lưới này rất, rất kém hiệu quả. Nó đòi hỏi phải liên tục sao chép một lượng lớn dữ liệu vào bộ nhớ GPU, gây lãng phí rất nhiều băng thông. Ngoài ra CPU sẽ bận rộn tất cả các sổ sách kế toán. Những gì bạn thực sự nên làm là thực hiện một hệ thống hoạt hình xương. Sử dụng shader đỉnh là đủ dễ dàng: Mọi xương có thể được mô tả bằng một biến đổi bậc bốn và trung tính. Các bậc bốn được thiết lập bởi đồng phục; trong shader, người thừa kế xương được đánh giá, mang lại sự biến đổi cho từng xương, sau đó được áp dụng cho các đỉnh có trọng lượng.
datenwolf

1

Mặc dù đặc tả .obj không hỗ trợ hoạt ảnh nguyên bản, nhưng chỉ cần tăng nó bằng tệp .anm riêng biệt, bạn có thể có được hình ảnh động không xương tuyệt vời.

Hãy xem: - http://public.sanguinelabs.co.uk/expose/product.php?id=wastudio

Điều này cung cấp một công cụ rất dễ sử dụng để tạo các hình động và cũng cung cấp một thư viện mô hình nguồn mở (cho OpenGL) để bạn có thể giúp các mô hình hoạt hình hoạt động nhanh chóng trong dự án của bạn.

Lưu ý: Tôi là nhà phát triển của Wavefront Animation Studio và libwavefront vì vậy hãy gửi email cho tôi nếu bạn có bất kỳ cải tiến hoặc lỗi nào để báo cáo. Phần mềm được phát triển trong thời gian tôi ở trường đại học vì tôi cảm thấy rất khó xử khi tạo và hiển thị hình động bằng các công cụ và thư viện phức tạp hiện có.


0

Câu trả lời cho những gì bạn tìm kiếm không phải là * .obj vì nó khá giống với bitmap cho hoạt hình (bạn có thể xuất nó bằng Blender nhưng bạn phải nói với máy xay để xuất mọi khung hình dưới dạng một tệp * .obj [KHÔNG HIỆU QUẢ NHIỆM VỤ], giống như một bộ phim và đó là khung hình). Những gì bạn thực sự tìm kiếm là Collada. Có một trình tải lưới được gọi là assimp và nó tải như một triệu định dạng lưới (tôi đang sử dụng nó cho công cụ mới của mình). Và những gì bạn nói về * .3DS không phải lúc nào cũng đúng.

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.