Closed Megidd closed 1 year ago
There is a code that rotates and creates N
copies of an SDF3 about the z-axis:
https://github.com/deadsy/sdfx/blob/be7cff31fba09797a9e8fdcaa45975fa9d317b19/sdf/sdf3.go#L967
But I need to have N
exact copies without any transformation.
Well, maybe I can use this method:
https://github.com/deadsy/sdfx/blob/be7cff31fba09797a9e8fdcaa45975fa9d317b19/sdf/sdf3.go#L1143
Maybe I can run this to duplicate/clone my sdfi
:
// TODO: Find the best practice to simply duplicate SDF.
sdfij := sdf.Multi3D(sdfi, v3.VecSet{v3.Vec{X: 0, Y: 0, Z: 0}})
Is it the best practice?
What are you trying to do?
That is: If you have a union of 2 SDFs and those SDFs have the same shape/location/orientation then you need not have two, one of them is redundant.
Normally you create a new SDF by altering an existing one (E.g. translate/rotate) and then creating a union with the original SDF. iirc that's what Multi3D does.
Something like:
s0 := someSortOfSDF() s1 := Transform(s0) s2 := Union(s0, s1)
If you truly want to create N distinct SDF objects that share the same parameters then just build them independently. Building them in a function and returning them will let you save typing.
What are you trying to do?
I'm trying to load multiple instances of a triangle mesh by ImportTriMesh
API:
// Convert triangle mesh to SDF. Low-precision is good enough for our objective.
sdfi := obj.ImportTriMesh(tris, 20 /* 10 or 5 works too, i.e. lower precision */, 3, 5)
The problem is that I guess running ImportTriMesh
multiple times is much more computationally expensive than just duplicating an imported SDF. Is it right?
That's why I'm looking for the best practice to duplicate an imported SDF from a triangle mesh.
My eventual objective is to pack tightly those multiple SDFs by Simulated Annealing algorithm. As mentioned here: https://github.com/deadsy/sdfx/issues/62
Basically, the idea is that doing CSG boolean operations with SDF is much faster than triangle meshes. So, I'm going to pack tightly by SDF representation of 3D models. But, there are performance bottlenecks which I need to tackle.
Do you need to duplicate them? The N copies of the SDF can be made by taking a single SDF and applying a rotate/translate transform to it. At that point you effectively have N SDFs, but the base SDF has been created only once and is a single object. The packing problem is essentially finding the best N transform matrices.
I have an
sdf.SDF3
instance. What's the best way to duplicate or clone it? I couldn't find a function for it. I'm not sure how to do it. Thanks.