2D GUI in 3D umwandeln und transparenz hinzufügen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

EPS

Betreff: 2D GUI in 3D umwandeln und transparenz hinzufügen

BeitragDi, Okt 12, 2004 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

also bisher hab ich nur mit Blitz2D gearbeitet und kenne mich damit sehr gut aus.

Nun möchte ich meine ersten Schritte in 3D wagen und hab mir gedacht meinen 2D GUI mit einem zusätzlichen Feature auszustatten, nämlich der Möglichkeit einzelne Fenster beliebig transparent darzustellen.

Eigentlich sollte das in 3D ja kein Problem sein.

Als erste Info mal vorweg: Meine Fenster (und auch deren Inhalt) sind als Image vorhanden, also so als ob ich ein Bild mit Loadimage geladen hätte.

Also möchte ich eigentlich nix weiter wie dieses Bild transparent darstellen.

Ich hatte mir gedacht das Bild als Textur auf einen Sprite zu machen und diesen dann transparent zu machen, aber irgendwie funktioniert das nicht so ganz wie ich mir das vorstelle.

Leider bin ich halt in 3D ein absoluter Neuling, deswegen poste ich auch hier hinein. Kann mir jemand vielleicht sagen wie man sowas am einfachsten hinbekommt?

Vielen Dank schonmal

dimaster

BeitragDi, Okt 12, 2004 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

sprite = loadsprite("fenster.bmp",2(3))

du must das nicht mit createsprite machen !
lads als sprite rein und dann soltes gehen!

(das 2 und 3 ist für transparent)

Mfg dimaster

EPS

BeitragDi, Okt 12, 2004 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ach ja wenns doch so einfach wäre...

ich erstelle die Bilder aber erst durch mein Programm. Ich schrieb: "so als ob ich ein Bild mit Loadimage geladen hätte. "

ich wollte damit zum Ausdruck bringen das ich schon ein fertiges Bild im Speicher habe. War wohl schlecht gewählt der Ausdruck. Naja.

Ausserdem hab ich schon rausgefunden wie ich ein Sprite erstelle oder lade - ganz so schusselig bin ich dann doch nicht, ich muß es wohl genauer beschreiben:

Also, Problem Nr 1:
Wie mache ich es das der Sprite exakt so groß ist wie mein vorheriges Bild, oder anders ausgedrückt, mein Bild soll durch den Sprite nicht verzerrt werden o.ä. (Muß es überhaupt ein Sprite sein???)

Problem Nr 2:
Was muß ich tun damit das ganze auf dem Bildschirm auch sichtbar wird ohne verzerrt zu sein?

Problem Nr 3:
Wie erledige ich das ganze mit dem kleinsten Aufwand - also ohne mein ganzes Programm nochmal neu schreiben zu müssen?

Danke

dimaster

BeitragDi, Okt 12, 2004 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde die erzeugten bilder abspeichern und dann laden!dann machst du:
Code: [AUSKLAPPEN]

sprite = loadsprite("sprite.bmp")
while not keyhit(1)
cls
;nehmen wir an das das bil 32*32 ist dann so
scalesprite sprite,-32,-32
;dann positionnieren und schon gehts



hoffe du weisst wie ichs meine


gruss dimaster

meld dich sonst nochmal

EPS

BeitragDi, Okt 12, 2004 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für deine Mühe, aber das funktioniert so nicht...

das Programm ist ein GUI. Hier werden Buttons betätigt, Scrollbars bewegt und Eingaben vorgenommen. Alles Dinge bei denen sich die Bilder verändern und von meinem System neu erzeugt, bzw. geändert werden. Ich kann nicht ständig die Bilder speichern und laden.

sami

BeitragDi, Okt 12, 2004 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm vielleicht wird das bild auch geupdatet sonst wirds schwer mit input, nich...? wär auch bissi lahm bei jedem ändern neu speichern/laden.

ich würds als texture aufn sprite draufpappen. du musst halt noch ein paar sachen umstellen wie maus etc. du kannst auch mal in FAQ schauen da is ne formel von DC wie man 3d auf 2d umrechnet.

dimaster

BeitragDi, Okt 12, 2004 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ja dann würd ichs auch so machen!

gruss dimaster

EPS

BeitragDi, Okt 12, 2004 23:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mit der Anleitung von dc komm ich schon ein gutes Stück weiter.

Ich hab jetzt den Sprite in der richtigen Größe und auch mein Bild als Textur drauf. Transparenz klappt auch, aber:

Eines bereitet mir aber immer noch Kopfzerbrechen.

Wenn ich das Bild als Textur über den Sprite lege, dann hat das Bild nicht mehr die originale Größe, es wird verzerrt.

Also der Sprite ist wie gesagt schon richtig - das kann ich sehen - er hat die korrekte Größe, aber wie bekomme ich die Textur, also mein Bild, jetzt 1:1 da drauf, so das es weder verzerrt noch gestreckt oder so ist?

dimaster

BeitragDi, Okt 12, 2004 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

