3D-Spiegeleffekt

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

TheProgrammer

Betreff: 3D-Spiegeleffekt

BeitragDi, Mai 11, 2004 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi. Hab mal kurz nen Spiegel geproggt:

BlitzBasic: [AUSKLAPPEN]

; GRAFIK
Graphics3D 640,480,32,1
SetBuffer BackBuffer()
AppTitle "Spiegel"
; ***

; GLOBALS
Global mirror
Global mirror_cam
Global mirror_rotation
Global mirror_tex
Global mirror_bg
; ***

; ERSTELLEN
tex = CreateTexture(200,200)
korper = CreateCube()
camera = CreateCamera(korper)
PositionEntity korper,0,0,-10
raum = CreateCube()
light = CreateLight()
CreateWallMirror
Mirrortype 2
; ***

; SCALIEREN
ScaleEntity raum,-50,-50,-50
; ***

; TYPE
EntityType korper,1
EntityType raum,2
; ***

; RANGE
CameraRange camera,0.1,200
; ***

; TEXTURE
SetBuffer TextureBuffer(tex)

For I = 0 To 500
Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
Rect Rnd(0,200),Rnd(0,200),Rnd(10,20),Rnd(10,20)
Next

SetBuffer BackBuffer()
EntityTexture raum,tex
; ***

; HAUPTSCHLEIFE
While Not KeyHit(1)
; STEUERUNG
TurnEntity korper,0,-MouseXSpeed(),0
TurnEntity camera,MouseYSpeed(),0,0

MoveMouse 320,240
; ***

RotateWallMirror 1

; UPDATE
RenderWorld2 camera,raum,-50,-50,-50
Collisions 1,2,2,2
; ***

Flip
Wend
End
; ***

; FUNKTIONEN
Function CreateWallMirror()

mirror = CreateCube()
mirror_cam = CreateCamera()
mirror_tex = CreateTexture(320,240)
mirror_bg = CreateCube(mirror)
PositionEntity mirror_bg,0,0,0.06
ScaleEntity mirror,3.2,2.4,0.03
ScaleEntity mirror_cam,-1,1,1
ScaleTexture mirror_tex,1.6,1.1
EntityFX mirror,9

End Function

Function Renderworld2(camera,entity,x,y,z)

TurnEntity mirror,0,360-EntityYaw(mirror),0
TurnEntity mirror,0,mirror_rotation,0
TurnEntity mirror_cam,0,360-EntityYaw(mirror_cam),0
TurnEntity mirror_cam,0,mirror_rotation,0

PointEntity mirror_cam,camera
TurnEntity mirror_cam,0,mirror_rotation-2*EntityYaw(mirror_cam),0

CameraProjMode camera,0
CameraProjMode mirror_cam,1
CameraViewport camera,0,0,0,0
CameraViewport mirror_cam,0,0,320,240
ScaleEntity entity,-x,y,z
UpdateWorld
RenderWorld

CopyRect 0,0,320,240,0,0,BackBuffer(),TextureBuffer(mirror_tex)

CameraProjMode camera,1
CameraProjMode mirror_cam,0
CameraViewport camera,0,0,GraphicsWidth(),GraphicsHeight()
CameraViewport mirror_cam,0,0,0,0
ScaleEntity entity,x,y,z
UpdateWorld
RenderWorld

EntityTexture mirror,mirror_tex

End Function

Function RotateWallMirror(rotation)

mirror_rotation = mirror_rotation + rotation
If mirror_rotation > 360 Then mirror_rotation = 0
If mirror_rotation < 0 Then mirror_rotation = 360

End Function

Function MirrorType(typ)

EntityType mirror,typ
EntityType mirror_bg,typ

End Function

Function PositionMirror(x,y,z)

PositionEntity mirror,x,y,z
PositionEntity mirror_cam,x,y,z

End Function
; ***
aktuelles Projekt: The last day of human being

ChrisAttack

BeitragDi, Mai 11, 2004 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht ganz gut aus...
B3D
MSVC++
DX9SDK
 

Ava

Gast

BeitragDi, Mai 11, 2004 21:16
Antworten mit Zitat
Bei mir sind da leider sehr viele Grafikfehler und es ruckelt extremst. Confused

Markus2

