Draw3D Zeichnen Problem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Gast

Betreff: Draw3D Zeichnen Problem

BeitragSa, Jan 19, 2008 13:13
Antworten mit Zitat
Hallo Leute,
ich habe das Problem, dass ich ein IMG in Draw3D in einen Type lade, und es dann in einer Function Zeichnen will.
Ich weis, das dies nicht duíe eleganteste methode ist, aber ich finde keine passende andere Lösung.
Das Problem ist nun, dass das Bild nicht gezeichnet wird.
Draw3D ist geladen, das Image hat ein Handle(144), und Ich Gehe in den Backbuffer, zeichne das Bild und Rendere, Flip ist drinnen und lasse mir Variablen anzeigen.
Was ist hier falsch, an diesem Code: [AUSKLAPPEN]

; Gui.bb
; Images
Graphics3D 1280,800,0,1
SetBuffer BackBuffer()
Global Camera = CreateCamera()
Include "Draw3d.bb"
DrawInit3D(Camera)

Global GUI_l = LoadImage3D("GUI\left.png")
Global GUI_r = LoadImage3D("GUI\righ.png")
Global I
Global Win.Window = Null

CreateWindow("Test",0,0,400,200)

Repeat
   DrawGui
   UpdateWorld()
   RenderWorld()
   Text 0,0,I
   win.Window = Last window
   Text 0,10,Win\IMG
   Flip
   Clear3D
Until KeyDown(1)

; Types
Type Window
   Field T$
   Field X
   Field Y
   Field W
   Field H
   Field IMG
   
   ;Field Button.Button
End Type



Function CreateWindow(T$,X,Y,W,H)
win.Window = New Window
Win\T = T$
Win\X = X
Win\Y = Y
Win\W = W
Win\H = H
Win\IMG = LoadImage3D("GUI\mid.png",2,2,W-8,1)
End Function

Function DrawGUI()
; Windows
I = 0
For Win.Window = Each window
   I = I +1
   ;Titelleiste
   DrawImage3D(Win\IMG,0,0)
Next
End Function


Es gibt keine Fehlermeldung.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 19, 2008 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke das W-8 schonmal ein Problem sein dürfte ''Win\IMG = LoadImage3D("GUI\mid.png",2,2,W-8,1)''. In der Verison 3.0 der Draw3D ist dies der Skallierungsfaktor. In der V.3.1 wird es der Ebenenpivot sein. Eine Skallierung um den Faktor 392 könnte ein Problem sein, wenn das Image nicht besonders klein (so um 0.5 Pixel) ist.

Für eine GUI würde ich im übrigen ganz anders vorgehen. So mit Quads und so, wo auch bereits berechtene Vertexpunkte wiederverwendet werden.^^

edit1: Um die Breite eines Bildes von den Skallierungsfaktor wieder zu Welteinheiten zu transformieren, geht man in deinem Beispiel wie folgt vor:

( W-8.0 ) / BreiteDesImagesInPixel
 

Gast

BeitragSa, Jan 19, 2008 20:36
Antworten mit Zitat
Danke Hectic.
wenn ich die Zeile
Win\IMG = LoadImage3D("GUI\mid.png",2,2,W-8)
in
Win\IMG = LoadImage3D("GUI\mid.png",2,2,(W-8.0)/1)
oder
Win\IMG = LoadImage3D("GUI\mid.png",2,2,10,1)
mache, nützt das nix, weil das bild sowieso die Breite 1 Pixel hat.
die Zehn ist als Platzhalter.
Selbt Modus = 1 (Colormap) nützt nichts.
Ich lade das Bild mal hoch:
https://www.blitzforum.de/upload/file.php?id=2574
hier als Bild:
user posted image

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 19, 2008 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmmmmmmmm, also bevor du hier versucht etwas hinzu biegen, was nur schwer zu handhaben ist, so schaue dir mal DrawQuad3D aus der Version Draw3D V.3.1 mal an. Die Version ist absolute Beta, und ich arbeite auch grad noch an der neuen Version.

http://www.hectic.de/data/Draw3D.V.3.1.Beta.rar

Solltest du auch viel mit nativen Befehlen arbeiten, so gib mir bescheid, dass ich dir die Beta 2 (dieser Version ist noch nicht zusammen gefasst) zukommen lasse, denn grad bei den nativen Befehlen ändert sich so einiges.

