Advertisement
Selzier

Untitled

Jan 25th, 2014
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.46 KB | None | 0 0
  1. --------------------------------------------------------------------------------
  2. --  Handler.......... : onGenerateMesh
  3. --  Author........... :
  4. --  Description...... :
  5. --------------------------------------------------------------------------------
  6.  
  7. --------------------------------------------------------------------------------
  8. function AI_Main.onGenerateMesh ( x, y, z, sx, sy, sz )
  9. --------------------------------------------------------------------------------
  10.    
  11.     -- Var for Scene
  12.     local hScene = application.getCurrentUserScene ( )
  13.    
  14.     --local hObject = this.createObject ( "Helper" )
  15.     local hObject = scene.createRuntimeObject ( hScene, "Helper" )
  16.  
  17.     if ( hObject )
  18.     then
  19.         -- The first reference to hMesh doesn't seem to point to the right thing...
  20.         -- Override mesh of object with a new blank one
  21.         local hMesh = shape.createRuntimeMesh ( hObject )
  22.  
  23.         -- But this reference will work
  24.         hMesh = shape.getMesh ( hObject )
  25.  
  26.         mesh.addSubset ( hMesh )
  27.         -- Index buffer requires 3 indexes per triangle, hence 6 for a quad, 36 for cube
  28.         mesh.createSubsetIndexBuffer ( hMesh, 0, 0, 36 )
  29.         -- 4 vertices per quad, 8 for cube
  30.         mesh.createSubsetVertexBuffer ( hMesh, 0, 8 )
  31.  
  32.         -- Locking sounds like a good idea
  33.         mesh.lockSubsetVertexBuffer ( hMesh, 0, mesh.kLockModeWrite )
  34.         mesh.lockSubsetIndexBuffer ( hMesh, 0, 0, mesh.kLockModeWrite )
  35.  
  36.         -- Quad is a total of 4 x 4 large, created with it's center at x, y, z
  37.         sx = sx/2
  38.         sy = sy/2
  39.         sz = sz/2
  40.         mesh.setSubsetVertexPosition ( hMesh, 0, 0, -sx, -sy, sz )
  41.         mesh.setSubsetVertexPosition ( hMesh, 0, 1, sx, -sy, sz )
  42.         mesh.setSubsetVertexPosition ( hMesh, 0, 2, sx, sy, sz )
  43.         mesh.setSubsetVertexPosition ( hMesh, 0, 3, -sx, sy, sz )
  44.        
  45.         mesh.setSubsetVertexPosition ( hMesh, 0, 4, -sx, -sy, -sz )
  46.         mesh.setSubsetVertexPosition ( hMesh, 0, 5, sx, -sy, -sz )
  47.         mesh.setSubsetVertexPosition ( hMesh, 0, 6, sx, sy, -sz )
  48.         mesh.setSubsetVertexPosition ( hMesh, 0, 7, -sx, sy, -sz )
  49.        
  50.         -- Set texture coordinates per vertex, note the coordinate system is OpenGL
  51.         -- So the 'v' coordinate is sort of opposite than you'd expect
  52.         mesh.setSubsetVertexTexCoord ( hMesh, 0, 0, 0, 0, 0)
  53.         mesh.setSubsetVertexTexCoord ( hMesh, 0, 1, 0, 1, 0)
  54.         mesh.setSubsetVertexTexCoord ( hMesh, 0, 2, 0, 1, 1)
  55.         mesh.setSubsetVertexTexCoord ( hMesh, 0, 3, 0, 0, 1)
  56.        
  57.         mesh.setSubsetVertexTexCoord ( hMesh, 0, 4, 0, 1, 1)
  58.         mesh.setSubsetVertexTexCoord ( hMesh, 0, 5, 0, 0, 1)
  59.         mesh.setSubsetVertexTexCoord ( hMesh, 0, 6, 0, 0, 0)
  60.         mesh.setSubsetVertexTexCoord ( hMesh, 0, 7, 0, 1, 0)
  61.                
  62.         -- Indice buffer tells the order to connect each point to make triangles
  63.         -- These need to be drawn counter-clockwise or the faces will be flipped
  64.         -- Note some vertices are connected more than once, you can connect these any way you
  65.         -- want if it works
  66.        
  67.         --Front
  68.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 0, 0 )
  69.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 1, 1 )
  70.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 2, 2 )
  71.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 3, 2 )
  72.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 4, 3 )
  73.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 5, 0 )
  74.         --Top
  75.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 6, 3 )
  76.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 7, 2 )
  77.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 8, 6 )
  78.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 9, 6 )
  79.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 10, 7 )
  80.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 11, 3 )
  81.         --Left
  82.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 12, 4 )
  83.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 13, 0 )
  84.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 14, 3 )
  85.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 15, 3 )
  86.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 16, 7 )
  87.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 17, 4 )
  88.         --Bottom
  89.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 18, 4 )
  90.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 19, 5 )
  91.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 20, 1 )
  92.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 21, 1 )
  93.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 22, 0 )
  94.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 23, 4 )
  95.         --Right
  96.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 24, 1 )
  97.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 25, 5 )
  98.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 26, 6 )
  99.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 27, 6 )
  100.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 28, 2 )
  101.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 29, 1 )
  102.         --Bottom
  103.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 30, 5 )
  104.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 31, 4 )
  105.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 32, 7 )
  106.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 33, 7 )
  107.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 34, 6 )
  108.         mesh.setSubsetIndexValue ( hMesh, 0, 0, 35, 5 )
  109.        
  110.  
  111.         mesh.unlockSubsetVertexBuffer ( hMesh, 0 )
  112.         mesh.unlockSubsetIndexBuffer ( hMesh, 0, 0 )
  113.  
  114.         -- These will update stuff...
  115.         -- updateBoundingVolumes is really necessary, otherwise your geometry will spaz out
  116.         -- and be picky about showing itself
  117.         mesh.computeSubsetVertexNormals ( hMesh, 0, 0 )
  118.         mesh.computeSubsetVertexTangents ( hMesh, 0 )
  119.         mesh.updateBoundingVolumes ( hMesh )
  120.  
  121.         log.message ( "Mesh name: " .. shape.getMeshName ( hObject ) )
  122.         log.message ( "Subset Count: " .. mesh.getSubsetCount ( hMesh ) )
  123.         log.message ( "Vertex Count: " .. mesh.getSubsetVertexCount ( hMesh, 0 ) )
  124.         log.message ( "Index count: " .. mesh.getSubsetIndexCount ( hMesh, 0, 0 ) )
  125.        
  126.  
  127.         -- Set the material
  128.         shape.setMeshMaterial ( hObject, "DefaultChecker" )
  129.  
  130.         -- Center the quad at the passed coordinates
  131.         object.setTranslation ( hObject, x, y, z, object.kGlobalSpace )
  132.        
  133.         hObject = scene.getTaggedObject ( hScene, "Box01" )
  134.         hMesh = shape.getMesh ( hObject )
  135.  
  136.  
  137.     end
  138.    
  139. --------------------------------------------------------------------------------
  140. end
  141. --------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement