[SigleSurface] Ein paar probleme

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

ToeB

Betreff: [SigleSurface] Ein paar probleme

BeitragFr, Aug 08, 2008 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab nochmal meine SingleSurface Engine überarbeitet (Es klappt jetzt wunderbar !). Ich habe 30ms-Update eingebaut, Dass die Particle nur angezeigt werden wenn sie vor der camera sind usw.... Wie kann ich jetzt die einzelnen Partciel immer wie ein Sprite zur camera Drehen ? Ich glaub hectic hatte mal was mit TformVector oder so gesagt, aber da blick ich net durch... Wie macht man sowas ?

Außerdem habe ich ein problem, das die anzahl der Particle nicht immer korect ist (AK_PAT)... Woran liegt das ?

Ich hab gerade versucht, noch eine UV-Koordinate einzubauen, damit man verschiednen Texturen aus einer großen auswählen kann... Aber da versagt auf einmal die Function... Bei der Function GetUV : Wenn ich eingebe "GetUV(PAT_MAIN,0,0,64,64)" dann funzt alles... Wenn ich aber eingebe : "GetUV(PAT_MAIN,uv1,uv2,64,64" (Wobei uv1 = 0 und uv2 = 0) dann exestiert auf einmal die Texture net....

Am besten geb ich euch erstmal den code :
Code: [AUSKLAPPEN]
Graphics3D 800,600,16,1
SetBuffer BackBuffer()


Global CAM = CreateCamera()

Global u1#,u2#,v1#,v2#
Global R,G,B

Global M = CreateMesh(),SU = CreateSurface(M)
EntityFX M,18


Const MAX_PAT = 10000
Global AK_PAT = 0,AK_REN = 0,AK_UPDATE
Global AK_MS = MilliSecs()

Global PAT_MAIN = LoadTexture("FS.png",2)
EntityTexture M,PAT_MAIN


Dim PAT#(MAX_PAT,13)

Global Timer = CreateTimer(75)


CameraClsColor CAM,64,64,64

Repeat
   MS=MilliSecs():FPSz=FPSz+1
     If MS>FPSt Then FPSt=MS+999:FPS=FPSz:FPSz=0
   If KeyDown(57) Then
      For i = 1 To 10
         TEX = Rand(0,1)
         If TEX = 0 uv_u = 0:uv_v = 0
         If TEX = 1 uv_u = 64:uv_v = 0         
         CreatePAT(uv_u,uv_v,0,0,5,Rnd(-0.100,0.100),Rnd(-0.100,0.100),Rnd(-0.100,0.100),Rnd(0.1,1.0),Rnd(0.25,1.0),255,255,200,Rand(500,1000))
      Next
   EndIf
   TurnEntity CAM,+MouseYSpeed()/3,0,0,0
   TurnEntity CAM,0,-MouseXSpeed()/3,0,1
   If KeyDown(17) Then MoveEntity(CAM,0,0,0.1)
   MoveMouse 400,300
   UpdatePAT()
   RenderWorld()
   Text 1,1,"FPS: "+FPS+"  PARTICLES ALL: "+AK_PAT+"  PARTCILES RENDERED: "+AK_REN
   Flip
Until KeyHit(1)
End

