[B3D] Nachtsichtgerät (Nightvision optic)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Black Spider

Betreff: [B3D] Nachtsichtgerät (Nightvision optic)

BeitragDi, Okt 31, 2006 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
So,
wollte schon lange mal sowas coden, doch nun werde ich es bald sowiso brauchen,
also habe ich mich ran gemacht. SetGamma 0,255,0 wolltsch net, also umständlich mit Blur und Bloomfilter.
Sehr einfach einzusetzen, mit dem Code kann man aus dem:
(ohne nVo)
http://img522.imageshack.us/im...kelja9.jpg

das hier machen:
(mit nVo)
http://img440.imageshack.us/im...ellou6.jpg

aber vorsicht, realistischer weise kann es auch zu überblendungen kommen (wohaha, wie bei SplinterCell ^^):
(mit nVo, aber zu helle Umgebung)
http://img414.imageshack.us/im...chtfr7.jpg

Code:
Code: [AUSKLAPPEN]
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
HidePointer()
SeedRnd MilliSecs()

Const k_cam    = 1
Const k_grund    = 2
Const k_obj      = 3

Collisions k_cam, k_grund, 2, 3
Collisions k_cam, k_obj, 2, 3
Collisions k_obj, k_grund, 2, 3

;Camera
cam          = CreatePivot()
Global camera    = CreateCamera(cam)
PositionEntity cam,0,5,0
PositionEntity camera,0,5,0
CameraClsColor camera,10,10,10
EntityType cam,k_cam
EntityRadius cam,2,2
;Beide Funktionen werden für´s Nachtsichtgerät benötigt!
CreateBloomCam(camera,256);512)
CreateBlurCam(camera,1.6,1.985,1.995,.7,1)

;es werde Licht
AmbientLight 50,50,50
lit = CreateLight(2)
MoveEntity lit,13,55,10
PointEntity lit,camera
LightColor lit,255,255,255

;Grund
cub = CreatePlane()
EntityType cub,k_grund
EntityFX cub,1
EntityColor cub,10,10,10

;Umweltobjekte
Dim cube(30)

facia = LoadTexture("facia_0.jpg")

For l = 0 To 30
cube(l) = CreateCube()
ScaleEntity cube(l),Rand(3,9),Rand(5,9),Rand(3,9)
EntityType cube(l),k_obj
PositionEntity cube(l),Rnd(-150,150),9,Rnd(-150,150)
EntityRadius cube(l),5,5
EntityColor cube(l),50,50,50
;EntityFX cube(l),1+2
EntityTexture cube(l),facia
Next




hod = 0
;--- Hauptschleife ---
While Not(KeyHit(1))

;Taste 1: Wireframe
If KeyHit(2) Then wire = 1 - wire
WireFrame wire

;Taste Strg: Ducken
If KeyDown(29) Then
PositionEntity camera,0,1,0
Else
PositionEntity camera,0,5,0
End If

;Taste Tab: Nachtsicht an/aus
If KeyHit(15) Then nVo = 1-nVo

;Taste: 2: Zwischen hell und dunkel schalten
If KeyHit(3) Then hod = 1-hod

;Bewegung usw. (alles nicht so wichtig, gehört aber zur Testebene)
TranslateEntity cam,0,-1,0

x_rot# = MouseYSpeed()/3
y_rot# = -1*(MouseXSpeed()/3)
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
TurnEntity cam,0,y_rot#,0
TurnEntity camera,x_rot#,0,0

If KeyDown(17) Then MoveEntity cam,0,0,.5
If KeyDown(30) Then MoveEntity cam,-.5,0,0
If KeyDown(31) Then MoveEntity cam,0,0,-.5
If KeyDown(32) Then MoveEntity cam,.5,0,0

If hod = 1 Then
CameraClsColor camera,150,150,150
EntityColor cub,200,200,200
Else
CameraClsColor camera,10,10,10
EntityColor cub,10,10,10
End If

For l = 0 To 30
TranslateEntity cube(l),0,-.1,0
If hod = 1 Then
EntityColor cube(l),255,255,255
Else
EntityColor cube(l),10,10,10
End If
Next


;Das hier ist der entscheidene Punkt!
;-----------------------
UpdateBlur(1024,768,0)
UpdateBloom(nVo)
Update_NightVision(nVo)
;-----------------------


;Renderworld, bla, bla
UpdateWorld
RenderWorld
Text 0,0,TrisRendered()

Flip
Wend
End




Function Update_NightVision(on)
If on <> 0 Then
Set_Gamma(-50,50,-50)
UpdateBlur(1028,768,1)
Else
Set_Gamma(0,0,0)
End If
End Function

Function Set_Gamma(red, green, blue)
   For k=0 To 255
      SetGamma k,k,k,k+red,k+green,k+blue
   Next
   UpdateGamma
End Function


Type blur
   Field spr
   Field tex
   Field art#
   Field blend
End Type

Type bloom
   Field spr
   Field tex
End Type



