Section Bogues Dreamotion3D

Généralités sur la programmation 3D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Texture transparente créée à la volée

Message 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 ?
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.
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 »

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...
Force et sagesse...
Anonyme

Message par Anonyme »

NX_CreateStaticElement fonctionne qu'avec des B3D ?
avec un .x j'ai un invalid acess memory.

@++
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 »

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...
Force et sagesse...
Anonyme

Message 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()

@++
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 »

OK, je test cela en rentrant ce soir ...
A savoir que cela ne fonctionne pas avec les modele animé...
Force et sagesse...
Anonyme

Message 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é :(
Anonyme

Message par Anonyme »

Nouveau Bug :D

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
Anonyme

Message 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.
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 »

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
Force et sagesse...
Anonyme

Message par Anonyme »

c'est moi qui te remercie , je viens de prouvé qu'un homme n'a pas besoin de 8H de sommeil :D

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é :D
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 »

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()
Force et sagesse...
Anonyme

Message 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 :D
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 »

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
Force et sagesse...
Anonyme

Message par Anonyme »

je parle de raycastanyshape() , bouge un objet, puis essaye de le "raycasté" :D

DM_EntityYaw(*camera)
DM_EntityPitch(*camera)

les commandes sont inversée Yaw renvois le Pitch et vice versa.

@++
Répondre