Le premier paramètre n'est pas le mesh, mais le meshbuffer.
Voici en guise d'exemple le code de d'application d'une couche de texture lightmapping
que j'ai donné dans mon message plus haut, mais cette fois avec creation en manuel du mesh:
Code : Tout sélectionner
; Include files
IncludePath "includes" : IncludeFile "n3xtD_PB.pbi"
Global *app.l, Quit.l
;----------------------------------------------------------
; open n3xt-D screen
*app = iCreateGraphics3D(800,600)
; << OR >>
;iCreateGraphics3D(800,600, 32, #False, #True, #EDT_DIRECT3D9)
If *app= #Null
End
EndIf
;-----------------------------------
SetCurrentDirectory("media/")
;---------------------------
; define a ManualContruct Mesh
Global *mesh.IMMesh
; creation d'un mesh vide
*mesh=iCreateEmptyMesh()
; addition d'un meshbuffer, type 1 (avec deux coordonnées de textures/vertex)
iAddBufferMesh(*mesh, 1)
; les 3 premiers vertices
v1.l= iAddVertexMesh(*mesh, 0,0,0, $999999, 0,0)
v2.l= iAddVertexMesh(*mesh, 2,2,0, $999999, 0,0)
v3.l= iAddVertexMesh(*mesh, 2,0,0, $999999, 0,0)
; la première face
iAddFaceMesh(*mesh, v1,v2,v3, 0)
; les 3 vertices suivants
v4= iAddVertexMesh(*mesh, 0,2,0, $999999, 0,0)
v5= iAddVertexMesh(*mesh, 2,2,0, $999999, 0,0)
v6= iAddVertexMesh(*mesh, 0,0,0, $999999, 0,0)
; la seconde face
iAddFaceMesh(*mesh, v4,v5,v6, 0)
*meshbuffer.IMeshBuffer = iMeshGeometry(*mesh)
; coordonnée de texture layer 0
iTexCoordMeshBuffer( *meshbuffer, 0, 0, 0)
iTexCoordMeshBuffer( *meshbuffer, 1, 1, 1)
iTexCoordMeshBuffer( *meshbuffer, 0, 1, 2)
iTexCoordMeshBuffer( *meshbuffer, 1, 1, 3)
iTexCoordMeshBuffer( *meshbuffer, 1, 0, 4)
iTexCoordMeshBuffer( *meshbuffer, 0, 1, 5)
; coordonnées de texture layer 1 (les même dans notre cas)
iTexCoord2MeshBuffer( *meshbuffer, 0, 0, 0)
iTexCoord2MeshBuffer( *meshbuffer, 1, 1, 1)
iTexCoord2MeshBuffer( *meshbuffer, 0, 1, 2)
iTexCoord2MeshBuffer( *meshbuffer, 1, 1, 3)
iTexCoord2MeshBuffer( *meshbuffer, 1, 0, 4)
iTexCoord2MeshBuffer( *meshbuffer, 0, 1, 5)
; comme l'exemple précédent, travail sur le material
; en mode #EMT_LIGHTMAP
iMaterialTypeNode(*mesh, #EMT_LIGHTMAP )
;chargement et creation de deux textures
*colormap.ITexture = iLoadTexture( "rockwall.bmp")
*lightmap.ITexture = iLoadTexture( "lightmap.bmp")
; affecte les textures aux bon canaux
iMaterialTextureNode(*mesh, *colormap , 0)
iMaterialTextureNode(*mesh, *lightmap , 1)
; create a camera
Define *cam.ICamera = iCreateCamera( )
iPositionNode(*cam, 0,0,-4)
; ---------------------------------------
; main loop
; ---------------------------------------
Repeat
iTurnNode(*mesh,0,0.4,0)
; if Escape Key, exit
If iGetKeyDown(#KEY_ESCAPE)
Quit=1
EndIf
; ---------------
; Render
; ---------------
iBeginScene(10,10,10)
iDrawScene()
iEndScene()
Until Quit=1
; end
iFreeEngine()