[B3D] Nachtsichtgerät (Nightvision optic)
Übersicht

![]() |
Black SpiderBetreff: [B3D] Nachtsichtgerät (Nightvision optic) |
![]() Antworten mit Zitat ![]() |
---|---|---|
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) ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sieht super aus, benutze ich bei Zeiten auch ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
schon geschehen ![]() |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group