Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --------------------------------------------------------------------------------
- -- Handler.......... : onGenerateMesh
- -- Author........... :
- -- Description...... :
- --------------------------------------------------------------------------------
- --------------------------------------------------------------------------------
- function AI_Main.onGenerateMesh ( x, y, z, sx, sy, sz )
- --------------------------------------------------------------------------------
- -- Var for Scene
- local hScene = application.getCurrentUserScene ( )
- --local hObject = this.createObject ( "Helper" )
- local hObject = scene.createRuntimeObject ( hScene, "Helper" )
- if ( hObject )
- then
- -- The first reference to hMesh doesn't seem to point to the right thing...
- -- Override mesh of object with a new blank one
- local hMesh = shape.createRuntimeMesh ( hObject )
- -- But this reference will work
- hMesh = shape.getMesh ( hObject )
- mesh.addSubset ( hMesh )
- -- Index buffer requires 3 indexes per triangle, hence 6 for a quad, 36 for cube
- mesh.createSubsetIndexBuffer ( hMesh, 0, 0, 36 )
- -- 4 vertices per quad, 8 for cube
- mesh.createSubsetVertexBuffer ( hMesh, 0, 8 )
- -- Locking sounds like a good idea
- mesh.lockSubsetVertexBuffer ( hMesh, 0, mesh.kLockModeWrite )
- mesh.lockSubsetIndexBuffer ( hMesh, 0, 0, mesh.kLockModeWrite )
- -- Quad is a total of 4 x 4 large, created with it's center at x, y, z
- sx = sx/2
- sy = sy/2
- sz = sz/2
- mesh.setSubsetVertexPosition ( hMesh, 0, 0, -sx, -sy, sz )
- mesh.setSubsetVertexPosition ( hMesh, 0, 1, sx, -sy, sz )
- mesh.setSubsetVertexPosition ( hMesh, 0, 2, sx, sy, sz )
- mesh.setSubsetVertexPosition ( hMesh, 0, 3, -sx, sy, sz )
- mesh.setSubsetVertexPosition ( hMesh, 0, 4, -sx, -sy, -sz )
- mesh.setSubsetVertexPosition ( hMesh, 0, 5, sx, -sy, -sz )
- mesh.setSubsetVertexPosition ( hMesh, 0, 6, sx, sy, -sz )
- mesh.setSubsetVertexPosition ( hMesh, 0, 7, -sx, sy, -sz )
- -- Set texture coordinates per vertex, note the coordinate system is OpenGL
- -- So the 'v' coordinate is sort of opposite than you'd expect
- mesh.setSubsetVertexTexCoord ( hMesh, 0, 0, 0, 0, 0)
- mesh.setSubsetVertexTexCoord ( hMesh, 0, 1, 0, 1, 0)
- mesh.setSubsetVertexTexCoord ( hMesh, 0, 2, 0, 1, 1)
- mesh.setSubsetVertexTexCoord ( hMesh, 0, 3, 0, 0, 1)
- mesh.setSubsetVertexTexCoord ( hMesh, 0, 4, 0, 1, 1)
- mesh.setSubsetVertexTexCoord ( hMesh, 0, 5, 0, 0, 1)
- mesh.setSubsetVertexTexCoord ( hMesh, 0, 6, 0, 0, 0)
- mesh.setSubsetVertexTexCoord ( hMesh, 0, 7, 0, 1, 0)
- -- Indice buffer tells the order to connect each point to make triangles
- -- These need to be drawn counter-clockwise or the faces will be flipped
- -- Note some vertices are connected more than once, you can connect these any way you
- -- want if it works
- --Front
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 0, 0 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 1, 1 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 2, 2 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 3, 2 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 4, 3 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 5, 0 )
- --Top
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 6, 3 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 7, 2 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 8, 6 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 9, 6 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 10, 7 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 11, 3 )
- --Left
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 12, 4 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 13, 0 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 14, 3 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 15, 3 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 16, 7 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 17, 4 )
- --Bottom
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 18, 4 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 19, 5 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 20, 1 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 21, 1 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 22, 0 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 23, 4 )
- --Right
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 24, 1 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 25, 5 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 26, 6 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 27, 6 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 28, 2 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 29, 1 )
- --Bottom
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 30, 5 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 31, 4 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 32, 7 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 33, 7 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 34, 6 )
- mesh.setSubsetIndexValue ( hMesh, 0, 0, 35, 5 )
- mesh.unlockSubsetVertexBuffer ( hMesh, 0 )
- mesh.unlockSubsetIndexBuffer ( hMesh, 0, 0 )
- -- These will update stuff...
- -- updateBoundingVolumes is really necessary, otherwise your geometry will spaz out
- -- and be picky about showing itself
- mesh.computeSubsetVertexNormals ( hMesh, 0, 0 )
- mesh.computeSubsetVertexTangents ( hMesh, 0 )
- mesh.updateBoundingVolumes ( hMesh )
- log.message ( "Mesh name: " .. shape.getMeshName ( hObject ) )
- log.message ( "Subset Count: " .. mesh.getSubsetCount ( hMesh ) )
- log.message ( "Vertex Count: " .. mesh.getSubsetVertexCount ( hMesh, 0 ) )
- log.message ( "Index count: " .. mesh.getSubsetIndexCount ( hMesh, 0, 0 ) )
- -- Set the material
- shape.setMeshMaterial ( hObject, "DefaultChecker" )
- -- Center the quad at the passed coordinates
- object.setTranslation ( hObject, x, y, z, object.kGlobalSpace )
- hObject = scene.getTaggedObject ( hScene, "Box01" )
- hMesh = shape.getMesh ( hObject )
- end
- --------------------------------------------------------------------------------
- end
- --------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement