creation d'une ligne 3D?? ****[RESOLUT]****

Généralités sur la programmation 3D
Anonyme

Message par Anonyme »

Tiens voila le prochain moteur de rendu pour HalfLife 3
Attention 320x240 pixel en résolution :D

C'est que du tripatouillage :D pas d'instruction 3D préfabriqué :D

File:1->3DSoftwareZBuffer.rar
Image
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 »

Bien sympa ton code ;)

mais au depart Fortix voulais juste tracer une ligne 3D et toi tu lui sort le code
complet d'une moteur 3D.
Le jour ou il demandera comment créer une scene 3D tu lui propose quoi ?

:lol: :lol: :lol:
Force et sagesse...
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

oulà, c'est le bordel :?


pour faire simple :D :

au mieu : touts en 3D, c'est à dire: 1er et 2em points xyz, puis liaison entre poin 1 et 2 par un "trait 3D"

sinon : une alternative, c'est à dire une methode autre que la 3D
si: celle ci presente un rendut instantané et dynamique comme sur la 3D et quelques soit l'angle de la camera,


je pense que je peux faire plus simple :lol: , ....si besion s'en fait sentir!
Anonyme

Message par Anonyme »

touts en 3D, c'est à dire: 1er et 2em points xyz, puis liaison entre poin 1 et 2 par un "trait 3D"
Tu n'as pas l'air de comprendre :cry:
Comment veut tu afficher une Profondeur Z sans la projection ?
je vais te codé un exemple de ligne "3D"
Anonyme

Message par Anonyme »

Code : Tout sélectionner

Sw_=1024
Sh_=768

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0 Or InitSprite3D() = 0
  End
EndIf


OpenScreen(Sw_,Sh_,32,"")


Structure VECTOR2
  x.f
  y.f
EndStructure

Structure VECTOR3
  x.f
  y.f
  z.f
EndStructure

Structure SEGMENT3D
  A.VECTOR3
  B.VECTOR3
EndStructure


Structure SEGMENT2D
  A.VECTOR2
  B.VECTOR2
EndStructure



MaLigne3D.SEGMENT3D
; Premier point 3D
MaLigne3D\A\x = -100
MaLigne3D\A\y = 100
MaLigne3D\A\z = -1000
; Le second...
MaLigne3D\B\x = 100
MaLigne3D\B\y = 100
MaLigne3D\B\z = -1000



;Projection de la ligne 3D sur l'ecran...
MaLigne3D_Projetion.SEGMENT2D
Gosub Projection
                 


Repeat
  ExamineKeyboard() : ExamineMouse()
    ClearScreen(0)

; On joue avec la profondeur (Z) de cette ligne ( entre 0 et 200 sur 1 seconde )
      MaLigne3D\A\z = 100 + 100 * Cos(ElapsedMilliseconds()/1000)
      MaLigne3D\B\z = 100 + 100 * Cos(ElapsedMilliseconds()/1000)
      
      Gosub Projection
      Gosub Trace

  FlipBuffers(2) 
Until KeyboardPushed(#PB_Key_Escape)
End 




Projection:
    ; Projection du premier point
    MaLigne3D_Projetion\A\x = (MaLigne3D\A\x * 512)  /  (MaLigne3D\A\z + 150) + Sw_/2
    MaLigne3D_Projetion\A\y = (MaLigne3D\A\y * 512)  /  (MaLigne3D\A\z + 150) + Sh_/2
    ; du second...
    MaLigne3D_Projetion\B\x = (MaLigne3D\B\x * 512)  /  (MaLigne3D\B\z + 150) + Sw_/2
    MaLigne3D_Projetion\B\y = (MaLigne3D\B\y * 512)  /  (MaLigne3D\B\z + 150) + Sh_/2 
Return 

Trace:
  StartDrawing(ScreenOutput())
    LineXY(MaLigne3D_Projetion\A\x,MaLigne3D_Projetion\A\y,MaLigne3D_Projetion\B\x,MaLigne3D_Projetion\B\y,RGB(64,128,255))
  StopDrawing()
Return 
Edit: Après si tu veut appliqué des rotations transformation , caméra etc...
c'est plus complexe , il faut passé par des calculs de matrices
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

c'est vraiement bien fluide,

mais je pense qu'un trait à la suite d'un autre trait mais orienté differement et le tout en rotation sur eux même, sera une histoire différente :lol:

pour information, je viens de mettre au point un veritable Trait 3D xyz
(4 vertices 2 triangles) et c'est très impressionnant de voire une entitée trait longue qui dechire en deux l'univers 3D!!, mais il y a 2 obstacles avant la mise aupoint finale

mais je n'esclut pas ton idée de projection :D
merci pour ton code
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

C 'est bon, :D

je viens de mettre au point un system certe extremement complex mais robuste ce matin même

il sagit donc d'un trait parfait visible sous trois angles xyz,avec en prime la possibillitée de texturé en couleurs dégradé, translucide, ->

possibillitée de mêler une couche openGL,....etc

cela risque de boulverser la programmation 3D avec le basic 3D'ogre de PBV4


reste la mise en forme finale réutilisable pour tous :lol:

en tous cas, un très grand MERCI aux intervenants en particulier à @Cpl.Bator qui s'est dévoué à apprendre une methode précise à "un dûre à cuire" que je suis :lol:

et à *Tmyke qui ma donné la "puce à l'oreille" en plein milieu de ce Topic :lol:


le rendut est spétaculaire :wink:
Répondre