Affichage d'un cube avec direct 3d !!!

Résolu
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 - 26 déc. 2004 à 23:27
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 - 28 déc. 2004 à 20:30
Bonjours, je vous expose mon probléme. J'ai créé un module me permettant d'afficher des formes 3d dans un picture box, jusque la rien de difficile. Quand je reste dans des tailles de triangle compris entre 1 et 5 sa marche mais dans mon projet j'ouvre des fichier 3ds que j'envoie ensuite au module pour les resortir en 3d.
Donc je vous donne les coordonnées des points du cube avec la fonction de dessin qui va avec :

Dim pcube(36) As PVERTEX

Les coordonnées

pcube(0) = creationpoint("24,74129","50,38724","0",&h8404992,"1","0","0")
pcube(1) = creationpoint("-4,758171","50,38724","0",&h8404992,"1","0","0")
pcube(2) = creationpoint("-4,758171","-56,91085","0",&h8404992,"1","0","0")
pcube(3) = creationpoint("-4,758171","-56,91085","0",&h8404992,"1","0","0")
pcube(4) = creationpoint("24,74129","-56,91085","0",&h8404992,"1","0","0")
pcube(5) = creationpoint("24,74129","50,38724","0",&h8404992,"1","0","0")
pcube(6) = creationpoint("24,74129","50,38724","32,4263",&h8404992,"1","0","0")
pcube(7) = creationpoint("24,74129","-56,91085","32,4263",&h8404992,"1","0","0")
pcube(8) = creationpoint("-4,758171","-56,91085","32,4263",&h8404992,"1","0","0")
pcube(9) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(10) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(11) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(12) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(13) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(14) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(15) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(16) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(17) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(18) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(19) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(20) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(21) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(22) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(23) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(24) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(25) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(26) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(27) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(28) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(29) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(30) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(31) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(32) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(33) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(34) = creationpoint("0","0","0",&h0,"0","0","0")
pcube(35) = creationpoint("0","0","0",&h0,"0","0","0")

'La fonction creationpoint

Private Function creationpoint(x As Single, y As Single, z As Single, color As Long, specular As Long, tu As Single, tv As Single) As PVertex
creationpoint.x = x
creationpoint.y = y
creationpoint.z = z
creationpoint.color = color
creationpoint.specular = specular
creationpoint.tu = tu
creationpoint.tv = tv
End Function

J'espere que vous pourrez m'aider ... Je vous remercie.

Et oui je suis trés mauvais en orthographe, donc excusez moi.

11 réponses

AnteManoclis Messages postés 154 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 6 septembre 2007
28 déc. 2004 à 14:22
Wép sans problème, dabrao@gmail.com ou dabrao@hotmail.com, fais ton choix :big)
Tchô ;)
AnteManoclis
3
AnteManoclis Messages postés 154 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 6 septembre 2007
27 déc. 2004 à 01:09
Salut !
As-tu fais attention à l'ordre dans lequel est donné les points qui forment les triangles ? J'ai remarqué que tu les nommes dans le sens trigo, maintenant, tout dépend d'où tu mets ta caméra. Cela dit, je crois que tes deux faces sont orientées dans le même sens, par conséquent, un côté du cube va être tourné vers l'intérieur, et par conséquent, la face ne sera pas visible.

J'espère que cela aura pu résoudre ton problème car je sais à quel point ça peut être chiant, je suis passé par là, si tu as la moindre question, n'hésites pas
Tchô ;)
AnteManoclis
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
27 déc. 2004 à 11:53
Pourrais tu m'expliquer ce que tu veux dire par nommer la caméra, car je comprend le sens trigo mpais pas l'orientation de la caméra. si le probléme et ce que tu dis, je comprend l'erreur mais comment changer la caméra et/ou les deux faces mal orienté, car j'avoue me perdre un peux dans tous ses triangles .... et face .....

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
AnteManoclis Messages postés 154 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 6 septembre 2007
27 déc. 2004 à 12:45
Okky dukky, en fait, dans un soucis d'économie de ressources, directx ne dessine qu'un seul côté d'une face (que le recto en somme). Mainteant, imaginons que la caméra pointe une face. Pour qu'elle soit visible, les points qui la forme doivent être donnés dans le sens horaire.

Un tit exemple s'ra sûr'ment plus parlant:
A:(0,0,0)
B:(0,1,0)
C:(1,0,0)

Si la caméra est positionnée du côté des Z négatifs, alors la face sera visible si les points sont donnés dans l'ordre A,B,C.
En revanche, si la caméra est du côté des Z positifs, alors la face sera visible si les points sont donnés dans l'ordre A,C,B.

Le point par lequel tu commences n'a aucune importance, ce qui compte vraiment, c'est le sens dans lequel tu les énumères.

Une petite chose qui peut s'avérer utile (ça c'est du bonus, t'en fais ce que tu veux). Au lieu de gérer une variable x, y et y dans creationpoint et PVertex, je mettrais un D3DVECTOR, ça revient au même et je trouve ça plus pratique (maintenant, c'est mon point de vue et puis c'est tout :big) )

Si tu as la moindre question n'hésites pas
Tchô ;)
AnteManoclis
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
27 déc. 2004 à 13:12
Tout d'abord je te remerci. Ensuite j'ai entendu parlé des D3DVECTOR, je vais me renseigné sur ceux-ci. Enfin l'explication que tu m'as donné m'a fait comprendre les erreurs possible, il faut donc que je vérifie que mes points sont dans le meme sens que la camera ....

