ShadowEngine

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

StepTiger

Betreff: ShadowEngine

BeitragMo, Jun 19, 2006 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Also: Da es ja hier sonst kaum noch irgendwo eine freie Schattenengine gibt, hab ich mich mal an eine gesetzt!

PROBLEM: Es läuft bei meinen 2,1Ghz mit einer ATI Radeon 9800 Pro und 512MB DDR Ram gerade mal mit 17Hz/s
Und das bei sehr niedrigen Schattendetails! Dürfte am CameraPick liegen.


Soweit sogut!
Wer das verbessern könnte bitte mal einen Vorschlag posten!! Dankeschön!

Code: [AUSKLAPPEN]
;Shadows Code by StepTiger
Graphics3D 800,600,32,2

Global world=CreateTerrain(256)
Global shadowtex=CreateTexture(64,64)

RotateTexture shadowtex,0
ScaleTexture shadowtex,256,256
EntityFX world,1
EntityTexture world,shadowtex
PositionEntity world,-128,0,-128

light=CreateLight(3)

lkreis=CreateSphere()
ScaleEntity lkreis,.5,.5,.5
TurnEntity light,90,0,0
PositionEntity light,0,20,0
EntityRadius light,.2
EntityPickMode light,1

cam=CreateCamera()
camwink#=0
camdist#=20
camheight#=5

Global nx#,ny#,nz#
shadowcam=CreateCamera()
CameraProjMode shadowcam,0
CameraViewport shadowcam,1,1,100,100

lx#=0
lz#=0
ly#=20

cube1=CreateCube()
EntityPickMode cube1,2
ScaleEntity cube1,2,2,2
PositionEntity cube1,0,5,0
EntityColor cube1,255,0,0

For set=1 To 2
   cube=CreateCube()
   EntityPickMode cube,2
   ScaleEntity cube,2,2,2
   PositionEntity cube,Rnd(256)-128,2+Rnd(7),Rnd(256)-128
   EntityColor cube,255,0,0
Next

fps#=30
fpstime=1000./fps#
nextframe=MilliSecs()

camheight#=5

x=0

