CMP Import/export dll
-
I have to admit, this exporter is great.
It just have one big missing element: Manual centering the multi parts! If I want to create the sur, the multi parts are moved a bit because they dont have the same poly count and the calculated center will be another.
So: Just a checkbox like “Manual Centering Groups?” is the missing thing for a perfect exporter!And belive me: Thats really a big problem for creating exact multi part ships!
-
@Skotty
Hi Skotty,When I modified the importer to import a model I got from Sushi, I inadvertantly changed the code that loads multiple vms models like the Rheinland Battleship. It’s since been repaired. I’m uploading my most recent dlls.
About centering the groups, I’m not sure I know what you mean. All the parts are centered at (0,0,0). Then their positions relative to the root part are saved in the connections node. I believe this is how the original models were set up. At anyrate, I’ll see what I can do.
-
There are different methods how you calculate the center point of a group.
Schmackbolzens method is calculating the center point by the dimensions of the object. You are calculating the center by the spread of all vertices.
-> Schmacki will write the exact problem and solution in a few minutes.Another problem: Your CMP Exporter also repositionates the Root mesh. I think some of the modelers, including me, are positioning their root meshes willfuly at another point than the exact caluclated mass center.
So please remove the adjustment of the rootSo far, your CMP importer and mainly the exporter are the greatest I’ve ever seen! With them modeling for Freelancer makes fun again!
-
What Skotty means is, that you use a different way to calculate the center. I would say you calculate the arithmetic average whereas you just should calculate the center of the bounding box. I have attached a screenshot from Skotty where you can see the problem. The gray mesh is the automatic centered multipart group by my obj -> sur converter and the colored one the one from your exporter. Since you use a different way to calculate the center they don’t overlap. This means that you would have to correct it either in your program or everyone will have to enter different center values into my converter which would be quite annoying I guess ^^.
P.S.: No, the new sur converter version is not released yet, Skotty has a prerelase version, which has some minor bugs left…
Remember to click “view image” or how your browser calls it since the image is cut thanks to this nice forum software ^^
-
@Schmackbolzen
Hi,I was just wondering, How did you calculate the bounding box?
I cycled through all the vertices of each part and took the two farthest away for each axis.Anyway, this dll uses the bounding box and doesn’t move the root mesh.
-
Thanks for the quick fix!
I just iterate through all vertices per group and look for the min and max values per axis. In the end you have 6 values (or 2 Vectors / Points) defining the bounding box. That should be the quickest way to do it. -
Perfect. Thanks P1p3r, the CMP Exporter exports my CMP now with perfect center coordinates. Schmackis SUR converter creates now in combination with your CMP exporter a really perfect ship.
Now the next and best generation of Freelancer ships can come! -
Amen!!
-
Geting a weird error when using this exporter seen here:
http://i113.photobucket.com/albums/n240/Alucard1_01/errordllexporter.png
Any ideas why it’s missing parts of the words used?
-
I just remembered, this only occurs when you first use the exporter. It uses the last filename for the VMeshLibrary.lod then replaces it when a new filename is selected. But if there was no last filename, it cannot replace it. This should be fixed soon.
-
Your radius calculation is wrong. If I use a box with the size 80x80m, your radius is just 40, but it would need to be 69,28 or a bit bigger (tolerance value).
Schmackbolzen will write how to solve the problem via vector calculation.
-
The problem is that the .cmp disappears too early out of view. For a correct radius you can e.g. calculate the center of each bounding box axis, then get the distance from each value to the max value per axis and from that calculate the vector length which is your radius.
-
I not following you guys here. What’s with the radius and why is it dissapearing too early. What is dissapearing too early?
The radius of an 80M x 80M box, is 40M.
I calculated the radius as the longest distance from the center of the box to the farthest axis.
So that a box that’s 80M long, 20M wide and 20M tall would have a radius of 40M. That’s half of 80M. From the center of the longest distance.Maybe if you could send me a copy of your exporter I wuold have a better Idea of what I would have to change.
-
The radius in that case is sqrt(40²+40²+40²)=69.282. It’s the length of the vector from center to the farthest corner.
-
The radius set in the CMP files are responsible for the drawing of a CMP(-part). If the radius of a part is to small, it will disappear from the view to early.
If you got ANY shape, you need to be sure that the sphere with your radius covers the whole shape.
All edges and corner points of a 80x80 box will be outside of a sphere with the radius 40, This sphere/radius just hits the outer surface of the box in just 1 point, nothing else. It will disappear to early.
You need to calculate the radius by doing the following:
The distance from the Center and the farthest corner point of the bounding box.And be sure to do this for every cmp part
-
Sorry, but Schmacki already wrote his example equationfor the vector you need.
You always need the longest vector from the center of the bounding box and set this value for the radius. -
To formulate it more in the mathematical sense:
center(min,max)=min + ((max - min) : 2);distance(min,max)=max-center(min,max)
radius(minx,miny,minz,maxx,maxy,maxz)=
sqrt(distance(minx,maxx)²,distance(miny,maxy)²,distance(minz,maxz)²)
This is just what I wrote but this time in strict mathematical notation. “distance” is of course the distance from the center, I shortened the name to keep it readable.