BeitragDi, Mai 11, 2004 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@TheProgrammer

Das ruckeln liegt an deinen Programmierkünsten Wink
Die Maus nicht einfach immer in die Mitte setzen und evtl. mal
MausSpeed / 4.0 teilen .
Wenn man mehrere Cameras hat werden die alle gleichzeitig
gerendert glaube ich . Dafür sollte man die anderen solange
aus schalten .
 

lettorTrepuS

BeitragDi, Mai 11, 2004 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
  • Zuletzt bearbeitet von lettorTrepuS am Di, Mai 11, 2004 22:11, insgesamt einmal bearbeitet
 

x.Force

BeitragDi, Mai 11, 2004 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Der von TheProgrammer läuft bei mir ohne probs, deiner ST mit GraKa fehlern

AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT

Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.-
 

lettorTrepuS

BeitragDi, Mai 11, 2004 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

Dreamora

BeitragDi, Mai 11, 2004 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
letztere Variante läuft supi Smile

Blatolo

BeitragMi, Mai 12, 2004 6:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir ruckelt der von ST mehr als von Programmer.

Slayer

BeitragMi, Mai 12, 2004 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, TheProgrammers läuft bei mir auch ohne Probleme,
ST's ruckel bei mir auch.
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version
 

lettorTrepuS

BeitragMi, Mai 12, 2004 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Suco-X

Betreff: ........

BeitragDo, Mai 13, 2004 4:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ST, ich habe mir mal deinen Code vorgenommen. Ihr beide habt was Wichtiges vergessen, nämlich ne Nette 256 bei der Spiegeltextur um die textur in den Video Ram zu packen. Ich habs mal gemacht und getestet, bei mir ist die Version mit der Textur im Vram 50% schneller als die Ohne. Abgesehen davon, Netter effekt TheProgrammer. Hier mal neue Version um die Forum DB ein wenig zu ärgern.

BlitzBasic: [AUSKLAPPEN]

Graphics3D 640,480,32,1
SetBuffer BackBuffer()
AppTitle "Spiegel"
; ***
Global TFPS
Global FPS
Global TimerFPS



; GLOBALS
Global mirror
Global mirror_cam
Global mirror_rotation
Global mirror_tex
Global mirror_bg

; NEU: Skalieren und Spiegelgroese
Global mirror_scale# = 120
Global mirror_frame
Global mirror_atframe = 0

; ***

; ERSTELLEN
tex = CreateTexture(200,200)
korper = CreateCube()
camera = CreateCamera(korper)
PositionEntity korper,0,0,-10
raum = CreateCube()
light = CreateLight()
CreateWallMirror
Mirrortype 2
; ***

; SCALIEREN
ScaleEntity raum,-50,-50,-50
; ***

; TYPE
EntityType korper,1
EntityType raum,2
; ***

; RANGE
CameraRange camera,0.1,200
; ***

; TEXTURE
SetBuffer TextureBuffer(tex)

For I = 0 To 500
Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
Rect Rnd(0,200),Rnd(0,200),Rnd(10,20),Rnd(10,20)
Next

SetBuffer BackBuffer()
EntityTexture raum,tex
; ***

; HAUPTSCHLEIFE
While Not KeyHit(1)
; STEUERUNG
TurnEntity korper,0,-MouseXSpeed(),0
TurnEntity camera,MouseYSpeed(),0,0

MoveMouse 320,240
; ***

RotateWallMirror 1

; UPDATE
RenderWorld2 camera,raum,-50,-50,-50
Collisions 1,2,2,2
; ***
ShowFPS()
Flip 0
Wend
End
; ***

; FUNKTIONEN
Function CreateWallMirror()