Je te remercie encore, et si j'ai besoin d'aide je te bip .... (lol)

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
27 déc. 2004 à 20:51
J'ai une petite question AnteManoclis, j'ai un peu regarder le type D3DVECTOR et j'en conclu que ce type contient juste les coordonnées du points, ou je dois placer le reste, couleur, position texture, ....

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
27 déc. 2004 à 21:34
J'ai vérifier mon code et me suis rendu compte d'une grosse erreur de ma part, je réenvois donc les coordonnées des points du cube. Ensuite j'ai effectué un test sur un code qui fonctionne correctement et je me suis rendu compte que tu avais raison AnteManoclis, une des fasses du cube n'est pas données dans le bon sens ....

Voici donc les nouvelles coordonnées :

pcube(0) = creationpoint("25","50","0",&h8404992,"1","0","0")
pcube(1) = creationpoint("-5","50","0",&h8404992,"1","0","0")
pcube(2) = creationpoint("-5","-57","0",&h8404992,"1","0","0")
pcube(3) = creationpoint("-5","-57","0",&h8404992,"1","0","0")
pcube(4) = creationpoint("25","-57","0",&h8404992,"1","0","0")
pcube(5) = creationpoint("25","50","0",&h8404992,"1","0","0")
pcube(6) = creationpoint("25","50","32",&h8404992,"1","0","0")
pcube(7) = creationpoint("25","-57","32",&h8404992,"1","0","0")
pcube(8) = creationpoint("-5","-57","32",&h8404992,"1","0","0")
pcube(9) = creationpoint("-5","-57","32",&h8404992,"1","0","0")
pcube(10) = creationpoint("-5","50","32",&h8404992,"1","0","0")
pcube(11) = creationpoint("25","50","32",&h8404992,"1","0","0")
pcube(12) = creationpoint("25","-57","32",&h8404992,"1","0","0")
pcube(13) = creationpoint("25","-57","0",&h8404992,"1","0","0")
pcube(14) = creationpoint("-5","-57","0",&h8404992,"1","0","0")
pcube(15) = creationpoint("-5","-57","0",&h8404992,"1","0","0")
pcube(16) = creationpoint("-5","-57","32",&h8404992,"1","0","0")
pcube(17) = creationpoint("25","-57","32",&h8404992,"1","0","0")
pcube(18) = creationpoint("25","50","32",&h8404992,"1","0","0")
pcube(19) = creationpoint("25","50","0",&h8404992,"1","0","0")
pcube(20) = creationpoint("25","-57","0",&h8404992,"1","0","0")
pcube(21) = creationpoint("25","-57","0",&h8404992,"1","0","0")
pcube(22) = creationpoint("25","-57","32",&h8404992,"1","0","0")
pcube(23) = creationpoint("25","50","32",&h8404992,"1","0","0")
pcube(24) = creationpoint("-5","50","32",&h8404992,"1","0","0")
pcube(25) = creationpoint("-5","50","0",&h8404992,"1","0","0")
pcube(26) = creationpoint("25","50","0",&h8404992,"1","0","0")
pcube(27) = creationpoint("25","50","0",&h8404992,"1","0","0")
pcube(28) = creationpoint("25","50","32",&h8404992,"1","0","0")
pcube(29) = creationpoint("-5","50","32",&h8404992,"1","0","0")
pcube(30) = creationpoint("-5","-57","32",&h8404992,"1","0","0")
pcube(31) = creationpoint("-5","-57","0",&h8404992,"1","0","0")
pcube(32) = creationpoint("-5","50","0",&h8404992,"1","0","0")
pcube(33) = creationpoint("-5","50","0",&h8404992,"1","0","0")
pcube(34) = creationpoint("-5","50","32",&h8404992,"1","0","0")
pcube(35) = creationpoint("-5","-57","32",&h8404992,"1","0","0")

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
AnteManoclis Messages postés 154 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 6 septembre 2007
28 déc. 2004 à 00:39
Salut, et ravi que tu aies pu t'en sortir !!!

Pour le D3DVECTOR, bon, c'est juste un type qui regroupe trois réels, rien de bien compliqué. Personnellement, j'utilise énormément les vecteurs pour réaliser des transformations, des animations et des trucs de ce genre, donc pour ce cas c'est plus pratique, maintenant, tout dépend de l'utilisation que tu as :big)

Juste comme ça, voilà ce que ça pourrait donner (j'ai aucun contrat pub pour les D3DVECTOR :big) )

'Fonction CreationPoint:

Private Function creationpoint(position as D3DVECTOR, color As Long, specular As Long, tu As Single, tv As Single) As PVertex
creationpoint.position = position
creationpoint.color = color
creationpoint.specular = specular
creationpoint.tu = tu
creationpoint.tv = tv
End Function

Private Type PVertex
position as D3DVECTOR
color as Long
specular as Long
tu as Single
tv as Single
End Type


Tchô ;)
AnteManoclis
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
28 déc. 2004 à 11:38
Salut je te remerci pour tes réponses qui sont trés précises, effectivement l'affichage est deja mieu, je pense juste qu'il y a un defaut dans la position de la caméra, donc maintenant je dois réglé ce mauvais positionnement ensuite je m'attaquerais au face qui sont pas dans le bon sens, je te remerci beaucoup.

Et oui je suis trés mauvais en orthographe, donc excusez moi.

ciberrique
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
28 déc. 2004 à 13:53
ReSalut, je reviens t'embeter, mais la je ne comprend plus ou sa ne fonctionne pas, j'aimerais savoir si tu peux étudier le code de mon module direct3d ??

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
28 déc. 2004 à 20:30
Merci beaucoup, je t'ai envoyé le module ....

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
Rejoignez-nous