LightMapping ( UV to XYZ )

Généralités sur la programmation 3D
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Cpl.Bator a écrit :- la routine de collision (avec la constante #CONE_PRIMITIVE ) avec le ray ( de n3xtd ) déconne. il me fait des trous.
Bon j'ai fixé le bug apparement. Cela sera dispo dans le prochain update.
Force et sagesse...
Anonyme

Message par Anonyme »

je cafouille avec un mesh fait de toute pièce ( un triangle )

j'ai un IAM quand j'affecte l'uv :
U_.d = (TextureTriangle\X1 / *Texture\Texture_Size) + Upas
V_.d = (TextureTriangle\Y1 / *Texture\Texture_Size) + Vpas
iTexCoordMeshBuffer(*bb\node_parent, U_, V_,*bb\vertice_num[0],1)
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Je regarde cela ce soir et je te tiens au courant .
Force et sagesse...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Bon, en fait le soucis viens de l'emploi de la fonction 'iTexCoordMeshBuffer()'

Le premier paramètre n'est pas le mesh, mais le meshbuffer.

Tu aurais du plutôt ecrire

Code : Tout sélectionner

iTexCoordMeshBuffer(iMeshGeometry(*bb\node_parent), U_, V_,*bb\vertice_num[0],1)

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()
[/code]
Force et sagesse...
Anonyme

Message par Anonyme »

je viens de m'apercevoir qu'un cube par exemple a des vertex "commune" pour plusieurs face...

Comment faire avec un mesh plus compliqué qu'un cube ? le recréer de toutes pièces ? :?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Simplifier le cube est facile. Par contre, le soucis c'est que les mesh que tu va loader dans l'avenir auront aussi parfois ce genre de soucis.
Sous DirectX, il existe une fonctions qui simplifie les mesh justement, en suppriment les vertices redondants.
Je ne suis pas sûr que cela existe sous OGL.
Force et sagesse...
Anonyme

Message par Anonyme »

je fait une fct° pb , en moins de 20 lignes c'est reglé.

- Je lis tout les vertices (XYZ UVW)
- Je créer d'autres vertices à des index différents en me basant sur ma lecture d'avant.

- Peut t'on exporté des mesh sous irrlicht en B3D ou autre format ?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Cpl.Bator a écrit :- Peut t'on exporté des mesh sous irrlicht en B3D ou autre format ?
Avec N3xtd, non pour le moment.

Pour ce qui est d'Irrlicht, je ne sais plus :?

Je regarde cela, et réponse demain ;)
Force et sagesse...
Anonyme

Message par Anonyme »

Ok , c'est cool.
Ca m'évitera de fabriqué un modèle de fichier pour la sauvegarde :D

Sinon , je passe du triangle au mesh plus complexe :

Image

Comme on voit sur l'image , j'arrive à stocké la texture de toute les faces sur le même fichier. pas facile de faire l'économe en pixel...

Pour les Mesh avec plus de 1000 faces va falloir une lightmap de 4096x4096 au moins :?

Si quelqu'un à un algorithme qui me permet de ranger des triangles quelconque de facon optimisé sur une surface 2D, qui me le fasse savoir ^^
Anonyme

Message par Anonyme »

une dernière avant d'aller au dodo ^^
avec une lumière bleue , un blur & noise sur la lightmap ! :D

Image
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Envisages tu de faire des lightmaps avec plusieurs sources de lumière ?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Tres impressionnant en tous les cas, beau travail, ce qui me plais au premier coups d'oeil, c'est le cote progressif
et lissée du lightmap, vraiment bien.

Sinon, desole, il n'y a pas de possibilite d'export de mesh3D sous Irrlicht. donc, si on en veut un, va falloir se le coder. :?
Force et sagesse...
Anonyme

Message par Anonyme »

@Proji1984

Oui :

Image


@Tmyke , va falloir que je code mon propre format donc.
a moins que tu est des infos sur le B3D ?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Anonyme

Message par Anonyme »

A oui C'est Vrai , ta bossé dessus toi ^^
il te reste pas quelque chose d'exploitable ?


un autre shoot mettant en scene 2 lumières une rouge de haute intensité :
une blanche , de faible intensité.
Image
Répondre