Infrared Drawing Installation: Drawing 2D images based on Tracked LED Pen?
Jitter newbie here, wondering how difficult of an installation this would be to put together for an Art Class I am taking. I have done some tracking using the wiiremote’s infrared camera before using laser pointers and infrared LED pens, so I know how to get the drawing part set up, but the rest I’m not to sure about… Here’s what I’m going for:
The user will use an LED pen to draw a line on a projected surface. The patch will generate a line segment based on the start and endpoint of the user’s "stroke." Then Jitter would select (randomly for now) from a specified library of .bmp files and "draw" in that figure according to the orientation of the line segment that was drawn. The images will be "lassoed" (cropped to their form) digital photos of random objects or people. Each one will have a "skeleton" that will be used as a reference for orientation according to what angle the line was drawn. So, this will have to be saved as some kind of metadata with each file or group of files. After x number of lines are drawn, the image is saved to a new .bmp file. This would give the user the sensation of painting an entire scene or portrait using just minimal "brush strokes."
I’m pretty sure Jitter is capable of doing all that but these are the parts that I could use some advice or at least a hint for what objects to look at:
1) storing metadata for the "skeletons"
-Maybe this isn’t even necessary if I just save each file so that the default orientation would just be straight up and down? Then I would just have to measure the angle of the drawn line and offset the .bmp by that much
2) Getting a straight line from the user input
-It is likely that since these users will not have practice drawing straight lines, and they might forget to release the on/off for the LED in time, creating an unwanted curve or tail at the end of the segment. I would then need a way to average the line out or tell it to take just the part that follows one consistent direction across the screen
3) Using the angle of the line input to tell Jitter how to draw the next .bmp
- For now I just want the images to appear roughly in the same region of the projected surface as it was drawn and at the same angle
- Incorporating Scaling would be nice, but not essential for this first version
If I can learn how to accomplish those three tasks, I think I should be able to patch together the rest in Max. Let me know if you have experience with anything like this, or can help point me in the right direction. So far, I’m just working with an LCD for drawing the line input, and not really sure how to convert it to a jitter matrix so it can be properly analyzed by whatever jitter objects I will need. Thanks a billion,
Interesting project with some definite challenges. You can start by replacing lcd with jit.lcd though? so it’s in a matrix form for you. You might look to jit.sketch as well for drawing the lines…working in GL land might make some of the orientation etc. easier later, anything you draw can be scaled/rotated/repositioned after drawing, unlike LCD or jit.LCD.
For the line drawing, I would rely on the start/stop points only, and just connect a line between these. It won’t feel as "organic" but you’re not really making a "paint" program, it sounds almost more like a CAD thing…? so that lines are auto-straightened, you’re building a kind of architecture in the scene? I think it would be a bit tricky to take a curved line and figure out a good straight-line approximation, though using the start and end points and the delta it would be feasible. You could easily incorporate scaling with the length of the line.
Curious to hear your progress, this seems like a visual-art version of many "paint-music" ideas which have been tossed around. I like the idea of making minimal brush strokes able to paint a whole scene. I also wonder how far you could go with the technique, it might be interesting to have additional refinements possible with specific brush strokes.
And, if you use GL land you can make it 3D if you want… :)
Thanks for the help again, seejayjames… Really appreciate your support and encouragement for all my wacky Max ideas, seems you always have some very helpful hints.
So, I’ve started messing around with jit.lcd, and got it to "paint" an image (as long as I started in the top left and sloped down to the right), and everything scales fine. Assuming I was satisfied with having all of my images oriented vertically, I could almost be satisfied with what I have and call it a day. However, I wish there was some way to take the slope of the line (which I have already calculated inside of the mousedrawing sub patch) and use this to set each new object’s orientation. There doesn’t seem to be an offset or orientation attribute for the "drawpict" command in jit.lcd, so I guess that means I will have to use a separate jitter object to do this. What do you suggest as the simplest 2d method for achieving this offset idea, jit.rota maybe? I don’t need to worry about 3d drawing for now, just something that would allow me to rotate the picture based on the slope between the start and end points of the line. I’d also like it to keep the new image file centered over the drawn line, and not just use say the left or right edge of the image to line it up.
I really wish for simplicity’s sake that in the end I could draw in the same window over which the images appear, and I hope this will still be possible even if I need several different Jitter objects to get the proper orientation. This may seem like a silly question, but I would be feeding this other jitter object (the one for handling the rotation) into the jit.lcd, right? Or would I combine them both into a new pwindow?
Here’s what I have so far, so you can see where I’m at so far. Thanks again for the help,
----------begin_max5_patcher---------- 3826.3oc6cssjahjD841eEUnvOLSDs0TW4x9lmc+B1XdX2XlM5.AH0Xi.s.x t6ch4eeqaHAcykRxBTo11SLpEf.x7TYlUlYUUV+46tawp7mhKW.9afeGb2c+ 46t6N4oDm3N8w2sXavSgoAkxe1hr3ulu5SKtWcop3mpjmdGXa99x3nhfuljs o9xqyypJS9ewheBhrDpOc19sIYowUxmH53Iy2WUeVl9r6BpBej+DenHNrRQm TnK+IAbPdKY2CPPewQXzRH3+nuojHIMwoyOPqIE0yt54cwpmxhE2CVjjU08e N7nDbPVvV4Ms3iEIAoKZRYwEZnRiU7aHIM9KwEkI4YM3t6VDraWiSeWiaQ.v eJW9fbt+voRxTmBd3TEweIo99gpS9Wuq9weDdfB3fREehvP4QtddGQGdC7lz 7vOGG07wuHeWbVR1th3x3rpfp52S8kihWGrOs5gVsn3kcd80Agw8dycBl2sX SQRTdlfHZcmhSW+59c.SvLrlrh75YA653VK4bw9xUAEBTaUp7QfquXUddZ6K cnghK9GjkrMnJtJQQpbTr9hIa2UHkOZ7hhyB3OiGKCKxSSa8nTW4KcbkHdaY X7WShpdT9rZBj7edxt5FfEGPnnjMwkUsOWUvlx1mok9bSgrl50sN+K0u2ucE Wp99iWtml79Tj6PYF23JcnPy7PRoTlTulIEYwvFMyuPmFSVz5AVvEophKdPA 2sTZ5RwWqluJfamp0qnCwy5K9Wu6c0e49yEXaZ3rswyfUkWV.GYFficD+gLN fSWLFfNm.47Kg5h8NMIT7OjP+ljPqAbikPg1jDZX91swh1vNPxe84O7wmurX IbXrzS54EvwWI75LFVh7WXGH0Se3iOMqHkiBbLGo7VXCJmwOsq.790nO7903 yAuveiZoZ7xkMJd4LnVpkXq6pAm5tkMGNYVCbNjdbYJ227YUOl5RV5xiMzkJ UgYdKwrQfR57oIq3iEWbt1mnryKgT.lU+Yu7LpIMT2BJil3Ffa8b7OMtEdKy st9tmD25eSyr5tULkYcmClcHKbwYQfc4bmLAU4fphjMahK.gAog6SUYRYVch wWl6GFRpefFuaD1L5u25zbNyLqwtQgpfc08ELZnDL2uoX23bXvUI5sgckFz3 e+57F+AiHa.XXUNIgzQaAH1Q.HerEpMyQsQntmHpgsmfQ9Ik6yje9W3eCy+F 8mOGvidtdRq040dRiTBfCBdvagHSBejaS4B6JMYXjDifpLvvLy5I0eXfr6gY 4sYVC0RgTehgXm6MYVCmefkf8U.K1Pf06G.qYiDiOSF3LU6C43HqyOPVyPVL QirlZLf9FaHDRZ6k0jmMMhKVMR3RQYBd4Ho.h3YUCxkEAjZqsFCj92H.YTbZ vy.zrBlT0Lxf33n5AaTy.C6X5bqeuZeUU67YbYFuOMrPgjZ.YDXAYBrLOhQk wo.3kUHxL+ezNkSFcbpn3wQq6slnb1E74YUkD6JE2XDrg12H2BwJN28RfQzS qWB7O5tsSfD4hNMfD8ita6WpjhOotaIeezcqFVLt6Vruc0cKZV6tEql.MD03 qNd2sXWqq6VIJzqbD7rCMPMFS9lMNcdmP+lWigw60ZacO+0ufY4G4nPMWonE 06kSk8WBgN1wHiDVUjNq3DUMyK03DdTbhYG3T9tpYElH9NR2Ezvj+XvD0RDm B1UNu3Doo3DYTbxRFPxxGSVOuBTXObSfhMFPgu8mFUD4xJxU0YuAyqnq8jO4 2dLoDTtekjU.b9HN4Kwkfjr04EakS+DPvJN6CpdLVsHs.6xKSTWHKBHfEvy4 6Ah0tE+1j+tOkTsb2WSxhx+JHnHNn4aNMIKNLeuhMwyoznmLXHDxU4Nlas6X 81a4L1c413xxf1CNaCWVq.BTqJ+bTd+FB9QME4XRcXGbsuZ8BWtVShMFCM2l +k4FMQLpP5SiltzQQSuagzDUAR.qtrcofMBGYLZinoFxk2wGNgamA5ZBELYp wrU6Yy..pK7FIgQ6Jh2IlZkmux9YmfDkS.0yeH3n983htET12ED9Y.bfAqXJ DOUPoN65tiKchuIVTCO8KO+GYs8lpWejHyoORL0D0xgpV+bp4P3PKBfYbMLU kuYSZ7DL5gTky5poL43oyD0dItcVSthKZ5NmJfg34bZ.S60Q4aXfQmaDyAFz 2G.idvPOAfA+cBvfNQaLWfpTvMAvnc+7D.FpcALiLa.mhXfzooUAY5NuPCAY rYax.1zYmhjxv.8yeo+sMjSZZv2DH24MFj2eXA6ypCLn4+cYac7Lp0QYikpV yKC273ZRVANs+XGAoUvYl5D0J+LIJM9bZLHm6Z9POptpPHPiOnjHr2nK5i4d .uGb3l1FMuChBt0nMMZFuPDhUrTtjSrwAlqESgrWcVVwD0pW0cbvhYzrs3aY VWbrdiIhqumxqkjYDWuaPuLeeQXMQomMDf1bUTbYUR1gZu1u2P65E+xGShhZ Wtyj2eRonuonFEHtQDQNUZVjbFiHZQ9vLhl2lDIW4zZPUYrwQOafOdP6W4zy mHSabrmlFnojrPgwRHZQt8MSdRvcH6glQlRyVBN6Mw5sZmEb77Zn31ppSNSL p6DynXlZjAt1LJyT0clq0HERMUaGaQzrwZN2djrTFBeaQyhZdkkzQ.0TaM91 ing6oHZPtsnYQ0kyVDMbNEb9FilQN1i7L8Tv4aLZFYO9oSMMtOJ71ilIVj8Y zaYZ1dxiA0Tumo1S.9DS8dtCCLWMZ1T25n1SeJDis04d6QyhLKaI9aPL0tA0 draXLMKwYKglM0VG1d5SAapstND7seZ1d5SA69VllsGeQwl5yO1drazAozSb JVDNaZ+fHKRd1X6y1isNjo4J.aOxFcDNcOzr83+bWiUW2Dsi221.2PckKstF GMyCnghUMYb0brG+t6Zr46aT7sMpFcQo5WJVomsrpxVL0SUDany9vjgL1aA4 D9yZZfbMtAhclMPPmkDlKhxaWTKqawYf5itJsRXi3W54amCinXWeAK51XBtI O5pvvDiXXxYNP0X7RHu8E6bnEVbJ10rElZDCiOSF10eoO1iw7Nxv7ScUYXlQ L7YNUDDK.dWOlK7XKLQsX6tdLriQLL7LYXe1RGJuIlbjg4m5pxvtFErg+YNa 3XjCbGW6gcEUeM0geWKJHEiIZhu0jUzSfnQVDQyNEwiaMhl3cKRz1DRaZ5ub 7sHqGlRzzaRh9RYm93biORVsFhyBe9gvfvG0zkdo5UuSkunL3KwQOvIg3vpG BppJRVsuRMm5avcKNu8Ybi1hrMX2HefKM1Fg9lz7UAo5MG9COiEit8d2hgd2 QPV9oR1PhMMVVGJrZfkywqq7CMVXW8rVN5bG3o6UDZ2KEejb9wpp1PpMzxlK eiN2zEGnLOz2Jz3Dgk10SHiXc7ox5dps1AJowlDcyBDT6Usxrw58IQTbrN0X Ddf5DOf8iGDnp16VWBdGRTvawT1bebs0EGDsKIrBvs3n9X4lj0SpTAyQJH3P jK4WjdcM0mXw0Rg3XQZtH3qGQn2S.umBdOB7d7jBR0VMTanOH0NubefDyx.I F.gf.Ll++rIEkHtRYHWcsG60Ezst1TLuZFX9uaiqJxAD3zpd4o.Ao7i6fc2f 6EQZsJsmVTQTu0BSiCJ91M8hGEUTqkxgQk96HRuxnUT6EFcZu7bOBO+8zDti JU4fxpfBUIqTIGMo8TgfpU7LVlLIjpB+0Gf4eY6ppUY4vD9XbkAEa75JwQma 9yCUZCFp3abhronfhtdW4l8IyffuCRUywX0EDuNQf9sGzZcBegZmaTQUWbAY UhibfaI5VaZOM2NFxqqxKhhKjzyR3ETu923JxoI7NKUw+rJtTog+utW82+MH Lm+pEwoxuz57BopexVduu2C3gftKM343HPPEX89zTfPtYI3iYfbYjTAoffnn D8Wq9ZNPjCUPXPFXUr3R7aUXSQTYMN9fWVSkcUPamFCMTrdKsVsiZ4QdYErs ysCxI2lK2.OHfCqBeZJmeTQCGXnztkpjk0RPVPpg4o4EpeObICh7cP22425K XSxAcfUaZ8vf229igT7quRwlUmJsrZ+Js0UzEzUTYuysZ2lD2rP959DkMNNt CGaq6U2C8CA5s8YotNHML5gU7N3hJdNc4m1sYZCmAp.HsbMZX35vlqhEDPSM bIBlANKXjpp0NRHeniQQb8vnX96MtIJMG3CQMCZP3QvGj8ICMawEqgJrtlNB GIya3YCp5qG2+gnR6evODgWMAfxcwgIqSBAo4gAGJN+JWVRl1D04nm4OJYLh xbUy87fKSGvGJYW2jc.aXa4Ocv+zetm10Isoj4PpyGhz3AYhZJIuEaJ+mbmF 3Zc5Vx0IbMu0E4aEwe7Yo1nfAlbkQbyNDw5j2b4aAYuIUFk8Q2TqSzizzpwo 2U3fHUyFbZZuNTwpeS0doB8TX8j6etHDcwWC2WTv+wfUAgedSAOBzHfhim+. Sq8iWlGUjGbZhLEAeyFY5zFTpNNT0dnGcP297gW6wCQj.PgTNED9HWnmH7Kl BmgrgRz0ySxfiCfuWu.DmxeXaPUQxSSQhQE.TqcdwEOlj0ZRbbRfyQqF8CYj wCKkzyNi5hjMY47etXbJZ9Bdkg.78M9nGLm50ohORot6v77vTw2PTe3KdJRN TMqbjCv7YjK+5xxZyRe6.VVToFte6SsrnbHMxvWpFfapXj+kW7DeMpcyKQ44 OxfxbAEnvvu+DnPmu.k7w2tltpjud47tSKk8p4ameqYFZOS0tVKQrWOK6d8L r6Uh6mD4.GgbblOxAZ.43OF77xExiZRPfcP5LQWevw2yEiAbm.5Wukrvf5BQ OcoK6UGp2dRpGaO+Ig6bLP1kNaBKNFf0H7rQNrInomxPpMkIu5ktBl8pCmkl d5TvcHohoiZwdJ1Ihgu7nYi2FSrVLySOtdCmTAo1uoAHGxrQNDSHG3rQNTSH GzrPNDCjcN4NrP9prGHSh.0coGg+OmtNCAJ+oZ8CwASf9Aw.c+4yNK9RXI5x QNHSrLxlOxgLEtffgxYKI1y4nzl7fIPZCQvSWeMyR+In109nKLGPfMz3EGLI b.7VmCZWbst7b.rIGLIRQlHDQlOCKS.bxbT8d4nBvggk9y9hCOCUVdH6+069 +R5rC9C -----------end_max5_patcher-----------