Function CreateBlurCam(camera,Strk,scx#,scy#,alpha#,blend,blend_2=1)

blur.Blur = New Blur

blur\tex = CreateTexture(GraphicsWidth(),GraphicsHeight(),256)
blur\art = strk
blur\spr = CreateSprite(camera)
PositionEntity blur\spr,0,-.5,blur\art
EntityOrder blur\spr,-1
ScaleSprite blur\spr,scx,scy
EntityTexture blur\spr,blur\tex,0,1
EntityAlpha blur\spr,alpha
TextureBlend blur\tex,blend
blur\blend = blend_2
EntityBlend blur\spr,blur_blend

End Function

Function CreateBloomCam(camera,wh#=64)

bloom.Bloom = New Bloom

bloom\tex = CreateTexture(wh,wh,256)
bloom\spr = CreateSprite(camera)
PositionEntity bloom\spr,0,0,1.7
EntityOrder bloom\spr,-2
ScaleSprite bloom\spr,2,2
EntityTexture bloom\spr,bloom\tex
EntityAlpha bloom\spr,.5
TextureBlend bloom\tex,5
EntityBlend bloom\spr,1+2

End Function



Function UpdateBlur(ghei, gwid, blur_on)
For blur.Blur = Each Blur
If blur_on = 1 Then
ShowEntity blur\spr
CopyRect 0,0,ghei,gwid,0,0,FrontBuffer(),TextureBuffer(blur\tex)
Else
HideEntity blur\spr
End If
Next
End Function






Function UpdateBloom(on)
For bloom.Bloom = Each Bloom

If on <> 0 Then
   

HideEntity bloom\spr
CameraViewport camera,0,0,TextureWidth(bloom\tex),TextureHeight(bloom\tex)
RenderWorld
CopyRect 0,0,TextureWidth(bloom\tex),TextureHeight(bloom\tex),0,0,BackBuffer(),TextureBuffer(bloom\tex)
CameraViewport camera,0,0,1024,768
ShowEntity bloom\spr


Else
HideEntity bloom\spr
End If

Next
End Function




ihr braucht noch die Textur für die Cubes:
(heisst Facia_0.jpg)
user posted image



zur erklärung der Funktionen:
CreateBloomCam(kamera,auflösung)
Initalisiert den Bloomfilter, je höher die Auflösung, desto mehr speicher zieht´s,
sieht aber auch besser aus. (Standard: 256)

CreateBlurCam(camera,Strk,scx#,scy#,alpha#,blend,blend_2=1)
aus meiner Blur lib (https://www.blitzforum.de/forum/viewtopic.php?t=19531)
hat einige erweiterungen erhalten, sollte aber klar sein.
Kamera: Die entsprechende Kamera für den Blur
Strk: "Stärke", wie weit der Sprite von der Kamera weg ist (Standard 1.6)
scx/scy: ScaleX/ScaleY, die größe des Sprites; sollte bei strk 1.6, 1.995 sein, wie bei anderen werten die optimale größe ist, weiss ich nicht.
alpha/blend: Den alpha und blend wert
blend_2: Auch der blend wert, aber der des Sprites.

How to use it ^^:
Blur und Bloom müssen aktiv sein,
und "UpdateNightVision(on)" muss auf 1 stehen.
Ansonsten ist, denke ich, oben im beispiel alles nötige drinne.

gut,
das wars.
Ich würde mich über ein Feedback freuen,
+ Heatshading folgt sobald...
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif
  • Zuletzt bearbeitet von Black Spider am Do, Nov 02, 2006 18:32, insgesamt einmal bearbeitet
 

c64

BeitragDo, Nov 02, 2006 9:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht super aus, benutze ich bei Zeiten auch Smile Thx.

Aber in deinem Code (Was allerdings nix mit den Supi Effekt zu tun hat !) haste die Mousesteuerung ein wenig murksig, setze das MoveMouse doch mal einfach nur vor die Render / Flip Befehle dann lässt sich die Camera besser steuern.

mfg
Patrick
Betreten verboten! Kinder haften für ihre Eltern!

Black Spider

BeitragDo, Nov 02, 2006 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
schon geschehen Very Happy
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif
 

BadDeath

BeitragSa, Mai 24, 2008 0:18
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo!

ich weiß, dieser code ist schon "uralt", aber ich finde den bloom-effekt sehr nützlich und habe den gleich in mein spiel eingebaut. nun habe ich eine frage: wie bekomme ich das kompatibel mit anderen auflösungen als 1024x768?

das ist die einzigste auflösung, die ich geschafft habe fehlerfrei hinzubekommen, dazu musste ich auch den bloomsprite um 2, statt 1,7 nachvorne schieben. wenn ich nun aber zb 1680x1050 habe, ist das alles nur oben in einem kleinen rechteck zusehen und der rest des bildschrim ist noch die levelauswahl von vorher. ich komme nicht weiter, ich habe iwie alles mögliche gemacht... die texturauflösung mit 64,128,512 und die versch. bildschrimauflösungen erstetzt, mein renderworld durch updatebloom erstetzt, aber ich finde den fehler nicht, welcher bestimmt wieder bei mir liegt xD

wäre nett, wenn ihr mir helfen könntet.


mfg, baddeath



EDIT: sry, ich habs schon: musste den CameraViewPort der auflösung anpassen - irgendwie überlas ich diese zeile ^^

danke übrigens für den geilen code!

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group