Hier eine Betatester-Schnelldoku (V.3.1 Beta 1):

Code: [AUSKLAPPEN]
[Fehler behoben] Meldung ''DrawBank is to small'' kam durch ein Rechenfehler 48mal früher (so nach ~170 Imagehandles) als erwartet.

[Befehl erweitert] Clear3D( MainHandle ) kann nun ein Mainhandle beinhalten, wenn man nur ein Surface löschen will. Praktisch im Zusammenhang im ClearOn3D() und ClearOff3D().

[Neuer Befehl] ClearOff3D( MainHandle ), deaktiviert ein Surface aus der ''allgemeinen Löschliste'', welches per Clear3D() gelöscht werden würde.

[Neuer Befehl] ClearOn3D( MainHandle ), aktiviert ein Surface zur Löschung wieder, welches durch ClearOff3D() aus der Liste deaktiviert wurde.

[Neuer Befehl] CreateImage3D( 2^Size, Mode=2, Blend=2, Pivot=0 ), Erstellt ein neues Bild im Speicher (Bsp: Size=8 ergibt 2^8=256 also eine Größe von 256x256).

[Neuer Befehl] DrawFree3D(), macht die DrawInit3D() -Initialisierung wieder rückgängig. Dabei werden auch alle Bilder wieder aus dem Speicher wieder freigegeben.

[Befehl erweitert] DrawImage3D( Handle, X, Y, Button=0, Angle=0, Scale=1, Frame=0 ), mit Frame kann man weiterführende Frames anzeigen lassen.

[Neuer Befehl] DrawQuad3D( Handle, X1, Y1, X2, Y2, X3, Y3, X4, Y4, Frame ), zeichnet ein Quad aus einem zuvor geladenem Image auf dem Bildschirm.

[Neuer Befehl] GetPixel3D( Handle, X, Y, Mask=$FFFFFFFF ), gibt den (automatisch maskierten und sortierten) Pixelfarbcode zurück.

[Neuer Befehl] GetTexel3D( Handle, Xs, Ys, Xt, Yt, Angle, Scale=1, Mask=$FFFFFFFF ), gibt den Pixelfarbcode abhängig der Bildposition zurück.

[Befehl erweitert] ImageLine3D( Handle, X1, Y1, X2, Y2, Size, Mode=0, Frame=0), mit Frame kann man weiterführende Frames anzeigen lassen.

[Befehl geändert+erweitert] LoadImage3D ( ''File'', Mode=2, Blend=2, Pivot=0 ), Alphakanal nun automatisch setzbar und mit Pivot bestimmt man die Zeichenposition.

[Befehl erweitert] NativeInit3D( Mode=2, Blend=2, Pivot=0 ), gibt nun das Handle zurück und mit Pivot bestimmt man die Zeichenposition zwischen HUD und World.

[Neuer Befehl] OnLockBuffer3D( Handle ), lockt den Buffer für Pixeloperationen (nur bei CreateImage3D notwentig).

[Neuer Befehl] Poly3D( X1, Y1, X2, Y2, X3, Y3 ), zeichnet ein Polygon, bestehend aus einem Dreieck als nativen Befehl ein.

[Neuer Befehl] SetPixel3D( Handle, X, Y, ARGB=0 ), setzt ein Pixel an angegebener Position mit dem ARGB-Farbcode auf ein bestehendes Bild.

[Neuer Befehl] SetTexel3D( Handle, Xs, Ys, Xt, Yt, Angle, Scale=1, ARGB=0 ), setzt ein Pixel abhängig der Bildposition auf ein bestehendes Bild.

[Neuer Befehl] StringWidth3D( ''String'' ), gibt die Stringbreite in Draw3D-Einheiten abhängig ihrer Größe zurück.


In Zukunft fällt weg:

- NativeInit3D

- CreateTexture3D

- ev. On/Un -LockBuffer3D



edit1: P.S. Bitte nur ausschliesslich quadratische Texturen für die Draw3D verwenden!!!
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Gast

BeitragSa, Jan 19, 2008 21:12
Antworten mit Zitat
Dieser Post hat mir richtig geholfen....
Vorallem DrawQuad3D...
Danke hectic!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group