export 3d model from Jitter GL (& import nurbs)
First time my max/msp/jitter issues can’t seem to be solved by simply searching this great forum, so here it goes…
I want to import an .obj 3d model (relatively simple surfaces, no texturing) in Jitter, modulate it by data extracted from audio sample analysis and export the resulting shape to have it 3d-printed.
My problem is in the last step: exporting. The jit.gl objects don’t seem to have any means of exporting to for example an obj file. Has anyone found a workaround?
Vade suggested I could parse the output of my jit.gl objects with @matrixoutput 1, save as a Jitter binary file and parse/convert to a 3d app readable format. Theoretically feasible but I probably can’t work this out in the given timeframe. Any other ideas?
Additionally, the surfaces I’d like to work with are nurbs but I understood Jitter can only import tesselated models. I could live with it but nurbs would be better. Any workarounds for that?
Basically it just receives a jit_matrix and writes its contents into an obj file. If you need you can also define groups and materials for your object.
If you need any further explanation please feel free to contact me.
fantastic! i’ll try it out over the weekend…
works like a charm… my eternal tanx to you!
Hi Dieter and Stephan,
I am glad I found this post. I am looking to do a similar project with max.
I have a couple of questions for the two of you.
Dieter, 1. how has your project progressed?
2. how much clean up did you have to do with your OBJ file before you converted to STL?
Stephan, 1. I have downloaded your zip but have not opened it yet, can the exporter work with jit.gl.sketch or does one need an object file to start with?
I am excited to read that others are working on this!
i developed this app for a workshop with students. in the end they worked with the exported obj files. i guess it d be easy to convert those to stl using popular 3d modeling apps. i don t have experience with that myself.
from my memory (it s been a while) stephane’s script worked straight out of the box. no need for an obj file to start with either. i worked with a jit.gl.nurbs generating the model. i can send you the patches if you d like to have a look.
really cool patch.
but one question: is there a way of reading a "obj." back to your patch? the
idea would be to draw it using "line" or "line-strip", etc and saving it
On Thu, Feb 14, 2008 at 6:15 PM, spray
> Hi Dieter,
> attached you an archive containing the script as well as a demo patch, which
> should demonstrate the use of the script.
> Basically it just receives a jit_matrix and writes its contents into an obj
> file. If you need you can also define groups and materials for your object.
> If you need any further explanation please feel free to contact me.
Sandro Canavezzi de Abreu
thanks for responding so fast, I have been looking at Stephan’s patch over the weekend and trying to get jit.gl.sketch to work with it. At this point I have built a simple line draw patch with jit.gl.sketch now the task is to figure out how to get the info into Stephan’s objectexport patch
I would appreciate it greatly if you could send me one of your nurbs patches, maybe it will be easier to understand to see how you worked it.
I am on a macbook pro OS 10.4.11 running MAX/MSP/JItter 4.6 jitter 1.6.3
Dieter, Stephan, and Sandro
By plunking in jit.gl.nurbs in place of gridshape, in Stephan’s patch I can get my nurbs object exported. I still have to figure out exactly if I can make the shape I want in nurbs, I am trying to draw a series of lines to make a shape almost like a nest. I did want to start from scratch that is why I wanted to use gl.sketch but I cannot figure out how to send my sketch data out to the matrix, I know that i have to use the glcommands but ????
still working I will post my patch soon if anyone wants to look at it.
Sandro, I think I am running into the same problem with the objects
I dont know if this helps but what I have been doing is exporting the object then using meshlab to look at my files, but they stay as solids even if i change the primitives for the objects. Again that is why I wanted to do it in gl.sketch
can one draw multiple lines in nurbs?
export 3d mesh from Jitter openGL matrix
great tool, I was about to try and make it, so glad someone told me this was here. I added those words at the top of this message so that it would come up if someone searches export OBJ 3d mesh like I did. I searched a few times and for some reason nothing came up, and it was because I didn’t say export 3d "MODEL"
at any rate, this is awesome, I cant wait to render out some of my jitter stuff in high res, or make a version of this that will do whole obj animation sequences!!
thanks so much!!
Can anyone please post the example patch DIeter has posted, I cant find it here…
It seems that all the attached files are not uploaded to the forum yet, possibly related with the new site and the data migration they might be doing.
Maybe a little bit of patience
Yes, Ive assumed that. Anyway I have it sorted thanks to kind help of Dieter.
can anyone that has this patch post it here>? ive been trying to figure this one out for a while
Bump! I’d also be interested in the obj exporter patch. Thanks!
I’m also working on a similar problem,
I want to export the XYZ data from jit.gl.gridshape as a text file by using jit.fprint and I’m having some issues
I’ve attached a max patcher from max5 as an example
I’m going to be working on this problem further and posting the solution if I can find it, any help would be appreciated
Hey I figured it out , you can save vertex data out of this patch as a txt file and rename it to .asc and load it into whatever will take that format , I’m using meshlab
It was to do with carriage returns VS "line feed" , sending the message 10 to itoa to use a line feed was the answer
Thanks for sharing this, and for taking the time to work out the kinks.
Hi all (no Max for ages, nice to be back!)
After a frustrated waste of time trying to get an old c external of mine to work properly (trying to use glFeedbackBuffer – long story, everything coming out, but flat!) and now running out of time i’ve now switched to making some changes to jsobjwriter.js to fit what i need – specifically scaling, positioning (easy, done) and rotation (more chewy, working on it!)
I’ll share back the results here when done, but was just wondering if anyone had already done this – or can point to how to get the jit.gl.model objects i’m using to output the matrix with these transforms already on? (in which case i may be sick! ;)
My workaround to getting scaling, positioning & rotating was to just measure where the object was then add all of that to the matrix to offset it
let me know what you come up with
hi guys. i just want to make sure you are aware that in Max 6, gl objects that support @matrixoutput 1 also support @matrixoutput 2.
matrixoutput mode 2 will apply ob3d’s transformations (position, rotate, scale) to the object’s geometry prior to matrix output.
I had not caught that thanks!
Aaaaaaaargh! Would have saved me about 30 hours of headache! :) But thanks Robert, i was fearing there might be an easy answer, glad at least it seems to be an undocumented one.
Oh, and thanks Stirling for the trig pointers, what i got working eventually was based upon that.
Ah, of course that’s documented and i’ve been staring at it all week without understanding what "On With Transform" means – doh! :)
yeah some of the reference descriptions can be kind of technical.
don’t hesitate to ask the forum for anything that doesn’t make sense (documentation is an ongoing process).
Hi guys, I’m usually on the Max and MSP side of things, but for this project I wanted to adventure to the land of OpenGL and 3D printing. Little did I know…
What I’m trying to do is draw a curve and extrude it exactly like with [jit.gl.path] so that I can export an .obj to 3D print it. If [jit.gl.path] had the matrix output attribute I would be in heaven, but it doesn’t so I don’t know what to do. There are others here that tried, but it has been four years so I’m hoping things have changed :-) Is it doable using [jit.gl.nurbs] and [jit.gl.mesh]? Or maybe there’s a way to draw my curves with lots and lots of [jit.gl.gridshapes]? If so, is there a tutorial or example patch out there that could demonstrate how to do so?
I have scrounged the forum but with my limited knowledge of Jitter and OpenGL, I feel very very lost. I thought I found my answer with this awesome objWriter patch, but even though it has taught me a lot, I couldn’t figure it out. I would really appreciate it if someone could point me in the right direction.
Thanks for any tips!
Do you just want XYZ points or normals as well? Are you trying to create a solid form or just a thin path that has some depth to it? There are a lot of ways to approach this.
You could use jit.gl.expr and write the math in for what kind of curve you want then output that into a matrix and save that data to some file if you just need the xyz points. If you need normals it might be better to start with a gridshape or plato object
Checkout Meshlab http://meshlab.sourceforge.net/ for reconstructing points into solid forms
Thanks so much for responding. Just to clarify, I think I need the normals as I’m trying to create a solid form suitable for 3D print. Does this mean I need to use gridshape? If so, can I use it with jit.gl.multiple to create my curve? Sorry if I’m not asking the right questions, but this is new to me. My ideal scenario would be to be able to give XYZ coords, and a solid is created out of that. I really thought it would be that simple, right ;-)
If I send Meshlab my XYZ coordinates, can I make a solid out of that? To test, I tried creating a simple arc in Rhino and using "uniform mesh resampling" to give it volume, but with no luck.
Thanks again for taking the time to help.
You’re probably either looking at taking a gridshape and pushing the location of each vertex around based on wherever you want them. Or moving around an entire shape at small enough intervals so that its one interconnected thing. I’ve always written one matrix into a larger matrix multiple times using srcdimstart / srcdimend / dstdimstart / dstdimend rather than using jit.gl.multiple , either way would work I suppose.
I’ve also generated big clouds of vertices without normals and strung them together in meshlab with accuracy just based on the fact that I had so many of them in proximity. You could give that a shot then generate normals in meshlab. If your points all have normals the Remesh by Alpha complex shape works well from my experience , or you could try Remesh by Ball pivoting with/without normals.
I don’t really know what you’re trying to make, each approach has its advantages/disadvantages and would result in different things. If you’re just trying to create a few french curves for a single project you’re doing it might be easier to just use Maya.
It would be really nice if you could do matrix output on a jit.gl.mesh
Thanks, Sterling for all these tips. I’ll keep exploring with these options in mind.
Just to let you all know i did end up getting mine working thanks to the kind help of those here (thanks! :)
The object we created will be on exhibition in London from the end of this month onwards – more info at href="http://www.londonfieldworks.com/projects/null-object
In the end i used a modified version of jsobjwriter.js, which i’ll try and attach here in case it helps anyone else. If needed i can try and make a help patch to show how i used it… if i get time.
Thanks all again!
Thanks Jonny. Can you briefly comment on what kind of changes were done to the original jsobjwriter.js file?
Can’t really remember but doing a diff of the original one posted here and mine it’s mainly adding transformations (pos, scale & rotate) and some stuff about colours (ambcolor, diffcolor & speccolor) but can’t remember what that bit was for as i wasn’t interested in colour for this project…
Hope that helps!
would you mind posting a help file about your use of the jsobjwriter.js file? thanx in advance.
I’ve been revisiting this issue and I modified jsobjwriter.js to support the tri_fan , quad_grid and tri_strip primitives in a way I think is more accurate to the way Max/Jitter tends to render generative 3d files. I’ve also commented out some of the behavior in regards to the way it accepts messages about which primitive it ought to use, because it had this tendency to ignore what I was asking it to do.
The new primitive modes are accessible as tri_fan2 , quad_grid2 , tri_strip2 . I may work through all of them at some point but those seemed to be most useful ( or at least the ones I wanted ) .
You can find the file here with an example patch https://github.com/sterlingcrispin/public/tree/master/max
After exporting I suggest using Meshlab to clean your object. Sometimes very long edges are produced between ends of objects which are undesirable.
Filters > Selection > Select faces with edges longer than ….
Filters > Selection > Delete selected faces and verticies
the following screenshots show max (left) and meshlab (right) , not particularly interesting shapes but they’re highly nonconformal and essentially random vertices/faces as a proof of concept. If you’re having troubles with normals , you can usually generate them in meshlab with some success.
[attachment=212855,4918] [attachment=212855,4919] [attachment=212855,4920]
thanks a lot a lot a lot ,
this will save me so much time !
i have just made a try with the basic sphere, but reloading the obj. in BLENDER ,
i get the sphere sliced in 22 discs(+2 points at xtremities) ,
don’t know if this is expected , …
just to let you know ,
i try to join a screenshot .
thanks again , i have not read the thread , just discovered it right now ,
i’ll find this functionnality extremely useful , for sure
Thats what it looks like in max under the tri_fan primitive , as shown in this screenshot. Unless I'm on some kind of freak-mutant version of Max that no one else is experiencing. Try navigating around the sphere in 3D within Max, it should look like that 22 disk view.
I built the tri_fan2, quad_grid2 and tri_strip2 to mirror how things appear in Max, but there can be discrepancies. Play around until you get what you're after. If you want a solid object just use quad_grid or tri_grid , change the draw_mode from within Max , then set that as the same primitive on export and see if you're getting the results you expect.
now i get it
i like the tri_fan2 style …
HI. thank you very much for the script post in the toolbox area here:
It was the first one I was able to get working:) I think the issue with the tri_fan etc, probably caused the sphere to appear as in the attached image. The problem is, as I see it, is that the order of the points expected to construct solids from a mesh can vary from one 3D environment to another. that is, not all the solids shading options are necessarily consistent. Also there is a secondary issue, that is smoothing and creasing is adjustable on Carrara import. I don't knmow for other programs. However it's a real accomplishment nonetheless, and I'll share the capability in the Carrara forums :)
I have never used Carrara, but the idea of the OBJ format is that its supposed to be universal. Does Carrara actually ask you what primitive the OBJ is when you import it? Correct me if I’m wrong but OBJ’s dont actually contain explicit information about the primitives used, and can use any arbitrary method of stitching the vertices together. Its just a list of vertices and then a list of how they should be connected.
Try downloading Meshlab http://meshlab.sourceforge.net/ and opening your OBJ file from Max in that. If you’re still getting the same results than you’re probably sending data in the wrong shape or format to the exporting script. Check your plane count dimensions and data type. Or try tri_fan2, quad_grid2 or tri_strip2, play around with primitives and your geometry. You should be able to get something that gives you the results you want without much trouble.
Thank you very much sterling!
Its the order of points to make the vertices which are not being generated in the ideal order. Im trying a new approach using the nurbs object,,and I had some success with it, but so far I havent been able to get it working with anything except a plane. I am trying to get it working with other primitive shapes as input, but the control points need to be changed which requires some kind of slab processing which is hurting my brain.
Ernest, I’m dealing with a similar issue of vertices which are making a mesh but are in the wrong order. The result is just a mess. If I view them as points (instead of lines or tri_grid, or whatever else) then you can clearly see the intended shape. Did you find any solutions to sorting our the order of your vertices inside of Jitter? Thanks!
Anybody done more with this since the last post? So far
I’m getting the same results as Ernest exporting with the .js and importing into MeshLab.
Have tried with all valid primitives, same result…
Here’s a very simple patch that converts a mesh to quads and formats it as .obj — imports correctly to MeshLab AFAICT:
----------begin_max5_patcher---------- 2814.3oc0bs0aiaiE94jeEDFcAlj53HRcuCVfrXWf9ReXKZ2m5TDHKQayoxT tRT4RK5+8kWjrkksjnchYTwfwYBudNe7vuygGRO+40WMYd1K3hIfuC7Kfqt5 Ou9pqjEIJ3ppe+pIqidINMpP1rIwYqWiorISU0wvuvjk+bNggAKhh4CWUcah XwqHzkOliiYp4vyNXl0TfsiyL+vvvffofvPQIHqYVfespijD4PlM+q2gBqGM Z4ZBMEyjhArdJxwEboIhQxnMmFGq1SirflSBe7xJY0CnUUoErWSwxYehnf+5 5qEeLUSvghelKzGfMEfmv4r+SFE2CzfBkPSfis3GdJTA0Ap31KpXRUCmBRzS wr7qTL2VJlRVYutAq5vj4QzkSlxkyip6NGU2Q8aQfBcUBQPkcPeFCn2EDq+c JBKBR+aVfARi.e9dCM2rXeNaVP11yb4iuuGe0wKvr6X5BjdhTTFkBxwKv4XZ be1Wt1nsxefUChE2dwJz4fUcMWenXUbFUXMAXYfeuLJoOSJGG+sxuuk1jvvy Aqbbs1atr9fgoWyJyAy35CXQV95HFfT.HTvJtAVerWd6PLnkf2h+SGu9fKn2 YsMze21vPejwfqHFKujTKwheSQruJZSe3hSvtUWnqixaE7.mVGvseTNc3YQb 4D.aKBCfXvKIhkPVqKdgT1ObCHGKKKjyYAZdmGl0TLBMFl00lR1JLPZp8YNW +lTd3ifmIrU.4l03rrTvRLEmyUim3MjUtXQOXb.b2dUjJbCjOruspNmCFt+z 39gSroBnPhhBBMIEmzQPEQWeVk16LGTAdBC5EvrMdfmqwEEQKwGn07safuAB 9FTepmhu1CJWj7rOa5ITuwbdI1vzQ71ahh+sgUX2.keJKqyVisFKZ7s.GMTX G4Jra3v5KguC5npbGG07CPkKoCsLCCDmhxE5n8xrPsm1m1GbB6rQWzc1HKN8 yvIQvQEtg6YaiOvIIuDK3coxKwr9CevV3ygqlNuQcFZdi74kLVFsOcyQZFWk 3Cu5OGH+.GW87NAq3K5d34.6gU4p.A8PCubVmSj894ww.zIfA1WTy53TbTde Y3vUcFcmv2lUsUvXg59qD1rkoyVlSRTAj88+.3A0+pXi3nlfG3QjkSdgKPaJ Y.H3gnRVFuLRLvB7fHplg3+rCTg1phv0wVCqGtX8nZd6LuZg9F2APGXHCLGP Fl++T79UuqoK2egtiEk+VMb7E3dRt8OpB672lfcp0ZW22qfcBsGKq147IBCF HyAdp6LAcBwz24l7S4fLWVMWm6Do95hToCSmqN3nZcvwo1rLeNhvzn4o8lVM a2cIM0MPkswy8bqdgFOZnthDnJGERWfyZXObLHPZfGBkd2pRh+oq6NilirGs YCll.h6KPHenLBn.Wu2141sCFKw+dG.Nr95gTKuZrwtKtba+wx5721ahJBPR 6YeG4dZTv465116uGolodMV495MsF6N9NzZcPntpnucp+7LN0ZG4Z6CXSa4e PDjOZn1gvSN16ghAGcJGhy9hlj0brjxdgFL1v2HiMxerr3KBCGPT+YXE2OPc 5K6y8N+PG2p24if3tuT03GhdmHtggiGWU8cqI9pnPdOz3QjyYMBG48PiMuqJ 9XNGqQvk9pqpzUyyO1cBFG3kyDkGsFyv4OVcXmNOo0kMIRh+wfYdb6K5v5TP k9tGEnwS9Z+G6.Nq+Sd.U73A19uwaLbzDDSs26mzPqsdiZc3XQoE4cleBaMV o88BmgrrrfHQpEzMYRckPofwh4t..TY3FXCVjlEwrQ.GK9ZK3gnjnMLPuoTO r4afT8PHBseWxq9nIs5UWMwZbwJvO9ifGRxid9w0YI3pGKxCaxReUU.bm2xT BEGmURYMWAG.ACrTmNfednvp22j3FddSv3w8qF9w.i0x5fWQSfs17KZfAvQk oDlp4FJeKz1GZpy6ylJX+7NKxnrBxeHGPnvAup33rzrb0jXMC53F5Ke5tNNA BwzZVfcHBJdXbmxKCuwTR4A9HK7ekShR2Ccv4UnbELy6.IE+DNufjQaH5WI7 a2n3qZzEwZyWUJf+zsEQnphr2VTN9IR6gkOt470HFeApLWIju3Um8Fwvv21m SKIx9nJjakbc8.t0GRnxGRXiWYjiHM003E2fZ4dvb3zFe.a1PbBgILZztCyW llE+a3jFQTxsd395IzluTu8pNAuHpLk83wsH1udwWdkN67QWauZh3hdynBgX uEQ48+VMchfMkr.tMUFYKnQaNRm4F3b.uiJK3JYYw7nbwZ79gWy2flkkteUa 6WJdAqp5MDJsEJxx1zck4jkq5ouyy3UttuwVVSwikTUsOxoWXOVD8TKgOJMs huY+g+kHJgyGfYD0R.O5ks1PxiXrpHNOKMcO8UUySGolD91iX7yjD1J4D0zX f2bxlZinIaWkSHKwEr8KiEsrX+RNfTfWT47ps+Oxvq2jx0h8avde+qZtWuIy 7dk2GC89rzD5V23cFSn016WYJv9.uTCDIbmG9oy6ZqG14tiXtCvsCV25Jkd5 p3wNSrMlSJJZoVXn5x5rCk4Nw1Cd9nnUmnHrkp2lw5xitMpUfNxZt+Vv2Kej 1ofeFGuhR98R728k7uP+B6mWs6a5DHaA.GEuRFtIHJWbcf3XxBBNQ7rkUcHV Pw+Lo.Cxx4dj.Q7CxkFMGmlxakfDkafNUVp8LPUe9uoQw7kD.aE2IvtoKNiV fiKEub7zWEyf3slq5Q0iuo57BJphBPy.jkOBcUiOHPYVFXSNmXNmOrh5jCrr pYpdn97mX3MEU3vWXva.+6nz3RAEfrCwk44bWVJzfPSvuT2TzMb7jIaTkDFm wQCBUzUNHtSOD+ojeN+bffdm2rb9x.3S6FRf0M0szts.jsXQAeZpFPYe1MpU vU07OOpPsHQXEGQfctA7SQb1M03x8FuCaahU6F8b7cQ44QzkpdrcIiPq9NLU 8x0E8316EeJJjj7B3eBh41BydA7O.NeVTw+6G3k8DN9S7y7kk+IUs26bys7C cH+kWuQ1tW3pKukpVgtKZdwmpFy6fybug2dYydsYypZv8H0PHWE3UxmxuUNk hwbJPzEUCD+kaZA4sgh4F3ErOQnbKVYGuOgr9lO+dRO0C0el3okoGukih1Wk +mCH+Ox2Uhgokzh9w5chbeWHUhip1guTo5Kp+3vZQVYdbMwbMGLXejfGb.Sr ErJ3feYKnzpcqHIIXZaMLgTHHYTQFokMvIKxPME4inammLC90q2UR0AKkC69 qDpyY1VcpNs4Apg3YHtS55RE1qMGH8GJ4GbrWcEGOMjlVh7kTbDeQ4FUxi3x ..vwl.gFx9Q7fgMlDoiMjRtMIFMrDEZLIJPqM8HGiIPslpiKPh+WXvT.jFF0 FDdfAZ.OlCczx5IvnKVCxQaLoITGvwxblNVZw8XN4QKtP2Ql73OxjGyYNa6p kqhwE9X6YN4QG7AYv8695JOPyHOg5JOHyXO6oq7XaF4Qm0KaywGhzweAxb7g HsvGyErgcv3xeJRmPUsM25ksV1Ola8xAMxh+QG6GyAOgZkfCGyJOPcjGy39J TmClFZN5Y4TA0Y6EzbxyfzyFL7GcLePFUbFBcL3YKrFYNufZEcn4jmPj14Ey PQOqUhwZQhOBPHCltWjV1znPCJQZYTaRRwVND5ShLjcsVgIJ++ALicSOnQEW sW3ELkupaMr0KeTHIsdwisdsiG9RG69UN19ENJecipKdt0MUt8Jm+Z0S2xxp 5pzEe2VvTV6aqdx5xTFoVmj2K5ec8+GvXIEeJ -----------end_max5_patcher-----------
i’m getting the expected results with tri_grid.
also, very cool mesh to text to obj patch.
Great, thanks for sharing! I haven’t touched/needed this topic/technique in a long time.
great thread, very helpful!
Forums > Jitter