Page 2 sur 3
Texture transparente créée à la volée
Publié : mar. 14/nov./2006 7:25
par comtois
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.
Et c'est un bug ? quelle est la différence entre une texture chargée et une texture créée manuellement dans le code ?
Publié : mar. 14/nov./2006 20:12
par tmyke
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...
Publié : mar. 14/nov./2006 20:31
par Anonyme
NX_CreateStaticElement fonctionne qu'avec des B3D ?
avec un .x j'ai un invalid acess memory.
@++
Publié : mar. 14/nov./2006 21:16
par tmyke
Non, cela fonctonne avec tous les format de mesh supporté par DM3D.
PAr sécurité, re-load les dernière version de DM3D et de PhysX...
Publié : mar. 14/nov./2006 21:47
par Anonyme
cela à été fait avant de posté, j'ai oublié de préciser que c'etait un modele animé, et que cela n'a pas fonctionner avec un simple DM_CreateCube()
@++
Publié : mer. 15/nov./2006 6:08
par tmyke
OK, je test cela en rentrant ce soir ...
A savoir que cela ne fonctionne pas avec les modele animé...
Publié : mer. 15/nov./2006 16:15
par Anonyme
te casse pas la tête, c'est regler, du moins en partie
j'avais 2 fichiers PB , WaterWorld.pb (code de comtois qui fonctionne)
et une copie du meme fichier avec ma modif pour mettre un .x a la place du B3D, et maintenant ca marche , j'ai rien touché

Publié : mer. 15/nov./2006 17:25
par Anonyme
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
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
voici une soluce qui rend le partage délicats des médias a mon gout ^^:
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
Publié : mer. 15/nov./2006 17:26
par Anonyme
DM_LinePoint(*entity.CEntity, cx.f, cy.f, cz.f, r.w, g.w, b.w)
la couleur donnée en paramètre n'est pas bonne, que ce soit un word ou un chiffre allant de 0 a 255.
Publié : mer. 15/nov./2006 19:03
par tmyke
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
Publié : mer. 15/nov./2006 19:11
par Anonyme
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é

Publié : mer. 15/nov./2006 19:54
par tmyke
As tu penser a utiliser pour déplacer tes éléments physiques les instruction de controle
du moteur physique ? genre NX_TranslateEntity() a la place de
DM_TranslateEntity()
Publié : mer. 15/nov./2006 20:08
par Anonyme
oui, d'ailleurs après un déplacement via l'une de ces commandes, impossible de "pické" l'entity sauf en se mettant sur sa position d'origine.
j'arrete les bugs pour aujourd'hui ^^ j'ai pas envie de te décourager

Publié : mer. 15/nov./2006 20:33
par tmyke
Heu, chez moi cela fonctionne bien ...
genre code
Code : Tout sélectionner
If MouseButton(#PB_MouseButton_Right)
*meshp = DM_CameraPick(*camera, MouseX(), MouseY())
If *meshp<> Null
... action
EndIf
EndIf
Publié : mer. 15/nov./2006 20:47
par Anonyme
je parle de raycastanyshape() , bouge un objet, puis essaye de le "raycasté"
DM_EntityYaw(*camera)
DM_EntityPitch(*camera)
les commandes sont inversée Yaw renvois le Pitch et vice versa.
@++