Bilder beleuchten
Übersicht

![]() |
IguanBetreff: Bilder beleuchten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute..
Ich mache mir gerade Gedanken darüber, eine eigene Sprite Engine zu basteln.. also so wie Draw3D2... Nun bin ich etwas verwirrt, da ich auch "Sprite Candy" besitze und beide vom Handling her total unterschiedlich sind. Bei Sprite Candy ist es so, dass wenn ich ein Bild (Objekt) erstelle, wird dieses automatisch solange gezeichnet, bis man das Objekt löscht (wie bei den 3D-Befehlen von Blitzbasic). Bei Draw3D2 ist es so, dass das Sprite nur dann gezeichet wird, wenn ich es will, und sonst nicht (wie bei den 2D-Befehlen von Blitzbasic). Irgendwie finde ich die Draw3D2-Variante einfacher vom Handling her... 1. Gibt es Vor-und Nachteile dieser beiden Variante? 2. Wie wird das eigentlich in Draw3D2 gemacht... werden die Objekte immer wieder erstellt und nach "renderworld" wieder gelöscht? Wenn ja, ist das nicht sehr rechenintensiv/ ressourcenverschwendung? (..Ich verstehe den Source Code von Draw3D2 leider nicht...) 3. Ich würde gerne eine Sprite-Engine machen, wie Draw3D2, also, dass die Objekte nur dann sichtbar sind, wenn ich sie explizit zeichne... wie macht man das? so wie oben (2) beschrieben? 4. Hat das einen speziellen Grund, dass beide Engines die Sprites mit "AddVertex" erstellen, anstelle mit "CreateSprite"? 5. Wie realisiere man am besten animierte Sprites? eine Textur zuweisen mit "LoadAnimTexture"? mfg Iguan |
||
- Zuletzt bearbeitet von Iguan am Do, Feb 23, 2012 23:02, insgesamt einmal bearbeitet
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einige Antworten in hoffentlich sinnvoller Reihenfolge:
4. Blitz Sprites werden ab ein paar hundert bis tausend viel zu langsam, da jedes ein eigenes Surface benutzt. Durch das manuelle erstellen von Surfaces, Vertices und Triangles kann man was das angeht sparen (nennt sich: Single-Surface) so dass man nur noch ein Surface pro Textur braucht. Abgesehen davon ist es viel viel flexibler sich die Sprites selber zu erstellen, weil man viel mehr Optionen hat(UV Koordinaten zum Beispiel). 2. Draw3D2 hat keine wirklichen "Objekte", aber es werden in der Tat mit jedem Zeichen-Befehl neue Dreiecke zum rendern erstellt, und diese nach jedem Renderworld mit ClearSurface ![]() Was die Performance davon angeht, siehe hier: https://www.blitzforum.de/foru...hp?t=38221 3. Wenn du dir so eine Bibliothek wie Draw3D2 selber erstellen möchtest solltest du dir CreateSurface ![]() ![]() ![]() 5. Habe von LoadAnimTexture ![]() 1. Wie Sprite Candy intern funktioniert weiß ich nicht. Es kann gut sein, dass auch hier ständig oder oft neu gezeichnet wird. Nur das Interface wäre in dem Fall anders als das von Draw3D2. (Man könnte so ein Interface mit "scheinbar" bleibenden Sprites ohne Probleme auf Draw3D2 aufbauend schreiben.) Ob man diese Funktionalität braucht ist letzten Endes wohl Geschmachsache und hängt vom Projekt ab. Hoffe das beantwortet deine Fragen ein wenig. Frag gerne weiter, oder warte auf die Antworten anderer. ![]() |
||
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 |
![]() |
IguanBetreff: Draw3D2 und SGG Anleitung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für die ausführliche Erklärung!
Ich habe mich nun entschieden, mit Draw3D2 zu arbeiten... ist wirklich eine tolle Sache! Zusätzlich möchte ich DrawSGG verwenden (auch eine tolle Sache!) . Nur leider konnte ich ausser den Beispielcodes keine Anleitung dazu finden.. Gibt es die? ![]() ..Mich würde nähmlich interessieren, wie man die Rückgabewerte der verschiedenen Steuerelemente abfragt, und wie man z.B einen Button ausblenden kann... und allgemeine informationen, was man an den Controls alles einstelllen / abfragen kann... Und wie sieht es mit Draw3D2 aus? Gibt es eine aktuelle anleitung dazu... jene, die unter "Hilfe" zu finden ist, beinhaltet die 4D-Befehle noch nicht.. mfg Iguan |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alle Werte die du mit den SetBefehlSGG erstellst hast, kannst du wieder mit den GetBefehlSGG auslesen
GetArtsSGG%(FDrawHnde%) GetAlignSGG%(FDrawHnde%) GetBoundSGG%(FDrawHnde%) GetListPosSGG%(FDrawHnde%) GetSelectSGG%(FDrawHnde%) GetStringSGG$(FDrawHnde%) GetWidthSGG%(FDrawHnde%) GetXPosSGG%(FDrawHnde%) GetYPosSGG%(FDrawHnde%) GetEntriesSGG%(FDrawHnde%) - - - Für die DrawSGG gibt es keine Dokumentation. Ich habe mit den Beispielcodes versucht alle Möglichkeiten so gut wie es geht abzudecken. - - - Die DrawSGG hat leider kein Visible für einzelne Steuerelemente. Jedoch kann man das schnell einpflegen. Kommentier dazu die Codezeile 1306 bei der DrawSGG.bb aus auf Code: [AUSKLAPPEN] ; If IDrawTN\Arts<1 Then IDrawTN\Arts=1
Dann fügst du noch folgende zwei Befehle hinzu: Code: [AUSKLAPPEN] Function ShowSGG%(FDrawHnde%)
SetArtsSGG(FDrawHnde,+Abs(GetArtsSGG(FDrawHnde))) End Function Function HideSGG%(FDrawHnde%) SetArtsSGG(FDrawHnde,-Abs(GetArtsSGG(FDrawHnde))) End Function Nun kannst du einfach mit ShowSGG(Handle) und HideSGG(Handle) einzelne Steuerelemente sichtbar oder unsichtbar machen. - - - Hoffe geholfen zu haben. ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Iguan |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, du hast mir geholfen, vielen Dank! Funktioniert super mit dem Show/Hide
Wird die SGG eigentlich noch weiterentwickelt? Wenn ja, könnte man ja diese Funktionen gleich mit einbauen. Zudem wären CheckBoxes, TabControls und TableControls noch nützlich ![]() [Edit] Mir ist noch eine Frage in den sinn gekommen: Wie kann man ein Bild leuchten lassen (für Laser, Explosionen etc..) Ich habe die Function IlluImage3D ausprobiert... klappte aber nicht ![]() Und für was sind folgende Funktionen gedacht? DrawNerd3D DrawBzQuad3D DeffBzBend3D DeffBzQuad3D mfg Iguan |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich plane erst einmal nicht, an der SGG weiter zu arbeiten. Außer so Kleinigkeiten die man schnell erledigen kann, und ggf. etwas Support wenn es gefragt ist. Die Funktionen habe ich bereits eingebaut, und werden beim nächsten Release so rausgegeben. ![]() Statt CheckBoxen kannst du SGGBUTTON mit zwei Feldern nehmen. Diese werden im String dann mit einem | als Trenner verwendet. Als Beispiel: "·| ". TabControls sind von der Umsetzung, sie automatisch zu gestalten, etwas schwierig. Dafür wäre eventuell eine weitere Bankebene notwendig. Hatte ich keine Lust drauf. Aber auch hier lässt es sich mit einfachen Mitteln über die SGG realisieren. Da du ja jedes CreateSGG separat zeichnen musst, hast du auch gut die Kontrolle drüber, wie welches gezeichnet werden soll. SGGBUTTON sind dann die Tabs. Bis auf die Darstellung werden TableControls in Spielen meistens nicht benötigt. Dafür habe ich die Stringdarstellung entsprechend überarbeitet. So wie Farben mitten im Text geändert werden können, kann man auch den Abstand vom Anfang des Textes bestimmen. Das geht dann mit <%050>. Die <% Zeichen deklarieren Abstand gefolgt von drei Ziffern für Draw3D2-Einheiten, Abschluss mit >. Also genauso wie man auf färben <#ff0> kann. Siehe dazu Beispiel: DrawSGG #08, Example - Tabed View.bb ILLUIMAGE3D war experimentell, und sollte einfache Beleuchtung schaffen, ohne immer erst eine Bumpmap zu erstellen. Die Ergebnisse waren letztendlich aber sehr schlecht. Ich habe die Funktion dennoch drin gelassen, weil zur aktuellen Zeit einige das unbedingt haben wollten, dass man Texturen mischen kann. So habe ich es drin gelassen. Diese Funktion funktioniert jedoch nur, wenn man in der Funktion DrawImage3D auch die auskommentierten Zeilen raus nimmt, und beim laden der Texturen auch die richtige Flag-Kombi findet. Die kenne ich nun nicht mehr. DrawNerd3D gibt dir mehr Kontrolle beim Einzeichnen der Quads. Du kannst die Eckpunkte und das UV-Mapping separat eingeben. Bei DrawBzQuad3D wird ein Beziér geformter Quadverlauf gezeichnet. Dieser Befehl benötigt zwei weitere Befehle, die nur die Eckpunkte bestimmen. Man hätte es auch in eine Funktion packen können, aber wer hat schon Lust, eine Funktion in einem Strang mit 20 Parametern zu füllen? Siehe dazu Beispiel: Draw3D2 #06, DrawBzQuad3D.bb Code: [AUSKLAPPEN] DeffBzQuad3D(X[0],Y[0], X[1],Y[1], X[2],Y[2], X[3],Y[3])
DeffBzBend3D(X[4],Y[4], X[5],Y[5], X[6],Y[6], X[7],Y[7]) DrawBzQuad3D(ImageHandle,Frame,Depth,Farbe) - [0] bis [3] Positionen der Eckpunkte (im Uhrzeigersinn) - [4] bis [7] Abstände zu den jeweiligen Eckpunkten - ImageHandle = ImageHandle - Frame = Das ImageFrame, dass aufgelöst werden soll - Depth = Die Anzahl Quads pro Verlauf - Farbe = 32-Bit-Farbcode, Erstes Byte Ecke [0], zweites Byte Ecke [1] etc... Dabei gilt, 00 = Schwarz, FF = Weiß, jeder Farbkanal wird in 2 Bits aufgeteilt. Man hat also nur 256 Farbkombis pro Ecke. Das reicht jedoch aus, da der Verlauf innerhalb eines Verlaufes feiner ist. Beispiel für Grün wäre AARRGGBB = 11001100 bin = CC hex, also Farbe=$CCCCCCCC. Oder oben Rot/Voll unten Gelb/Transparent wäre AARRGGBB = 11110000 bin = F0 hex für Rot/Voll, und AARRGGBB = 00111100 bin = 3C hex für Gelb/Transparent. Also $F0F03C3C. Das gleiche nun von Links nach Rechts $F03C3CF0. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
IguanBetreff: Bilder beleuchten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da ich nun stundenlang rumprobiert habe, und es einfach nicht hinkriege, poste ich das mal ins Forum und grabe diesen alten Beitrag aus:
Es geht um das beleuchten von Bildern mit Draw3D2 für Laser und Schüsse. Dabei möchte ich ein Bild laden, bei welchem dünklere Stellen transparenter erscheinen und das ganze Addierend. Mit Addierend meine ich, dass wenn zwei Schüsse sich überlagern, die Schnittfläche heller erscheint. Ein Beispiel dafür ist unten zu finden... Ich habe nun alle möglichen Kombinationen von "Mode" und "Blend" beim Befehl "LoadImage3D" ausprobiert, mit *.bmp-Dateien und *.png-Datein inkl. Alpa Kanal. Auch mit dem Rausnehmen der auskommentierten Zeilen in der Draw3D2-Funktion "Drawimage3D" und das Verwenden der Funktion "IlluImage3D" habe ich den gewünschten Effekt nicht erreicht. Allerdings verstehe ich nicht ganz wie das "FDrawIllu%" Bild aussehen muss, damit man ein Leucht-Effekt hinkriegt. Da habe ich einfach mit verschiedenen Bildern rumprobiert, weiss, blau etc.. Ausserdem habe ich mit BumpImage3D und den Beispielscodes von Draw3D2 rumgespielt. Dort habe ich versucht mit einem weissen Bild als BumpImage das Quellbild zu erleuchten, ober leider brachte das nicht den gewünschten Effekt. Eine Frage am Rande: Wie erstellt man eigentlich solche BumpImages wie das bei dem Quellcode-Beispiel mit dem Auto? Gibt es ein spezielles Programm dafür? Ich habe irgendwo gelesen das der Blauanteil für die Tiefe steht... begreife ich aber nicht ganz.... Wie auch immer... damit ihr versteht welchen Beleuchtungseffekt ich gerne hätte, habe ich unten ein Code gepostet, wie ich sowas mit "normalen" Sprites und B3D-Befehle realisieren würde: Das Bild zum Code: [img] https://www.blitzforum.de/upload/file.php?id=11511 [/img] Der Code: Code: [AUSKLAPPEN] Graphics3D 640, 480, 16, 2 SetBuffer BackBuffer() camera = CreateCamera() sprite = LoadSprite("streuschuss.bmp",1+256) PositionEntity sprite, 0, 0, 5 While Not (KeyHit(1) Or KeyHit(2)) RenderWorld Flip Wend End Wie macht man das mit Draw3D2? Ist das überhaupt möglich? mfg Iguan |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
IlluImage sollte ene Beleuchtung darstellen, die Licht von beispielsweise Links/Oben simuliert. Dann würden drehende Objekte plastisch wirken. Diesen Effekt habe ich automatisch nicht hinbekommen und bin zurück auf die ''richtige'' Art gekehrt. Nämlich die einer Bumpmap. Man hat etwas mehr Arbeit vorher mit doppelten Bildern. Dafür sieht das Ergebnis absolut 3D-Mässig aus, mit korrekter Helleigkeitsverteilung etc. wie man es auch in dem von dir genannten Beispiel mit dem Auto sieht. Zwei Bilder und man hat ein 3D-Auto.
- - - Übereinander gelegte Bilder werden bei der Draw3D2 farblich addiert. Teste mal folgende Zeilen aus, und sehe selbst... Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(58) Local Camera=CreateCamera() CameraClsColor Camera,64,64,64 Include "..\Includes\Draw3D2.bb" DrawInit3D(Camera) Local LoadedImage=LoadImage3D("Iguan_1330023643_Streuschuss.bmp",2,2,0,0) While Not KeyHit(1) If MouseDown(1) Then DrawImage3D(LoadedImage,0,0,0,0,20,0) If MouseDown(2) Then DrawImage3D(LoadedImage,0,0,0,0,20,0) WaitTimer Timer RenderWorld Clear3D() Flip 0 Wend End Sinnvolle Blendmodes hierbei sind (2,2) und (2,5) und (2,1). - - - Übrigens, die OffroaderBump.bmp für das Bumpmap des Autos habe ich mit dem der Draw3D2 beigelegtem Editor, BMC.exe erstellt. Ich habe viel Arbeit investiert, um das Ergebnis der Bilder möglichst perfekt zu machen. Ohne Fehler bei Kreisen und sogar mit leichtem Bitrauschen, so dass Rundungsfehler damit kompensiert werden und anti Aliasing. Die Bilder werden beim speichern auf ein vielfaches gebracht und dann Kachelweise wieder runtergerechnet und anschliessend so gespeichert. Jedoch gebe ich zu, dass die Handhabe des Editors miserabel ist. Es führt kein Weg daran vorbei, dass ich dazu mal ein YouTube Video erstelle. Kennt da jemand ein gutes Screencapture -Programm? |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Iguan |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Hectic: Veilen Dank für deine Antwort!
Irgendwie erscheint ein einzelnes Bild immer so dunkel... jedoch wenn ich beide Maustasten drücke (bei deinem geposteten code), erscheint der Schuss so kräftig wie es gerne hätte (mit Mode=2 und Blend=2)... jedoch alle Schüsse doppelt einzeichnen ist ja wohl nicht das wahre... ![]() Den BMC Editor muss ich in diesem Falle noch ausprobieren... ein Youtube-Video wäre natürlich klasse! Ich verwende für solche sachen CAMSTUDIO... ist freeware und reicht für die meisten Videos vollkommen aus... mfg Iguan |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da du mir eine BMP ohne Alpha Kanal gegeben hast, wird Blitz3D versucht sein, den Alphakanal entsprechend der Farben zu bewerten. Und da dein hellster Punkt eben nur den Wert 196,245,0 hat, was zusammen gerechnet gerade mal 441 von möglichen 768 ergibt, hat deine höhste Deckung auch nur 441/768*100 = 57,42%. Hat also nichts mit der Draw3D2 oder Blitz3D zu tun, sondern mit deinem Bild. Wenn du hier ein kräftigeres Bild haben möchtest, ist es erforderlich dass du dir eine PNG erstellst und dein Alpha separat - beispielsweise mit IrfanView per Auto-Korrektur - auf höchsten Kontrastwert legst. Diesen Alphawert speicherst du dann so mit dem Bild ab, und lädst dein Bild mit den Blendmodes 2,2 und alles ist gut ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group