Drehung eines Surfaces zur Kamera

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

TheProgrammer

Betreff: Drehung eines Surfaces zur Kamera

BeitragSo, Okt 30, 2005 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Ich habe folgendes Problem:
Ich möchte für meine particel-effekte
singlesurfaces verwenden, also mehrere "Sprites" in ein
Surface. Die 4 erstellten Vertexpunkte sollen sich jetzt zur
Kamera ausrichten. Hier der Code:

BlitzBasic: [AUSKLAPPEN]

v1 = AddVertex(surf,x#+Cos(winkel#)*1 ,y#-Cos(winkel2#)*1 ,z#+Sin(winkel#)*1 ,0,0)
v2 = AddVertex(surf,x#-Cos(winkel#)*1 ,y#-Cos(winkel2#)*1 ,z#-Sin(winkel#)*1 ,1,0)
v3 = AddVertex(surf,x#+Cos(winkel#)*1 ,y#+Cos(winkel2#)*1 ,z#+Sin(winkel#)*1 ,0,1)
v4 = AddVertex(surf,x#-Cos(winkel#)*1 ,y#+Cos(winkel2#)*1 ,z#-Sin(winkel#)*1 ,1,1)
AddTriangle(surf,v1,v3,v2)
AddTriangle(surf,v2,v3,v4)


winkel# ist der DeltaYaw - Winkel zur cam und
winkel2# ist der DeltaPitch - Winkel zur cam.
"*1" bedeutet, dass der "Sprite" auf 1,1 scaliert ist, also 0.5 wäre dann
nur halb so groß.

Den Yaw-Winkel bekomme ich ja hin.
Die y-Position der Vertex ist auch schon dem Pitch-Winkel angepasst.
Damit diese beiden TriAngles nun aber direkt zur Kamera zeigen,
müssten noch die x- und z-koordinaten dem pitch-winkel angepasst werden.

Ich hoffe, ihr könnt mir da helfen und habt auch alles verstanden!

Mfg
aktuelles Projekt: The last day of human being

Mr.Keks

BeitragSo, Okt 30, 2005 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
das problem kannst du umgehen, indem du das mesh, in das du die partikel erstellst, direkt an die kamera hängst. dann brauchst du nur ein tform, um die position des partikels zu bestimmen.


aber auch deine jetzige methode geht. musst allerdings nen ganzen haufen tforms benutzen.Code: [AUSKLAPPEN]
            TFormVector pa\sx,-pa\sy,0,par_cam,pa\e\mesh
            vx1# = TFormedX#()
            vy1# = TFormedY#()
            vz1# = TFormedZ#()
            TFormVector -pa\sx,-pa\sy,0,par_cam,pa\e\mesh
            vx2# = TFormedX#()
            vy2# = TFormedY#()
            vz2# = TFormedZ#()
            TFormVector pa\sx,pa\sy,0,par_cam,pa\e\mesh
            vx3# = TFormedX#()
            vy3# = TFormedY#()
            vz3# = TFormedZ#()
            TFormVector -pa\sx,pa\sy,0,par_cam,pa\e\mesh
            vx4# = TFormedX#()
            vy4# = TFormedY#()
            vz4# = TFormedZ#()
         
            vert[0] = AddVertex(pa\e\sur,pa\x+vx1#,pa\y+vy1#,pa\z+vz1#,1,1) ; ol
            vert[1] = AddVertex(pa\e\sur,pa\x+vx2#,pa\y+vy2#,pa\z+vz2#,0,1) ; or
            vert[2] = AddVertex(pa\e\sur,pa\x+vx3#,pa\y+vy3#,pa\z+vz3#,1,0) ; ul
            vert[3] = AddVertex(pa\e\sur,pa\x+vx4#,pa\y+vy4#,pa\z+vz4#,0,0) ; ur
MrKeks.net

TheProgrammer

BeitragSo, Okt 30, 2005 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist es schneller, wenn ich den mesh an die camera setze?
Wenn ja, wie sieht das dann genau mit dem TForm aus?
aktuelles Projekt: The last day of human being

Mr.Keks

BeitragSo, Okt 30, 2005 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
du rechnest die koordinate des partikels ins system der kamera (bzw des an die kamera angehängten meshs) um. danach kannst du die größe durch simple addition festlegen...

(ich copynpaste nur aus ae... dadurch vielleicht etwas kriptische typennamen ^^)Code: [AUSKLAPPEN]
      TFormPoint 0,0,0,e\piv,fx_explosion
      x#   = TFormedX()
      y#   = TFormedY()
      z#   = TFormedZ()

      vert[0] = AddVertex(e\sur,x+e\sx,y+e\sy,z,0,0) ; ol
      vert[1] = AddVertex(e\sur,x+e\tx,y+e\ty,z,1,0) ; or
      vert[2] = AddVertex(e\sur,x-e\tx,y-e\ty,z,0,1) ; ul
      vert[3] = AddVertex(e\sur,x-e\sx,y-e\sy,z,1,1) ; ur


p.s.
du kannst da auch ganz einfach rotierte partikel machen. du siehst ja das zeugs da oben...
Code: [AUSKLAPPEN]
   e\sx      = -sx*Cos(rota) - sy*Sin(rota)
   e\sy      = sy*Cos(rota) + -sx*Sin(rota)
   
   e\tx      = sx*Cos(rota) - sy*Sin(rota)
   e\ty      = sy*Cos(rota) + sx*Sin(rota)
MrKeks.net

TheProgrammer

BeitragSo, Okt 30, 2005 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo. Danke! funzt

Kannst du die Rotation vlt. nochma anhand dieses codes
erklären?

BlitzBasic: [AUSKLAPPEN]

TFormVector sx#,-sy#,0,camera,piv
vx1# = TFormedX#()
vy1# = TFormedY#()
vz1# = TFormedZ#()
TFormVector -sx#,-sy#,0,camera,piv
vx2# = TFormedX#()
vy2# = TFormedY#()
vz2# = TFormedZ#()
TFormVector sx#,sy#,0,camera,piv
vx3# = TFormedX#()
vy3# = TFormedY#()
vz3# = TFormedZ#()
TFormVector -sx#,sy#,0,camera,piv
vx4# = TFormedX#()
vy4# = TFormedY#()
vz4# = TFormedZ#()



v1 = AddVertex(surf,x#+vx1#,y#+vy1#,z#+vz1#,1,1)
v2 = AddVertex(surf,x#+vx2#,y#+vy2#,z#+vz2#,0,1)
v3 = AddVertex(surf,x#+vx3#,y#+vy3#,z#+vz3#,1,0)
v4 = AddVertex(surf,x#+vx4#,y#+vy4#,z#+vz4#,0,0)
AddTriangle(surf,v1,v2,v3)
AddTriangle(surf,v2,v4,v3)
aktuelles Projekt: The last day of human being

Mr.Keks

BeitragSo, Okt 30, 2005 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
  e\sx      = -sx*Cos(rota) - sy*Sin(rota)
   e\sy      = sy*Cos(rota) + -sx*Sin(rota)
   
   e\tx      = sx*Cos(rota) - sy*Sin(rota)
   e\ty      = sy*Cos(rota) + sx*Sin(rota)

sx und sy sind die jeweilige ausdehnung. nun wird dieser punkt rotiert.

dein dreieck liegt jetzt zweischen den punkten im koordinatensystem der kamera.
Code: [AUSKLAPPEN]
      vert[0] = AddVertex(e\sur,x+e\sx,y+e\sy,z,0,0) ; ol
      vert[1] = AddVertex(e\sur,x+e\tx,y+e\ty,z,1,0) ; or
      vert[2] = AddVertex(e\sur,x-e\tx,y-e\ty,z,0,1) ; ul
      vert[3] = AddVertex(e\sur,x-e\sx,y-e\sy,z,1,1) ; ur
das heißt, du musst diese punkte bei den tformvectors anstelle von sx,sy angeben. also
tformvector e\sx,e\sy,0,camera,piv
tformvector e\tx,e\ty,0,camera,piv
tformvector -e\tx,-e\ty,0,camera,piv
tformvector -e\sx,-e\sy,0,camera,piv
MrKeks.net

TheProgrammer

BeitragSo, Okt 30, 2005 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank!!! Very Happy

funzt alles.
Ich hoffe, die technik ist jetzt schneller,
als jedes Sprite einzeln..
aktuelles Projekt: The last day of human being

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group