Hi Ben, Thank you kindly for the nice introduction. That has been extremely useful to get me started.
I am up to the point now where i have the x and y coordinates and ready to place an object. I am having a bit of trouble to add the object at the click location. I have: * var* theBitmap:BitmapMaterial = BitmapMaterial(Mesh(e.object).material); m.translate(e.uv.u*theBitmap.width,(1-e.uv.v)*theBitmap.height); var canvas:BitmapData=new BitmapData(20,20,false,0x00000000); var s:Shape = new Shape(); s.graphics.beginFill(0xcc00cc); s.graphics.drawRect(0,0,20,20); s.graphics.endFill(); canvas.draw(s); theBitmap.bitmap.draw(canvas,m); But after doing that i dont see a rectanlge show on the sphere at that location. Am i doing something wrong? Cheers Dan On Wed, Oct 14, 2009 at 9:35 PM, ben <[email protected]> wrote: > > HI Darko, I'm not sure if it's what you're searching for but here is > how you can : > draw an object, or add an interactive object where you click on a > sphere (or any plane ,hippopotamus, etc...) > > You should use a movieMaterial, that way you can add button or any > movieclip to it, but you can also use a bitmap and draws on it's > bitmapdata, circles, lines, etc... > >Here we will draw on a bitmapdata, that will accept transparency: > var canvas:BitmapData=new BitmapData(500,500,true,0x00000000); > >we draw something in the bitmapdata, or the material won't work > var s:Shape = new Shape(); > s.graphics.beginFill(0xFFFFFF); > s.graphics.drawRect(0,0,500,500); > s.graphics.endFill(); > canvas.draw(s); > > >that we add in a clip then in a a movie Material: > var canvasCont:Bitmap = new Bitmap(canvas); > var movieCanvas:MovieClip = new MovieClip(); > movieCanvas.addchild(canvasCont); > var canvasMaterial:MovieMaterial=new MovieMaterial(movieCanvas); > >wrap the sphere > yourSphere.material=canvasMaterial; > >add our mouseEvent > yourSphere.addOnMouseDown(onMouseClickOnObject); > >the next function will add 2 event to the object : we will draw when mouse > will move, but for you this could be on click > function onMouseClickOnObject(e:MouseEvent3D):void { > e.object.addOnMouseMove(mouseDraw); > e.object.addOnMouseUp(mouseDrawStop); > } > >here is the main man, we will use UV coordinate returned by the mouseEvent > to draw on the bitmapdata contained in the moviematerial, or add something > in the moviematerial where te mouse is hitting the sphere: > (the comments are as3 comments so that you can paste it in your code > editor to ease your reading) > function mouseDraw(e:MouseEvent3D):void { > //if the material is a movieMaterial and our object is a sphere > if (Mesh(e.object).material is MovieMaterial && e.object is Sphere) > { > // we get the movie displayed byy the movieMaterial > var > movie:Sprite=MovieMaterial(Mesh(e.object).material).movie; > // we get the bitmap contained in the movie > if (movie.getChildAt(0) is Bitmap) { > var btm:Bitmap=movie.getChildAt(0) as Bitmap; > //we create a matrix that will use the UV coordinate > of the mouse > to draw on the bitmapdata > var m:Matrix = new Matrix(); > // here you have the main way to get the > mousePosition on the > sphere projected on your material > m.translate(e.uv.u*btm.bitmapData.width,(1-e.uv.v) > *btm.bitmapData.height); > //we draw whatever on the bitmapdata > btm.bitmapData.draw(yourstuff,m); > bumpMap.draw(yourstuff,m); > //or we could add something on the movieMaterial at > that place > yourstuff.x = e.uv.u*btm.movie.width; > yourstuff.x = (1-e.uv.v)*movie.height; > movie.addChild(yourstuff); > > //don't forget, you're map has bood, if you wan't a (almost) > perfect > you have to wrap something like that, > //for all the bounds > if > (e.uv.u*btm.bitmapData.width+brush.width>btm.bitmapData.width) { > m.identity(); > > m.translate(e.uv.u*btm.bitmapData.width-btm.bitmapData.width,(1- > e.uv.v)*btm.bitmapData.height); > btm.bitmapData.draw(brush,m); > bumpMap.draw(brush,m); > } > } > } > } > > > > > last remove the draw event when mouse is up > function mouseDrawStop(e:MouseEvent3D):void { > e.object.removeOnMouseMove(mouseDraw); > } > > Now that should be easy for you to use coordinates to draw lines, and > whatever. > > Hope this will help. > If not, the topic title is so clear that I'm sure many people will > come here later to get that code ;-) > > -- Radiceski Darko University of Wollongong Australia SIFE - UOW Chapter - Alumni CASUAL ACADEMIC STAFF TEACHING - UOW SITACS (School of Information Technology and Computer Science,University of Wollongong) Univeristy of Wollongong - Alumni