;bin mir nicht sicher aber wenn das sprite 32*32 ist solltest dus so machen können
scaletexture tex ,32,32

bin mir aber nicht sicher.versuchs doch mal sonst meld dich wieder

EPS

BeitragMi, Okt 13, 2004 0:04
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, das funktioniert nicht, das ist wie ne Prozentangabe, dann skaliert er mir die Textur bis (fast) ins unendliche Wink

hab grad mal nachgelesen, wenn die Textur nicht exakt 1,2,4,8, usw. Pixel groß ist, dann wird automatisch skaliert.

Das ist aber blöd, weil dann meine Bilder verzerrt werden. Ich kann den Benutzer des GUI ja nicht zwingen seine Fenster in einem bestimmten Maß anzufertigen. Ganz zu schweigen davon das es selbst bei diesen Größen wie weichgezeichnet aussieht.

gibt's noch was anderes als Sprites um das hinzubekommen oder ne andere Lösung für das Problem?
 

Dreamora

BeitragMi, Okt 13, 2004 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt keine weiteren Möglichkeiten. Texturen müssen 2er Potenz haben.

Sagte ja niemand, dass du das Menü schon als "Bildschirmgrösse" speichern musst, oder? Smile

Kannst es ja als 512x512 oder 1024x1024 speichern, dadurch kannst du es danach auch für jede beliebige Auflösung verwenden, da das mit einem 3D Objekt für menüs garkein problem mehr ist Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

dimaster

BeitragMi, Okt 13, 2004 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
du köntest natürlich n würfel mit createcone erstellen !dann
passt sichs einer seite an dann kannst dus so skalieren wie dus brauchst
!wenn du die lösung besser findest dann probiers doch mal so.

gruss dimaster

EPS

BeitragMi, Okt 13, 2004 1:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Tja, dann geht das wohl nicht wie ich es mir vorstelle.

Schade und ich dachte mit Blitz3D hätte sich das Thema Transparenz endlich erledigt. War wohl nix.

@Dreamora...diese Aussage versteh ich leider nicht.
 

Dreamora

BeitragMi, Okt 13, 2004 1:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachdem was du schreibst, gehe ich davon aus, dass du das gesammte Menü als 1 Bild gemacht hast.
Dieses hat jetzt irgend eine Bildschirmauflösung ( 800x600 oder 1024x768 ).


Sollte dem nicht so sein, geht es auch viel einfacher:
Erzeuge für jedes Fenster ein eigenes Quad / Sprite und erzeuge dafür eine Textur welche die benötigten Abmessungen ( 2-erPotenz, ,Quadratisch ) hat um die Fenstergrafik darin zu beherrbergen.

Danach kannst du über

setbuffer TextureBuffer( fenstertexture )
drawimage fenstergrafik, 0, 0
setbuffer backbuffer()

die Fenstergrafik einfach auf die Textur zeichnen.
über
entityalpha fensterentity, alphawert

kannst du danach das alpha wie gewünscht anpassen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

EPS

BeitragMi, Okt 13, 2004 2:15
Antworten mit Zitat
Benutzer-Profile anzeigen
@Dreamora...

also verstanden hast du es richtig und eigentlich mache ich es ja auch so wie in deinem Beispiel.

Wie gesagt entsteht dabei nur der Effekt das auch bei passender Größe meines Bildes (Faktor 2) das ganze wie Weichgezeichnet aussieht. Das liegt wohl daran, das BB letztenendes das ganze halt als Textur nimmt und Rendert. Was ja auch richtig so ist - nur halt für meine Zwecke unbrauchbar. Wer möchte schon gern verschwommene Fenster.

Trotzdem Danke
 

Dreamora

BeitragMi, Okt 13, 2004 3:16
Antworten mit Zitat
Benutzer-Profile anzeigen
dann musst du das Quad von Hand erzeugen und die UV Koordinaten der Vertices so machen, dass nach dem DrawImage auf die Textur effektiv nur das gezeichnete Bild genommen wird und nicht über LoadTexture arbeiten.

Dann ist das kein Problem.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

jungle

BeitragMi, Okt 13, 2004 10:17
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

evtl. hilft dir das weiter ?
http://www.blitzcoder.com/cgi-...omments=no
falls nicht.... cheers Very Happy
jGL
In der Realität ist die Wirklichkeit ganz anders.

| P3 550Mhz | P90Mhz | AMD 1Ghz | XP 2600@3200Mhz l P2 400Mhz | Dual XP 2000Mhz |
 

walski

Ehemaliger Admin

BeitragMi, Okt 13, 2004 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum das Rad neu erfinden?

http://www.blitzbasic.com/code...p?code=456

Damit sollte sich dein Problem schneller erledigt haben, als du gucken kannst. Ich hab das bisher ein paar mal benutzt und muss sagen:

Toll!

Du brauchst an deinem Code einfach nur die Image-Befehle durch ein paar andere ersetzen und schon geht alles GENAU wie vorher, nur eben mit 3D und damit auch mit Transparenz.

walski
buh!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group