Function AddRect(xx#,yy#,zz#,sc#,a#=1)
   
End Function

Function CreatePat(uv_v#,uv_u#,xx#,yy#,zz#,sx#,sy#,sz#,SC#,a#,Rc,Gc,Bc,grenz=-1)
   If AK_PAT < MAX_PAT
      If grenz = -1 grenz = 100+Rand(-10,10)
      Local RGB = 1*$1000000+Rc*$10000+Gc*$100+Bc
      GetUV(FS,64,0,64,64)
      PAT(AK_PAT,0 ) = 1   
      PAT(AK_PAT,1 ) = xx
      PAT(AK_PAT,2 ) = yy
      PAT(AK_PAT,3 ) = zz
      PAT(AK_PAT,4 ) = sx
      PAT(AK_PAT,5 ) = sy
      PAT(AK_PAT,6 ) = sz
      PAT(AK_PAT,7 ) = RGB
      PAT(AK_PAT,8 ) = 0
      PAT(AK_PAT,9 ) = grenz
      PAT(AK_PAT,10) = SC
      PAT(AK_PAT,11) = a#
      PAT(AK_PAT,12) = uv_u#
      PAT(AK_PAT,13) = uv_v#
      AK_PAT = AK_PAT + 1 ;|<<<<< wird nicht richtig berechnet
   EndIf
End Function

Function GetUV(Texture,x,y,bw,bh)
   ;If Texture = 0 Return
   Local w# = TextureWidth(Texture)
   Local h# = TextureHeight(Texture)
   Local p1# = (1.0/w#),p2# = (1.0/h#)
   u1# = x*p1
   v1# = y*p2
   u2# = (x+bw)*p1
   v2# = (y+bh)*p2   
End Function


Function UpdatePAT()
   If AK_MS <= MilliSecs() - 30 Then
      AK_UPDATE = 1
      PAT_CLEAR()      
      AK_MS = MilliSecs();30ms Update
   EndIf
   AK_REN = 0
   For i = 0 To AK_PAT
      If PAT(i,0) = 1                  
         xx# = PAT(i,1)
         yy# = PAT(i,2)
         zz# = PAT(i,3)
         RGB = PAT(i,7)
         R = (RGB And $FF0000) / $10000
         G = (RGB And $FF00  ) / $100
         B = (RGB And $FF    )
         SC#= PAT(i,10)
         uv1# = PAT(i,12)  ;|<<<<<< funzt net
         uv2# = PAT(i,13)  ;|<<<<<< funtz auch net
         GetUV(PAT_MAIN,uv1,uv2,64,64)               
         x2# = SC
         y2# = SC
         z2# = SC
         a# = PAT(i,11)
         If AK_UPDATE = 1
            CameraProject(CAM,xx,yy,zz)
            If RectsOverlap(ProjectedX()-50,ProjectedY()-50,100,100,0,0,GraphicsWidth(),GraphicsHeight())
               ve1 = AddVertex(SU,xx-x2,yy+y2,zz+z2) : VertexTexCoords(SU,ve1,u1,v1)
               ve2 = AddVertex(SU,xx+x2,yy+y2,zz+z2) : VertexTexCoords(SU,ve2,u2,v1)
               ve3 = AddVertex(SU,xx-x2,yy-y2,zz+z2) : VertexTexCoords(SU,ve3,u1,v2)
               ve4 = AddVertex(SU,xx+x2,yy-y2,zz+z2) : VertexTexCoords(SU,ve4,u2,v2)
               AddTriangle(SU,ve1,ve2,ve3)
               AddTriangle(SU,ve3,ve2,ve4)
               VertexColor(SU,ve1,R,G,B,a)
               VertexColor(SU,ve2,R,G,B,a)
               VertexColor(SU,ve3,R,G,B,a)
               VertexColor(SU,ve4,R,G,B,a)   
               AK_REN = AK_REN + 1
            EndIf
         EndIf             
         PAT(i,8) = PAT(i,8) + 1
         If PAT(i,8) => PAT(i,9) Then
            For m = 0 To 10
               TEMP = PAT(i,m)
               PAT(i,m) = PAT(AK_PAT,m)
               PAT(AK_PAT,m) = TEMP
            Next
            pat(i,0) = 0                  
            AK_PAT = AK_PAT - 1 ;|<<<<< wird nicht richtig berechnet
         EndIf
      EndIf    
   Next
   For i = 0 To AK_PAT
      If PAT(i,0) = 1
         For m = 1 To 3
            PAT(i,m) = PAT(i,m)+PAT(i,m+3)
         Next
      EndIf
   Next 
   AK_UPDATE = 0
End Function

Function PAT_Clear()
   ClearSurface(SU)   
End Function 


Und hier noch das PAT_MAIN-Image für die dies Testen wollen...
user posted image

Ich hoffe ihr verstht mich und habt eine Lösung Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Aug 08, 2008 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Zur ersten Sache:
Die einfachste Möglichkeit ist es, das Sprite-Mesh an die Camera zu hängen (EDIT: EntityParent) und dann die globalen Koordinaten der Sprites mit TFormPoint(x, y, z, 0, Mesh) in lokale umwandeln. Anhand dieser lokalen Koordinaten kannst du auch ganz einfach prüfen ob das Sprite im Sichtbereich der Kamera ist, nur so als kleinen Tipp.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
  • Zuletzt bearbeitet von aMul am So, Aug 10, 2008 16:27, insgesamt einmal bearbeitet

ToeB

BeitragFr, Aug 08, 2008 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du EntityParent weil SetParent exestiert nicht Wink

Aber so wie ich das mit CameraProject gemacht habe geht das doch auch oder ??

mfg ToeB


Edit: Ich hab das jetzt nicht so ganz verstanden.... Wie drehe ich die Partciel zur Camera ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

aMul

Sieger des Minimalist Compo 01/13

BeitragSo, Aug 10, 2008 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du das Mesh an die Kamera hängst, dann sind die Partikel automatisch Richtung Kamera gedreht, du kannst sie dann ganz einfach erstellen, als ob du sie nur 2D anzeigen wolltest.
Und ja, ich meinte EntityParent, da habe ich wohl meine eigenen Funktionen mit denen von Blitz verwechselst. Mr. Green
Und wieder ja, es geht auch mit CameraProject, aber wenn man schon die Koordinaten des Partikels relativ zur Kamera hat ist es wesentlich schneller sich diesen Umweg zu sparen.

(Ich empfehle nicht für jede Frage zum selben Thema einen neuen Thread aufzumachen, nur weil nicht ganz so schnell geantwortet wird.)
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Goodjee

BeitragSo, Aug 10, 2008 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
geht ja nich mit sprites wenn ers single surface machen will oO
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

aMul

Sieger des Minimalist Compo 01/13

BeitragSo, Aug 10, 2008 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss dich enttäuschen Goodjee, aber das war allen Beteiligten klar. Wink
Du bist der erste der von Blitz-Sprites redet.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Goodjee

BeitragSo, Aug 10, 2008 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
hoppla...da hast du recht...dennoch ist es doof gleich das sprite mesh an die kamera zu hängen, da sind ja alle sprites drin...wenn ich mich nun drehe drehen sich alle sprites mit und sind noch immer an der gleichen stelle...dass is ja nich das ziel, sondern dass man sie immer von vorne sieht, egal wo sie stehen
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

aMul

Sieger des Minimalist Compo 01/13

BeitragSo, Aug 10, 2008 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
aMul hat Folgendes geschrieben:
(...) und dann die globalen Koordinaten der Sprites mit TFormPoint(x, y, z, 0, Mesh) in lokale umwandeln (...)


EDIT:
Ich weiß übrigens wovon ich rede, ich habe sowas schon mal programmiert. Wink
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

ToeB

BeitragSo, Aug 10, 2008 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay das habe ich jetzt mal versucht :
Code: [AUSKLAPPEN]
TFormPoint(FXPos-IXPos1,FYPos+IYPos1,FZPos+IZPos1,0,CAM):Local IX1#=TFormedX():IY1#=TFormedY():IZ1#=TFormedZ()
   TFormPoint(FXPos+IXPos1,FYPos+IYPos1,FZPos+IZPos1,0,CAM):Local IX2#=TFormedX():IY2#=TFormedY():IZ2#=TFormedZ()
   TFormPoint(FXPos-IXPos1,FYPos-IYPos1,FZPos-IZPos1,0,CAM):Local IX3#=TFormedX():IY3#=TFormedY():IZ3#=TFormedZ()
   TFormPoint(FXPos+IXPos1,FYPos-IYPos1,FZPos-IZPos1,0,CAM):Local IX4#=TFormedX():IY4#=TFormedY():IZ4#=TFormedZ()
   PatV0 = AddVertex(ISurf,IX1,IY1,IZ1,0,0)
   PatV1 = AddVertex(ISurf,IX2,IY2,IZ2,1,0)
   PatV2 = AddVertex(ISurf,IX3,IY3,IZ3,0,1)
   PatV3 = AddVertex(ISurf,IX4,IY4,IZ4,1,1)


Aber das funzt net... Warum ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

aMul

Sieger des Minimalist Compo 01/13

BeitragSo, Aug 10, 2008 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer hat von viermal TForm geredet?
Du musst das nur einmal benutzen und kannst dadurch dann den Mittelpunkt vom Partikel berechnen.
Von diesem Mittelpunkt ausgehen kannst du dann deine Polys erstellen, wie man es auch in 2D machen würde.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

ToeB

BeitragSo, Aug 10, 2008 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber dann dreht sich der Particle ja gar net zur camera !?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

aMul

Sieger des Minimalist Compo 01/13

BeitragSo, Aug 10, 2008 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Denk mal drüber nach, was EntityParent macht.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

ToeB

BeitragSo, Aug 10, 2008 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso habe verstanden !

Danke !!

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

ToeB

BeitragMi, Aug 20, 2008 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay sry für doppelpost, wollte keinen neuen Threat aufmachen und damit einer das hier noch liest Embarassed ^^

Zu meinem Problem(en) :
Arrow Wie kann ich herausfinden ob ein Particle sichtbar ist oder nicht ?
Arrow Wie kann ich prüfen, in welchem abstand die Particle sich zur Camera befinden, damit ich sowas wie ein AutoFade einbauen kann ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Mr.Keks

BeitragMi, Aug 20, 2008 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
1. wenn du mit sichtbar meinst, ob der partikel im kamerasichtfeld ist, dann musst du eigentlich nur etwas mit den koordinaten im kameraraum basteln. wenn z < 0, dann ist der partikel ganz sicher nicht sichtbar. ansonsten ist die breite des sichtfrustums gleich der doppelten tiefe 2*z, und die höhe die breite mal das seitenverhältnis der aktuellen auflösung.

2. den genauen abstand zur kamera kannst du mittels entitydistance oder natürlich mit dem pythargoras berechnen. das ist aber halbwegs rechenintensiv, weshalb alle welt schlicht die z-koordinate der partikel im kameraraum benutzt.
MrKeks.net
 

Dreamora

BeitragMi, Aug 20, 2008 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Dummy Pivot und EntityInView zb oder die 3D coords nach 2D coords projizieren und gucken ob sie im bereich 0,0 - graphicswidth, graphicsheight sind

2. EntityDistance oder dx*dx + dy*dy + dz*dz und dann mit squared distance arbeiten. Vergiss bei deiner implementation einfach net, das du kein alpha zwischen 0 und 0.47 haben solltest soferns über weitere distanz sichtbar ist sonst bekommst du lustige tiefensortierungsprobleme falls nochwas mit alpha da rum ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

ToeB

BeitragMi, Aug 20, 2008 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay Danke erstmal, aber könnt ihr mir das nicht noch ein bisschen genauer erklären ?

Code: [AUSKLAPPEN]
dis# = Sqr((EntityX(camera)-xx)^2+(EntityZ(camera)-zz)^2)


Funtz iwie net richtig....

Und das mit dem sichtfel z*2 etc. hab ich auch net verstanden...

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Aug 20, 2008 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Formel funktioniert nicht, weil du die Y-Koordinate vernachlässigst.

Und wie Mr.Keks schon sagte ist es wesentlich einfacher und um einiges schneller, wenn du mit den Koordinaten relativ zur Kamera(die du mit den TForm rausgefunden hast) arbeitest.
Hier kannst du den Alpha-Wert einfach entsprechend der Z-Koordinate anpassen.
Und ob ein Sprite im Sichtfeld ist findest du heraus, indem du es auf Kollision mit dem Sichtfeld der Kamera prüfst. Dieses ist eine Pyramide, womit man sich die ganzen komplizierten Rechnungen sparen kann, wie der Keks auch schon angedeutet hat.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group