2014-05-23 22 views
21

Hiện tại tôi đang tham gia tạo SolidWorks bổ trợ để xuất mô hình 3D ở định dạng OBJ.SolidWorks để OBJ xuất

OBJ được mở và rất đơn giản định dạng

Tôi đã googled và phát hiện ra các thông tin sau về các giải pháp hiện có: có một số plugin trả và 1 miễn phí, được gọi là "miễn phí OBJ xuất khẩu"

Nó được lấy làm cơ sở. Nhưng nó không xuất khẩu các đề can.

Decals là những hình ảnh bạn vẽ trên đầu trang của các kết cấu chính (nếu bạn di chuyển ra khỏi bối cảnh của SolidWorks, trong không gian 3D lập trình nó giống như một vết đạn, giọt máu, vv)

can Export là một phần quan trọng của dự án.

Tôi viết lại tất cả mã VBA thành C#.

Và bây giờ tôi đến để hiểu thấu vấn đề xuất khẩu đề can. Tài liệu Solidworks API khá kém.

Sau một tuần đọc tài liệu và một vài câu hỏi trên LinkedIn tôi thấy như sau:

IDecal là lớp inherided từ IRendererMaterial. Vì vậy, tôi có thể nhận được một danh sách của tất cả các đề can và nhận được các thông tin sau:

  • Yposition
  • Xposition
  • Width
  • Chiều cao

Tôi cũng có thể có được một danh sách các đối tượng IFace2 và nhận được FaceDecalProperties. IFaceDecalProperties cung cấp thông tin tiếp theo:

  • TextureTranslationU
  • TextureTranslationV
  • TextureTranslationX
  • TextureTranslationY
  • TextureUScale
  • TextureVScale

Nó là gì, nó là gì và cách sử dụng nó tôi không biết.

Định dạng OBJ không hỗ trợ trực tiếp đề can.

Làm cách nào để sử dụng các thông số này cho kết cấu nối và decal trong một tệp? Tôi muốn làm điều đó để vẽ decal trên khuôn mặt và giải quyết vấn đề Z-fighting, bởi vì tôi không có mã nguồn của trình kết xuất đồ họa.

+1

Tôi nghĩ trang sách giáo khoa này cung cấp cho bạn ý tưởng về những gì u, v, x và y đại diện cho quy trình này. Tôi không quen thuộc với nó mặc dù tôi có phần quan tâm để tìm hiểu. https://encrypted.google.com/books?id=4gBUz_IkkSsC&lpg=PA390&ots=mAxE7Fwop1&dq=uvxy%20texture&pg=PA390#v=onepage&q=uvxy%20texture&f=false – minopret

+1

Bạn có nghĩ về việc xuất bản mã của mình trên GitHub không? Tôi muốn đóng góp vào việc phát triển macro hoặc macro C# để thực hiện cùng một công việc. – sentenza

Trả lời

2

Tôi không chắc TextureTranslationX và TextureTranslationY có ý nghĩa gì trong ngữ cảnh này, nhưng TextureTranslationU và TextureTranslationV gần như chắc chắn ám chỉ đến tọa độ kết cấu của mô hình.

Thông thường tọa độ kết cấu (U, V) được chỉ định giữa [0,1] và xác định cách hình ảnh được ánh xạ lên bề mặt. (U, V) = (0,0) thường sẽ là pixel trên cùng bên trái của hình ảnh kết cấu.

Vì vậy, nếu bạn có một bộ các đỉnh như:

v 0 0 0 
v 1 0 0 
v 0 1 0 
v 1 1 0 

trong đó xác định một hình vuông trong (X, Y, Z) không gian, và những đỉnh đã sau (U, V) kết cấu phối:

vt 0 0 
vt 1 0 
vt 0 1 
vt 1 1 

Sau đó, "kết cấu", theo đó chúng tôi thực sự có nghĩa là hình ảnh, sẽ được áp dụng cho hình vuông sao cho điểm ảnh trên cùng bên trái của nó sẽ được áp dụng cho đỉnh (0, 0, 0) của hình vuông.

TectureUScale và TextureVScale có thể tham chiếu đến tham số mở rộng cho phép hình ảnh kết cấu không phải hình chữ nhật.

Trong điều khoản dịch này sang OBJ, hãy tham khảo http://en.wikipedia.org/wiki/Wavefront_.obj_file. Định dạng tôi đã sử dụng ở trên phù hợp với đặc điểm định dạng tệp.

Bạn cũng sẽ cần phải lưu hình ảnh texture vào một tập tin .tga theo tài liệu và sau đó tạo ra một tập tin .mtl trông giống như:

newmtl texture1 
Ka 1.000 1.000 1.000 # Only ambient to keep things simple 
Kd 0.000 0.000 0.000 # Disable diffuse component 
Ks 0.000 0.000 0.000 # Disable specular component 
illum 1    # Only color and ambient are enabled 
map_Ka texture.tga # Ambient texture map 

Giai đoạn cuối cùng là đặt:

usemtl [texture1] 

Trước định nghĩa tọa độ đỉnh và kết cấu trong tệp .obj của bạn.

Tôi sẽ bắt đầu với một cái gì đó rất đơn giản như một hình vuông kết cấu với một mẫu bàn cờ có cùng chiều rộng và chiều cao.

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