Lots of the same mesh?
Archives Forums/Blitz3D SDK Programming/Lots of the same mesh?
| ||
In 2d I would load an image and draw it several times at array position in a 2d tilemap. How can i make lots of the same mesh and have different xyz position for it? Heres what I tried. Psuedo Code =================== global mymesh = bbloadmesh(mymesh) Type Block field mesh field x field y function create() local b:block = new block b.x = Rand(0,800) b.y = Rand(0,500) b. mesh = bbCopyMesh(mymesh) end function method PosMesh() bbpositionentity(mesh , x , y, z) end method Create 10 Meshes while not bbkeyhti(blah for local b:block = eachin blahbooly b.posmesh next wend Is copymesh the wrong command to use? Another thing, how do I load a mesh and not have it display until it's created? Currently when I load a mesh with loadmesh it displays it on screen. I don't want it to do that. I just want to load it and then when I need it draw it. HideEntity hides it, I know. Thinjk of it like 2d. When you load a 2d image it's not automatically there until it's drawn. |
| ||
We so know so little B3D dont we ;) I think that CopyMesh makes a low/real copy of the Mesh, whilst CopyEntity makes a "Pointer" copy of the entity. That is CopyMesh takes loads of memory, but CopyEntity doesnt. We probably need a B3D programmer to tell us for sure |
| ||
Use copyentity for simple copies of the entity which you don't plan on using mesh commands on, which actually change the mesh structure ie positionmesh, scalemesh. This is a quick simple workaround me thinks. bit rusty with bmax Type block global MainMesh = CreateCube() field DoRender:int field entity:int field x:float, y:float, z:float function create() local b:block = new block b.x = Rand(0,800) b.y = Rand(0,500) b. mesh = bbCopyEntity(block.MainMesh);is this right, not sure you access globals from type this way? end function method render(draw = true) DoRender = draw end method method draw:int() if DoRender Showentity entity else hideentity entity endif end method method PosMesh() bbpositionentity(entity, x , y, z) end method end type for local b:block = eachin blahbooly b.draw() b.posmesh next edit: i have put a simple loop in but you would need a while/wend with bbupdateworld and bbrenderworld. |
| ||
What H&K said is correct. |
| ||
Currently when I load a mesh with loadmesh it displays it on screen. I don't want it to do that. Hide it before your first call to RenderWorld. Import blitz3d.blitz3dsdk bbBeginBlitz3D() bbGraphics3D 800,600 Local light=bbCreateLight() Local camera=bbCreateCamera() bbPositionEntity camera,0,0,-10 Local master=bbLoadMesh(AppDir + "\visual\sr_tree000.b3d") bbHideEntity master '<--***** 'Local copy=bbCopyMesh(master) While Not bbKeyHit(BBKEY_ESCAPE) bbRenderWorld '<--***** bbFlip Wend |