Vorgehensweise TextureBuffer()

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

PacMani

Betreff: Vorgehensweise TextureBuffer()

BeitragMi, März 31, 2010 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Smile

leider noch nicht viel Erfahrung mit TextureBuffer(). Habe mir zwar schon einige Beispiele angesehen, aber wenn ich etwas von neu auf programmieren muss dann hakt es in diesem Fall etwas... erstmal mein Problem.

Ich möchte auf ein Mesh das Bild einer zweiten Kamera als Textur nutzen, während die erste die normale 3D-Welt zeichnet. Nun weiß ich leider nicht wie ich da genau vorgehen soll, in welcher Reihenfolge SetBuffer TextureBuffer(), muss ich die erste Kamera verstecken oder wie zeichne ich nur das Bild der zweiten Kamera in den TextureBuffer(), und ist RenderWorld benötigt?

Vielleicht kann mir jemand ein paar kleine Tipps geben...

Jo0oker

BeitragMi, März 31, 2010 10:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Rein von der Logik her funktioniert das ganze so:
->Hauptkamera verstecken
->Spiegelkamera zeigen
->Bild mit Spiegelkamera Rendern
->Bild landet im BackBuffer
->Aus dem BackBuffer in den TextureBuffer kopieren
->Spiegelkameea verstecken
->Textur auf das Mesh legen
->Nun wieder rendern
->Bild landet im BackBuffer
->BackBuffer mit flip in FrontBuffer packen

Allerdings meine ich, dass B3D einige Probleme mit dem TextureBuffer hat.

Schau dir außerdem mal den Befehl CopyRect an!

P.S.: Wenn ich irwo falsch liege, bitte korrigieren Smile

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!
 

PacMani

BeitragMi, März 31, 2010 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal. Habe es jetzt so gemacht, aber das Ergebnis ist nicht ganz so klasse - habe ich etwas mit der Texturengröße falsch gemacht?
Code: [AUSKLAPPEN]
Graphics3D 800,600
SetBuffer BackBuffer()
Global FPSTimer=CreateTimer(60)

Global Camera=CreateCamera()
PositionEntity Camera,0,3,-10

Global Plane=CreatePlane()
EntityTexture Plane,LoadTexture("texture\floor001.png")

Global Car=LoadMesh("model\redcar.3ds")
ScaleEntity Car,0.1,0.1,0.1
PositionEntity Car,0,2,0

Global RearMirror=CreateMesh() ;meine Auffassung von SingleSurface :D
Local RearSurface=CreateSurface(RearMirror)
Local RearV0=AddVertex(RearSurface,0,0,0,0,0)
Local RearV1=AddVertex(RearSurface,0,1,0,0,1)
Local RearV2=AddVertex(RearSurface,1,0,0,1,0)
Local RearV3=AddVertex(RearSurface,1,1,0,1,1)
AddTriangle(RearSurface,RearV0,RearV1,RearV2)
AddTriangle(RearSurface,RearV1,RearV3,RearV2)
EntityFX RearMirror,17
PositionEntity RearMirror,0,2,15
;ScaleEntity RearMirror,2.27,0.67,1
ScaleEntity RearMirror,10,10,1

Global RearTexture=CreateTexture(227,67)

Global RearCamera=CreateCamera(RearMirror)
RotateEntity RearCamera,0,180,180
CameraViewport RearCamera,0,0,227,67
HideEntity RearCamera

Repeat
   If KeyDown(200) Then MoveEntity Camera,0,0,0.1
   If KeyDown(208) Then MoveEntity Camera,0,0,-0.1
   If KeyDown(203) Then MoveEntity Camera,-0.1,0,0
   If KeyDown(205) Then MoveEntity Camera,0.1,0,0
   If KeyDown(82) Then TurnEntity Camera,0,1,0
   
   
   TurnEntity Car,0,2,0
   UpdateRearMirror()
   
   UpdateWorld
   RenderWorld
   
   WaitTimer(FPSTimer)
   Flip False   
Until KeyHit(1)
End

Function UpdateRearMirror()
   HideEntity Camera
   ShowEntity RearCamera
   RenderWorld
   CopyRect 0,0,227,67,0,0,BackBuffer(),TextureBuffer(RearTexture)
   HideEntity RearCamera
   ShowEntity Camera
   EntityTexture RearMirror,RearTexture
End Function


user posted image
 

Fredko

BeitragMi, März 31, 2010 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls eine Seite einer Textur (oder hier beide) nicht aus 2^n besteht, so wird
sie auf die folgende größere Zahl aus der Potenz skaliert.
Du nutzt, wenn ich es richtig gelesen habe, 227 und 67 als Breite/Höhe der Textur, also kommt jeweils 256 und 128 raus. Damit die aber du aber die "echte" Größe der Textur nutzen kannst, musst du einfach dividieren:
Für U musst du anstatt 1.0 227.0/256.0 benutzen, sowie für V anstatt 1.0 einfach 67.0/128.0 .
Ich empfehle trotzdem dringlich, die Textur von Anfang an mit 256 und 128 zu erstellen, da manche Grafikkarten die Textur gar nicht skalieren werden, und dann kann es richtig lustig werden.
!
 

PacMani

BeitragMi, März 31, 2010 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, sowas dachte ich mir fast schon ^_^

Sollte man Texturen dann nicht auch gleich quadratisch machen, oder ist das egal?

Jo0oker

BeitragMi, März 31, 2010 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, sollte man.
Aber mit der Zeit wird es immer unwichtiger, da die Grakas nunmehr damit gut umgehen können.

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group