Et c'est un bug ? quelle est la différence entre une texture chargée et une texture créée manuellement dans le code ?tmyke a écrit :Pour les texture transparentes, c'est un sujet complexe, sur lequel je bute
d'ailleurs encore sous certains aspect. Dans ton cas déjà, il faut bien penser
que tu va appliquer ta texture créée sur le stage n°1 de ton cube, pour
conserver sur le stage 0 tets couleurs. Il faut donc d'abord signifier que
ton cube sera avec deux canaux de textures, soit ecrire au début: DM_EntityFormat(2)
En suite, si tu veux appliquer ta texture correctement, il faut aussi passer les
coordonnées de textures sur le canal 1 en plus du 0, donc ecrire:
DM_VertexTexCoords(*entity, i, 0, u, v) : DM_VertexTexCoords(*entity, i, 1, u, v)
En suite, dernière étape, grace l'init de certains état, il faut spécifier la transparence
de la texture du stage1:
DM_BrushAddTextureStage(*brush, 1, #D3DTSS_COLOROP, #D3DTOP_BLENDTEXTUREALPHA )
DM_BrushRestoreTextureStage(*brush, 1, #D3DTSS_COLOROP, #D3DTOP_MODULATE )
Mais attention. Cette methode ne fonctionne pas avec toutes les textures, par exemple avec la texture que tu créé en début de programme, cela ne semble pas fonctionner.
Section Bogues Dreamotion3D
Texture transparente créée à la volée
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
la différence est que la texture créée dans le code avait un format figé, non adapté
a la transparence. Pour remédier au problème j'ai mis a dispo deux instruction qui
permettent désormais d'adapter les texture crées au besoin
de l'utilisateur: DM_TextureFormat() et DM_TextureUsage()
Par defaut, au lancement du moteur les valeurs sont:
usage = D3DUSAGE_RENDERTARGET
format= D3DFMT_A8R8G8B8
Les deux instruction vont permettre a l'utilisateur de choisir n'importe quel commutateur
en fonction de ces besoins.
PS: instruction dispo dans la prochaine mise a jour demain je pense, sinon vendredi...
a la transparence. Pour remédier au problème j'ai mis a dispo deux instruction qui
permettent désormais d'adapter les texture crées au besoin
de l'utilisateur: DM_TextureFormat() et DM_TextureUsage()
Par defaut, au lancement du moteur les valeurs sont:
usage = D3DUSAGE_RENDERTARGET
format= D3DFMT_A8R8G8B8
Les deux instruction vont permettre a l'utilisateur de choisir n'importe quel commutateur
en fonction de ces besoins.
PS: instruction dispo dans la prochaine mise a jour demain je pense, sinon vendredi...
Force et sagesse...
Nouveau Bug 
j'ai voulu loader une texture dynamiquement sur un cube déjà créer
avec DM_LoadTexture() je lui passe en paramètres un chemin complet d'une image et sa plante, tandis que si je prend une texture dans le dossier que j'ai defini ( SetCurrentDirectory("medias/") ) , cela fonctionne
voici une soluce qui rend le partage délicats des médias a mon gout ^^:

j'ai voulu loader une texture dynamiquement sur un cube déjà créer
avec DM_LoadTexture() je lui passe en paramètres un chemin complet d'une image et sa plante, tandis que si je prend une texture dans le dossier que j'ai defini ( SetCurrentDirectory("medias/") ) , cela fonctionne
Code : Tout sélectionner
TEXTURE.s = OpenFileRequester("Choisir une texture","","Image|*.bmp;*.TGA;*.PNG;*.JPG",0)
If TEXTURE<>""
*bb.CBrush = DM_CreateBrush("Curent")
DM_BrushAmbient(*bb, 255,255,255,255)
DM_BrushDiffuse(*bb, 255,255,255,255)
; -------------------------------
; une texture
; -------------------------------
*texture.CTexture = DM_GetTexture(*bb, 0)
DM_LoadTexture(*texture,TEXTURE) ;-ERROR :/
DM_BrushAddRender(*bb, #D3DRS_CULLMODE, #D3DCULL_NONE)
DM_BrushRestoreRender(*bb, #D3DRS_CULLMODE, #D3DCULL_CCW)
; affecte la brush créee sur la surface 0
DM_PaintEntity(OBJ, *bb, 0)
EndIf
EndIf
Else
Code : Tout sélectionner
If TEXTURE<>""
SetCurrentDirectory(GetPathPart(TEXTURE))
*bb.CBrush = DM_CreateBrush("Curent")
DM_BrushAmbient(*bb, 255,255,255,255)
DM_BrushDiffuse(*bb, 255,255,255,255)
; -------------------------------
; une texture
; -------------------------------
*texture.CTexture = DM_GetTexture(*bb, 0)
DM_LoadTexture(*texture,GetFilePart(TEXTURE))
DM_BrushAddRender(*bb, #D3DRS_CULLMODE, #D3DCULL_NONE)
DM_BrushRestoreRender(*bb, #D3DRS_CULLMODE, #D3DCULL_CCW)
; affecte la brush créee sur la surface 0
DM_PaintEntity(OBJ, *bb, 0)
EndIf
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
Poiur la couleur LinePoint, le bug est corrigé, et donc cela marchera dans la prochaine mise
a jour qu moteur (vendredi si tout va bien)
Pour le chargement de la texture par un filerequester, en fait, j'ai remarqué que cela plantait
quand le chemin était trop long ... très bizarre. Si je vais cherché une texture
dans un rep qui produit un chemin complet n'est pas trop long, cela fonctionne.
Par contre si le chemin est trop long, ça plante éffectivement.
J'ai regardé vite fait, mais la je plante dessus. Je le note dans les bug a regler et
je cherche une solution
Merci pour avoir levé les deux problème Cpl.Bator
a jour qu moteur (vendredi si tout va bien)
Pour le chargement de la texture par un filerequester, en fait, j'ai remarqué que cela plantait
quand le chemin était trop long ... très bizarre. Si je vais cherché une texture
dans un rep qui produit un chemin complet n'est pas trop long, cela fonctionne.
Par contre si le chemin est trop long, ça plante éffectivement.
J'ai regardé vite fait, mais la je plante dessus. Je le note dans les bug a regler et
je cherche une solution
Merci pour avoir levé les deux problème Cpl.Bator
Force et sagesse...
c'est moi qui te remercie , je viens de prouvé qu'un homme n'a pas besoin de 8H de sommeil 
Autre chose, je voulais pouvoir selectionner un mesh avec RaycastAnyShape() ce qui est ok, mon mesh est un StaticElement, j'arrive à le déplacer via les flêches du clavier, mais le RaycastAnyshape ne fonctionne que sa position d'origine, est ce normale? dois-je mettre à jour la matrice de l'objet déplacer ?
je met au propre et je poste ici.
@++
EDIT : J'ai trouvé

Autre chose, je voulais pouvoir selectionner un mesh avec RaycastAnyShape() ce qui est ok, mon mesh est un StaticElement, j'arrive à le déplacer via les flêches du clavier, mais le RaycastAnyshape ne fonctionne que sa position d'origine, est ce normale? dois-je mettre à jour la matrice de l'objet déplacer ?
je met au propre et je poste ici.
@++
EDIT : J'ai trouvé

-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
Heu, chez moi cela fonctionne bien ...
genre code
genre code
Code : Tout sélectionner
If MouseButton(#PB_MouseButton_Right)
*meshp = DM_CameraPick(*camera, MouseX(), MouseY())
If *meshp<> Null
... action
EndIf
EndIf
Force et sagesse...