mirror = CreateCube()
mirror_cam = CreateCamera()
; Hier mal die 256 weg und Testen.
mirror_tex = CreateTexture(mirror_scale#*1.33,mirror_scale#,256)
mirror_bg = CreateCube(mirror)
PositionEntity mirror_bg,0,0,0.06
ScaleEntity mirror,3.2,2.4,0.03
ScaleEntity mirror_cam,-1,1,1
ScaleTexture mirror_tex,1.6,1.1
EntityFX mirror,9
EntityTexture mirror,mirror_tex
End Function

Function Renderworld2(camera,entity,x,y,z)
If mirror_frame > mirror_atframe Then
mirror_frame = 0

TurnEntity mirror,0,mirror_scale#*1.33-EntityYaw(mirror),0
TurnEntity mirror,0,mirror_rotation,0
TurnEntity mirror_cam,0,mirror_scale#*1.33-EntityYaw(mirror_cam),0
TurnEntity mirror_cam,0,mirror_rotation,0

PointEntity mirror_cam,camera
TurnEntity mirror_cam,0,mirror_rotation-2*EntityYaw(mirror_cam),0

CameraProjMode camera,0
CameraProjMode mirror_cam,1
CameraViewport camera,0,0,0,0
CameraViewport mirror_cam,0,0,mirror_scale#*1.33,mirror_scale#
ScaleEntity entity,-x,y,z
UpdateWorld
RenderWorld

CopyRect 0,0,320,240,0,0,BackBuffer(),TextureBuffer(mirror_tex)

CameraProjMode camera,1
CameraProjMode mirror_cam,0
CameraViewport camera,0,0,GraphicsWidth(),GraphicsHeight()
CameraViewport mirror_cam,0,0,0,0
ScaleEntity entity,x,y,z
UpdateWorld
RenderWorld

;EntityTexture mirror,mirror_tex
End If

TurnEntity mirror,0,360-EntityYaw(mirror),0
TurnEntity mirror,0,mirror_rotation,0
TurnEntity mirror_cam,0,360-EntityYaw(mirror_cam),0
TurnEntity mirror_cam,0,mirror_rotation,0

PointEntity mirror_cam,camera
TurnEntity mirror_cam,0,mirror_rotation-2*EntityYaw(mirror_cam),0

CameraProjMode camera,1
CameraProjMode mirror_cam,0
CameraViewport camera,0,0,GraphicsWidth(),GraphicsHeight()
CameraViewport mirror_cam,0,0,0,0
ScaleEntity entity,x,y,z
UpdateWorld
RenderWorld

mirror_frame = mirror_frame + 1
End Function

Function RotateWallMirror(rotation)

mirror_rotation = mirror_rotation + rotation
If mirror_rotation > 360 Then mirror_rotation = 0
If mirror_rotation < 0 Then mirror_rotation = 360

End Function

Function MirrorType(typ)

EntityType mirror,typ
EntityType mirror_bg,typ

End Function

Function PositionMirror(x,y,z)

PositionEntity mirror,x,y,z
PositionEntity mirror_cam,x,y,z

End Function


Function ShowFPS ()
TFPS = TFPS + 1
If MilliSecs () - TimerFPS => 1000 Then
TimerFPS = MilliSecs ()
FPS = TFPS
TFPS = 0
End If
Text (0,40,"FPS : "+FPS)
End Function
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Blatolo

BeitragDo, Mai 13, 2004 6:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Variante ist schön schnell und flüssig.
Immer so ca 115 fps.

wunderkind

BeitragDo, Mai 13, 2004 7:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Schöner Effekt. Bei mir läuft das mit 1200 fps Shocked. Kann das sein?

Suco-X

Betreff: .....

BeitragDo, Mai 13, 2004 9:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Joa, habe ja flip 0 rein gemacht, damit die Leute den unterschied sehen mit und ohne Video Ram Textur. Die Zeile habe ich auch Kommentiert wo man das mal testen kann. Das es bei ST ruckelte, lag nicht daran das es langsam war(trotz Anti Vram Textur noch schnell genug), sondern er hat halt das Updaten von dem in textur Rendern verzögert um Speed zu gewinnen. Sieht halt dann so aus als wen es ruckeln würde. Aber bei einer einfachen Spiegeltextur sollte man noch jeden Frame updaten können. Ich selbst habe rund 500 fps, über 1000 ist ja schon massig Wink
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

IonPainter

BeitragDo, Mai 13, 2004 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
whohohoho 813 fps Smile
und ohne vram 113... Rolling Eyes

BladeRunner

Moderator

BeitragDo, Mai 13, 2004 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Flip normal:
VRam: 86
RAM: 80
bei 85 Herz, d.h. das normale Ram bremst die geschichte schon etwas weg, bei VRAM >?, mein Monitor unterstützt nit mehr...

Flip 0:
VRam: 428
RAM: 170
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

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group