3DWin and Wavefront Obj - Printable Version +- LDraw.org Discussion Forums (https://forums.ldraw.org) +-- Forum: LDraw Programs (https://forums.ldraw.org/forum-7.html) +--- Forum: LDraw File Processing and Conversion (https://forums.ldraw.org/forum-22.html) +--- Thread: 3DWin and Wavefront Obj (/thread-10354.html) |
3DWin and Wavefront Obj - Michael Horvath - 2013-10-18 Can anyone tell me why 3DWin fails to properly convert this file to LDR? http://www.mediafire.com/?vko1a15alrurxzp It shows up fine in meshlab. Mike Re: 3DWin and Wavefront Obj - Philippe Hurbain - 2013-10-18 The only 3D converter that worked reliably for me is Marc Klein's stl2dat. This converter is also available in Mikeheide's LETGUI package, with a nice GUI shell and a bunch of other LDraw tools. Attached your converted mesh. What I did: - open .obj in meshlab and converted to stl ASCII mode (uncheck "binary") - convert to .dat using stl2dat with default options. Notice that stl2dat made a mess with conditional lines because the mesh is tiny (1 unit wide -> converted to 1 ldu). So, convert again using "raw" option. - Upscale the result in MLCad (I used a 25x scaling), this is the raw mesh as attached. - Processed through Edger2 (included in LETGUI) to create conditional lines - processed through rectifier to convert planar triangle pairs to quads (look better). Re: 3DWin and Wavefront Obj - Michael Horvath - 2013-10-18 How do you scale objects in MLCAD? And I need the height coordinates to be integers, not decimals. How do I accomplish this? Re: 3DWin and Wavefront Obj - Philippe Hurbain - 2013-10-18 Quote:How do you scale objects in MLCAD?Select everything, then hit the "Enter position orientation" icon (keyboard looking one). Check "use rotation matrix value", and change matrix 1 0 0 0 1 0 0 0 1 to <scalex> 0 0 0 <scaley> 0 0 0 <scalez> Quote:And I need the height coordinates to be integers, not decimals. How do I accomplish this?After scaling, you need to round everything to integers. I think the simplest is to open the file in LDDP. Change decimal accuracy to 0 (tools -> options -> configurations values tab -> editor behavior subtab -> position decimal accuracy = 0). Then select all (ctrl A) and round everything (ctrl D). Edit: this changes to integers height AND x-z coordinates. I have to simple way to do that only on y. Re: 3DWin and Wavefront Obj - Max Martin Richter - 2013-10-18 Philippe Hurbain Wrote:Check "use rotation matrix value", and change matrix 1 0 0 0 1 0 0 0 1 to <scalex> 0 0 0 <scaley> 0 0 0 <scalez>Note: that MLCad 3.40 has a bug, where the checkbox for the rotation matrix is not clickable. Use MLCad 3.30 instead. /Max Re: 3DWin and Wavefront Obj - Philippe Hurbain - 2013-10-18 Quote:Note: that MLCad 3.40 has a bug, where the checkbox for the rotation matrix is not clickable. Use MLCad 3.30 instead.No, this one does work in 3.4. Only the "use rotation vector values" checkbox is disabled in 3.4 (and if I remember well, the feature is buggy in 3.3, works only in 3.2). Re: 3DWin and Wavefront Obj - Michael Horvath - 2013-10-18 I meant, how do I get integer values simply by scaling? The heightmap is 8 bits, so I should simply be able to scale by 255, right? (The mesh I'm working on now is normalized within a 1 unit cube.) Re: 3DWin and Wavefront Obj - Rolf Osterthun - 2013-10-18 Hey, in the .obj file there are only quads. If you convert then 1:1 the file will not be ldraw compatible (893 quad(s) above 3 degrees). Fits the attached file (scaled by 100) to your ideas? Rolf Re: 3DWin and Wavefront Obj - Philippe Hurbain - 2013-10-18 Indeed... actually you don't seem to use all values, and vertically scaling by 64 gives only Y integer values. Re: 3DWin and Wavefront Obj - Rolf Osterthun - 2013-10-18 Hey, when you scale by 64 you will get integer values. I do not know why, but the smalest delta in the .obj file is 0.015625 --> 1/64. Rolf Re: 3DWin and Wavefront Obj - Philippe Hurbain - 2013-10-18 Quote:in the .obj file there are only quads. If you convert then 1:1 the file will not be ldraw compatible (893 quad(s) above 3 degrees).Looks like stl2dat automatically split to triangles... Re: 3DWin and Wavefront Obj - Michael Horvath - 2013-10-18 You guys forgot to rotate the model before scaling, LOL. The model is supposed to be a piece of terrain, so you need to scale the bumpy side. And I'll answer my own question: no I can't simply scale by 255 to get integer values because the height data is not 8 bit like I thought. It is more. I will need to us LDDP like Philippe suggested. Sorry if I've confused anyone. Re: 3DWin and Wavefront Obj - Michael Horvath - 2013-10-18 Let me start over. I've attached the mesh once again, this time normalized to fit within a 1 unit cube. I want to scale the x and z coordinates by 40960 so that 1 quad = 1 baseplate. Then I want to scale the y axis by somewhere around ~12000, but then rounded to the nearest 24 units so that the minimum height difference is equal to 1 stud. It's this last part that is giving me trouble. I haven't found a tool that can do it yet. Re: 3DWin and Wavefront Obj - Max Martin Richter - 2013-10-18 Oh, yes indeed, you are completely right. Sorry, my fault. Re: 3DWin and Wavefront Obj - Rolf Osterthun - 2013-10-18 Hey, I gave it a try. The z-coordinate is not the best. Rolf Re: 3DWin and Wavefront Obj - Michael Horvath - 2013-10-19 OK, I got the mesh scaled the way I want. (It's attached to this post.) What settings do I use for Edger2 and Rectifier? I tried the default settings but there are still conditional lines missing, and there don't seem to be as many rects as the ouput you guys showed me. [edit] Also, is there a way to convert an LDR file to OBJ without using 3DWin? I want to eliminate this tool from my workflow. Re: 3DWin and Wavefront Obj - Michael Horvath - 2013-10-19 By the way here is a list of programs I had to juggle with over the last few days before finalizing my workflow. Very irritating! World Machine Wilbur 3DWin Wings3D MeshLab Blender MLCAD LDDP LETGUI LDView stl2dat MS-DOS edger2 rectifier All this simply to create one model!! My head is still spinning from having to learn how they all do (and don't) work! Mike Re: 3DWin and Wavefront Obj - Michael Horvath - 2013-10-19 Here's the workflow I used to get to the final state by the way. FOR NON-STEPPED TERRAIN: 1. Open "worldmachine_project.tmd" in World Machine. 2. Tweak the heightfield if you want. Then export from World Machine as "worldmachine_output.obj". 3. Open "worldmachine_output.obj" in MeshLab. 4. In MeshLab select "Filters" > "Normals, Curvatures and Orientation" > "Transform: Move, Translate, Center". Check the "translate center of bbox to the origin" box and click "Apply" then "Close". 5. In MeshLab select "Filters" > "Normals, Curvatures and Orientation" > "Transform: Rotate". Set the Rotation angle to 270 and click "Apply" then "Close". 6. In MeshLab select "Filters" > "Normals, Curvatures and Orientation" > "Transform: Scale". Uncheck the "Uniform Scaling" box. Then set the X Axis value to 40960, the Y Axis value to 15360, and the Z Axis value to 40960. Click "Apply" then "Close". This dialog is a bit buggy so you will have trouble entering the scaling values. 7. In MeshLab select "File" > "Export Mesh As...". Export the file as "meshlab_output_nosteps.stl". 8. Using the command prompt or a batch file convert the STL file to LDR using "stl2dat.exe". An example of the command line looks like this: stl2dat meshlab_output_nosteps.stl -ldr -raw 9. Open the model in MLCAD. The model may be upside-down, so rotate 180 degrees around the x-axis if needed. 10. You're basically done. You can do any post-processing you want in LETGUI, such as adding conditional lines using Edger2 or converting triangles to rectangles using rectifier. FOR STEPPED TERRAIN: 1. Open "worldmachine_project.tmd" in World Machine. 2. Tweak the heightfield if you want. Then export from World Machine as "worldmachine_output.obj". 3. Open "worldmachine_output.obj" in MeshLab. 4. In MeshLab select "Filters" > "Normals, Curvatures and Orientation" > "Transform: Move, Translate, Center". Check the "translate center of bbox to the origin" box and click "Apply" then "Close". 5. In MeshLab select "Filters" > "Normals, Curvatures and Orientation" > "Transform: Rotate". Set the Rotation angle to 270 and click "Apply" then "Close". 6. In MeshLab select "Filters" > "Normals, Curvatures and Orientation" > "Transform: Scale". Uncheck the "Uniform Scaling" box. Then set the X Axis value to 40960, the Y Axis value to 640, and the Z Axis value to 40960. Click "Apply" then "Close". This dialog is a bit buggy so you will have trouble entering the scaling values. 7. In MeshLab select "File" > "Export Mesh As...". Export the file as "meshlab_output_stepped.stl". 8. Using the command prompt or a batch file convert the STL file to LDR using "stl2dat.exe". An example of the command line looks like this: stl2dat meshlab_output_stepped.stl -ldr -raw 9. Open the LDR file in LDDP. 10. Change decimal accuracy to 0 by going to "Tools" > "Options" > "Configuration Values" tab > "Editor Behavior" subtab and setting "Position Decimal Accuracy" to zero. Then select all (ctrl A) and round everything (ctrl D). 11. Save the LDR file in LDDP. 12. Convert the LDR file to Wavefront OBJ using 3DWin. Export as "3DWin_output.obj". ......3DWin rotates the model again!!!! Stop using 3DWin!!!!...... 13. Open "3DWin_output.obj" in MeshLab. 14. In MeshLab rotate the model again if needed because 3DWin changes the rotation when exporting for some reason. Then scale the height by 24 along the y-axis. 15. In MeshLab select "File" > "Export Mesh As...". Export the file as "meshlab_output_stepped.stl". 16. Using the command prompt or a batch file convert the STL file to LDR using "stl2dat.exe". An example of the command line looks like this: stl2dat meshlab_output_stepped.stl -ldr -raw 17. Open the LDR model in MLCAD. The model may be upside-down, so rotate 180 degrees around the x-axis if needed. 18. You're basically done. You can do any post-processing you want in LETGUI, such as adding conditional lines using Edger2 or converting triangles to rectangles using rectifier. |