unechte Unsichtbarkeit

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Brotenkopf

Betreff: unechte Unsichtbarkeit

BeitragDi, Mai 15, 2012 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,
Also ich hab mir die Frage gestellt wie man zB einen schönen Verschwimmeffekt über einem Feuer machen könnte. Ich dachte, dass man vielleicht ein Quad über dem Feuer erstellt welcher genau das, was man hinter diesem Quad sehen würde auf eine Textur speichert und diese Textur dann etwas verschwimmen lässt. Ich frage mich jetzt wie man das was hinter dem Quad zu sehen ist so auf die Textur bringt ,dass es von jedem Punkt von welchem man auf den Quad schaut so aussieht als wäre dieser durchsichtig. Ich hoffe ich habe das Problem verständlich formuliert.^^

ZaP

BeitragDi, Mai 15, 2012 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich macht man das mit Shadern, und das geht mit BB nicht. Und mal ehrlich, solche details sind ja weder sonderlich wichtig für die Optik, noch für's Spielgeschehen. Ein solides, animiertes Feuer hinzukriegen ist auch so schon Aufgabe genug, denke ich Wink
Starfare: Worklog, Website (download)

Brotenkopf

BeitragDi, Mai 15, 2012 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Prinzip schon aber ich persönlich achte gerne auf solche Details. Ich denke, dass sowas einem Spiel oder nur einer kleinen 3D Szene viel Leben einhaucht. Außerdem stelle ich mir gerne solche Fragen denn beim lösen lernt man auch viel dazu und ich möchte irgendwann mal ein Spiel auf die Beine stellen und zur zeit sammel ich noch Erfahrungen.

BladeRunner

Moderator

BeitragDi, Mai 15, 2012 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann würde ich dir deutlich empfehlen erst mal die Grundlagen der Spieleprogrammierung zu meistern bevor du dich in Schnickschnack verlierst.
Mach erst mal simple Dinge fertig bevor Du nach den Sternen greifst Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Brotenkopf

BeitragDi, Mai 15, 2012 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hm..ich denke nicht, dass ich ein totaler Anfänger bin. Ich versuche nur immer eine schöne Lösung für die Probleme zu finden, die ich mir stelle. Ich denke auch nicht, dass ich gleich nach den Sternen greife mit meinem "Verschwimmeffekt über einem Feuer"^^. Ich suche nur nach einem Lösungsansatz. Ich erwarte ja keinen fertigen Code/Tutorial etc.

ozzi789

BeitragDi, Mai 15, 2012 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte man eventuell auch mit einem halbtransparenten animierten Sprite erzeugen
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Nova

BeitragDi, Mai 22, 2012 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Problem dabei: Du müsstest wohl die gesamte Szene rendern, das dann etwas verwischen und auf ein Sprite packen. Danach wird das echte Bild gerendert. Doppelter Aufwand für nur ein wenig "schöner".
Es wäre zwar auch möglich, mit 2D-Befehlen den Bildteil zu ändern, an dem das Feuer wäre, aber dann müsste man irgendwie anders herausfinden, ob da nicht vielleicht ein anderes Objekt vor ist. Funktioniert nicht wirklich.
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

SpionAtom

Betreff: Hitzeflimmern

BeitragDi, Mai 22, 2012 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier die Hitzeflimmern-Billigversion

Code: [AUSKLAPPEN]
Graphics 640, 480, 0, 2

   Local img_bg = CreateImage(GraphicsWidth(), GraphicsHeight()), img_output = CreateImage(GraphicsWidth(), GraphicsHeight()), img_hf = CreateImage(200, 200)
   SetBuffer ImageBuffer(img_bg)
   For i = 0 To 999
      Color Rand(255), Rand(255), Rand(255)
      Rect Rand(GraphicsWidth()), Rand(GraphicsHeight()), Rand(50), Rand(50)
      Color Rand(255), Rand(255), Rand(255)
      Oval Rand(GraphicsWidth()), Rand(GraphicsHeight()), Rand(50), Rand(50)
   Next
   
   Repeat

      img_output = Hitzeflimmern(MouseX() - 100, MouseY() - 100, img_bg, img_hf, img_output)
      SetBuffer BackBuffer()
      DrawBlock img_output, 0, 0
      Flip()

   Until KeyDown(1)
   End


Function Hitzeflimmern(x, y, img_background, img_section, img_output, blocksize = 20, iterations = 50)

   Local w = ImageWidth(img_section), h = ImageHeight(img_section)


   SetBuffer ImageBuffer(img_output)
      Cls
      DrawBlock img_background, 0, 0   
      Color 255, 255, 255
      Rect x, y, w, h, 0


   Local s_x, s_y, s_h, s_w
   For i = 1 To iterations

      ;Nimm einen Ausschnitt aus Section
      s_h = Rand(h)
      s_y = y + s_h
      s_w = w / 2 + ((Float(s_h) / h) * Rand(w / 2)) * Sgn(Rand(-1, 1))
      s_x = x + s_w
      ;und blitte diesen Teil nach oben
      CopyRect s_x, s_y, blocksize, blocksize, s_x + Rand(-blocksize / 5, blocksize / 5), s_y - Rand(blocksize / 3, blocksize / 2), ImageBuffer(img_background), ImageBuffer(img_output)
   Next

   Return img_output

End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

ozzi789

BeitragDi, Mai 22, 2012 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
SpionAtom ist einfach cool Cool
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Nova

BeitragDi, Mai 22, 2012 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach, ging es gar nicht um 3D? In 2D ist das ganze natürlich wesentlich einfacher. ^^
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group