While Not KeyDown(1)
   SetBuffer BackBuffer()
   Repeat:Until MilliSecs()>nextframe
   nextframe=MilliSecs()+fpstime
   x=x+1
   If shad<>0 Then FreeEntity shad
   shad=0
   PositionEntity cam,Sin(camwink#)*camdist#,camheight#,Cos(camwink#)*camdist#
   If KeyDown(203) Then camwink#=camwink#-1
   If KeyDown(205) Then camwink#=camwink#+1
   If KeyDown(200) Then camdist#=camdist#+.1
   If KeyDown(208) Then camdist#=camdist#-.1
   If KeyDown(75) Then camheight#=camheight#+.1
   If KeyDown(79) Then camheight#=camheight#-.1
   If KeyDown(17) Then lz#=lz#-.1
   If KeyDown(31) Then lz#=lz#+.1
   If KeyDown(30) Then lx#=lx#+.1
   If KeyDown(32) Then lx#=lx#-.1
   If KeyDown(16) Then ly#=ly#-.1
   If KeyDown(18) Then ly=ly#+.1
   PointEntity cam,cube1
   SetBuffer TextureBuffer(shadowtex)
      ClsColor 255,255,255
      Cls
   SetBuffer BackBuffer()
   shadow(light,shadowcam,64,4)
   PositionEntity light,lx#,ly#,lz#
   PositionEntity lkreis,lx#,ly#,lz#
   UpdateWorld
   RenderWorld
   Text 1,1,fps#
   Text 1,20,camwink#
   Text 1,40,"X "+EntityX(cam)+" Y "+EntityY(cam)+" Z "+EntityZ(cam)
   Text 1,60,x
   Text 1,80,nx#+" "+ny#+" "+nz#
   endt#=MilliSecs()-oldframe#
   calcfps#=calcfps#*19.+1000./endt#
   calcfps#=calcfps#/20.
   Text 1,100,calcfps#
   oldframe#=MilliSecs()
   Flip
Wend

Function shadow(tlight,shadowcam,shadowx#,shadowscale#)
   LockBuffer BackBuffer()
   LockBuffer TextureBuffer(shadowtex)
   CameraProjMode shadowcam,1
   For x=1 To shadowx#
      For y=1 To shadowx#
         PositionEntity shadowcam,x*shadowscale#-128,1,y*shadowscale#-128
         PointEntity shadowcam,tlight
         If CameraPick(shadowcam,50,50)<>tlight
            r=120
            g=120
            b=120
            argb=0
            WritePixelFast x,shadowx#-y,argb,TextureBuffer(shadowtex)
         EndIf
      Next
   Next
   CameraProjMode shadowcam,0
   UnlockBuffer BackBuffer()
   UnlockBuffer TextureBuffer(shadowtex)
End Function



Habs nochmal leicht verändert! Nun hab ich noch veränderte Schatten rein gemacht!

Hier:
Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2

SeedRnd MilliSecs()

Global world=CreateTerrain(256)
Global shadowtex=CreateTexture(64,64)

RotateTexture shadowtex,0
ScaleTexture shadowtex,256,256
EntityFX world,1
EntityTexture world,shadowtex
PositionEntity world,-128,0,-128

light=CreateLight(3)

lkreis=CreateSphere()
ScaleEntity lkreis,.5,.5,.5
TurnEntity light,90,0,0
PositionEntity light,0,20,0
EntityRadius light,.2
EntityPickMode light,1

cam=CreateCamera()
camwink#=135
camdist#=20
camheight#=15

Global nx#,ny#,nz#
shadowcam=CreateCamera()
CameraProjMode shadowcam,0
CameraViewport shadowcam,1,1,800,600

lx#=0
lz#=0
ly#=20

cube1=CreateCube()
EntityPickMode cube1,2
ScaleEntity cube1,2,2,2
PositionEntity cube1,0,5,0
EntityColor cube1,255,0,0

For set=1 To 2
   cube=CreateCube()
   EntityPickMode cube,2
   ScaleEntity cube,2,2,2
   PositionEntity cube,Rnd(256)-128,2+Rnd(7),Rnd(256)-128
   EntityColor cube,255,0,0
Next

fps#=30
fpstime=1000./fps#
nextframe=MilliSecs()

x=0

While Not KeyDown(1)
   SetBuffer BackBuffer()
   Repeat:Until MilliSecs()>nextframe
   nextframe=MilliSecs()+fpstime
   x=x+1
   If shad<>0 Then FreeEntity shad
   shad=0
   PositionEntity cam,Sin(camwink#)*camdist#,camheight#,Cos(camwink#)*camdist#
   If KeyDown(203) Then camwink#=camwink#-1
   If KeyDown(205) Then camwink#=camwink#+1
   If KeyDown(200) Then camdist#=camdist#+.1
   If KeyDown(208) Then camdist#=camdist#-.1
   If KeyDown(75) Then camheight#=camheight#+.1
   If KeyDown(79) Then camheight#=camheight#-.1
   If KeyDown(17) Then lz#=lz#-.1
   If KeyDown(31) Then lz#=lz#+.1
   If KeyDown(30) Then lx#=lx#+.1
   If KeyDown(32) Then lx#=lx#-.1
   If KeyDown(16) Then ly#=ly#-.1
   If KeyDown(18) Then ly=ly#+.1
   PointEntity cam,cube1
   SetBuffer TextureBuffer(shadowtex)
      ClsColor 255,255,255
      Cls
   SetBuffer BackBuffer()
   shadow(light,shadowcam,64,4)
   PositionEntity light,lx#,ly#,lz#
   PositionEntity lkreis,lx#,ly#,lz#
   UpdateWorld
   RenderWorld
   Text 1,1,fps#
   Text 1,20,camwink#
   Text 1,40,"X "+EntityX(cam)+" Y "+EntityY(cam)+" Z "+EntityZ(cam)
   Text 1,60,x
   Text 1,80,nx#+" "+ny#+" "+nz#
   endt#=MilliSecs()-oldframe#
   calcfps#=calcfps#*19.+1000./endt#
   calcfps#=calcfps#/20.
   Text 1,100,calcfps#
   oldframe#=MilliSecs()
   Flip
Wend

Function shadow(tlight,shadowcam,shadowx#,shadowscale#)
   LockBuffer BackBuffer()
   CameraProjMode shadowcam,1
   For x=1 To shadowx#
      For y=1 To shadowx#
         LockBuffer TextureBuffer(shadowtex)
         PositionEntity shadowcam,x*shadowscale#-128,1,y*shadowscale#-128
         PointEntity shadowcam,tlight
         If CameraPick(shadowcam,400,300)<>tlight
            oldcol=ReadPixelFast(x,y,TextureBuffer(shadowtex))
            oldr=oldcol Shr 16 And 255 Shl 0
            oldg=oldcol Shr 8 And 255 Shl 0
            oldb=oldcol Shr 0 And 255 Shl 0
            nr=oldr*.1
            ng=oldg*.1
            nb=oldb*.1
            argb=(nb Or (ng Shl 8) Or (nr Shl 16) Or ($FF000000))
            WritePixelFast x,shadowx#-y,argb,TextureBuffer(shadowtex)
         EndIf
         UnlockBuffer TextureBuffer(shadowtex)
      Next
   Next
   CameraProjMode shadowcam,0
   UnlockBuffer BackBuffer()
End Function
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Mr.Keks

BeitragMo, Jun 26, 2006 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
PROBLEM: Es läuft bei meinen 2,1Ghz mit einer ATI Radeon 9800 Pro und 512MB DDR Ram gerade mal mit 17Hz/s
Und das bei sehr niedrigen Schattendetails! Dürfte am CameraPick liegen.
1. Hz/s ist eine schwachsinnige Einheit, frag mal deinen Physiklehrer! Wink
2. Stimmt, das ist arschlahm so. CameraPick ist nicht für soetwas geeignet.
3. Besser einfach die Schattenwerfer auf das Terrain rendern wie gezeigt unter:
http://www.blitz.inarie.de/viewtopic.php?t=226
MrKeks.net

StepTiger

BeitragFr, Jun 30, 2006 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
na ich bin doof

Hz/s ^^
Hz oder f/s oder fps
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group