Nebel Problem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Omenaton_2

Betreff: Nebel Problem

BeitragMo, Mai 10, 2004 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe eine Szene mit etwas Nebel.
Wenn ich einen Plane als Boden mache (stat Terrain) sieht alles richtig aus.
Wenn ich mit Terrain Befehl den Boden erstelle (ganz einfach, nur flach und texturiert, keine Heightmap oder ähnliches) gibt es ein schwerwiegendes Problem mit dem Nebel auf dem Boden. (An den anderen Objekten in der Szene ist der Nebel weiterhin richtig.)
das Problem ist so, daß der Nebel nicht wie es sein soll erst in größerer Entfernung beginnt, sondern direkt bei der Kamera und wenn ich mit der Kamere (FP view) herumrenne dann scheint der Nebel an den Terrain gebunden zu sein und wandert nicht mit, wie es sein sollte.
Woran kann das liegen ? Wieso nur bei Terrain ?
(FogRange ist richtig gesetzt. Lichter ändern sich auch nicht. Der einzige Unterschied ist ob ich den Boden mit Plane oder mit Terrain Befehl erstelle.)

Markus2

BeitragMo, Mai 10, 2004 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie soll ein Nebel mit wandern ?
Der Nebel bezieht sich doch immer auf die Sichtweite .
Man könnte die Nebelstärke vieleicht je nach Pos. verändern .
 

Omenaton_2

BeitragMo, Mai 10, 2004 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus2 hat Folgendes geschrieben:
Wie soll ein Nebel mit wandern ?
Der Nebel bezieht sich doch immer auf die Sichtweite .


Der Nebel wandert normaler weise mit der Betrachter (Kamera) mit. Immer von dem Punkt aus, wo man steht, wird auf der gleicher weise neu in einem Radius der Nebel berechnet. Der Nebel-Range wird immer von der Kamera aus berechnet.
Der Fehler ist, daß es in dem speziellen Fall nicht so ist.

Markus2

BeitragMo, Mai 10, 2004 23:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Haste mal nen lauffähiges Beispiel das man das testen kann ?
Also wo du die Kamera bewegst und der Nebel zu nimmt oder so .

Normal brauchste den Range nur einmal setzen und gut ist ...
 

Omenaton_2

BeitragDi, Mai 11, 2004 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist eine abgspeckte Version. Ich muß betonen, das ist kein Spiel, nur ein kleiner Test und ich habe es zum größten Teil schon vor fast 2 Jahren gemacht. Für ein richtiges Spiel würde ich die Steuerung, Kamera-Dummy, Gravity und Vieles mehr ganz anders (viel besser) machen.

Code: [AUSKLAPPEN]

;___ Testprogramm - Omenaton _________________________________________________________________


Farbtiefe = 32
ScreenBreite = 800;1024
ScreenHoehe = 600;768

Graphics3D ScreenBreite, ScreenHoehe , Farbtiefe, 1
SetBuffer FrontBuffer()

Gosub FontsLaden

Const T_Ground = 1, T_Character = 2, T_Scene = 3
Const JA = 1, NEIN = 0
Const Gravity# = 0.1
Collisions T_Ground, T_Character, 2, 3
Collisions T_Character, T_Scene,  2, 3

Global ScreenShots% = 0
Global Looking% = NEIN
Global CamSpPitch# = 0

Global gfxMauszeiger
gfxMauszeiger=LoadImage("gfx/mausz32.bmp")
MaskImage gfxMauszeiger,255,0,255

gfxSaveScreen=CreateImage (ScreenBreite,ScreenHoehe)
gfxDesktopReady=CreateImage (ScreenBreite,ScreenHoehe)

;--------------------------------------------------------------------------------------------
SetBuffer BackBuffer()

;WBuffer False;True

Gosub LandschaftErstellung

Gosub ModellGenerierung

SetFont fntTahoma12
Color 200,200,200
Text 0, ScreenHoehe - 60 + 26, "Bewegung : Kursortasten.    Hoch/Runterschauen : Q/A.     Beenden : Escape-Taste     Screenshot machen : F12"

CopyRect 0,0,ScreenBreite,ScreenHoehe,0,0,BackBuffer(),ImageBuffer(gfxDesktopReady)
CopyRect 0,0,ScreenBreite,ScreenHoehe,0,0,BackBuffer(),ImageBuffer(gfxSaveScreen)

MoveMouse 50,50

;AntiAlias enable ;disable

;*** Main Game Loop **************************************************************************
.MainGameLoop

Repeat

;... Tastaturabfrage .........................................................................

   If KeyDown(1) Then Goto ProgEnde

   Looking = NEIN
   If KeyDown( 30 )=True Then TurnEntity CameraSpielfeld,1,0,0    : CamSpPitch = CamSpPitch + 1 : Looking = JA   ; look down A
   If KeyDown( 16 )=True Then TurnEntity CameraSpielfeld,-1,0,0 : CamSpPitch = CamSpPitch - 1 : Looking = JA   ; look up Q

   If Looking = NEIN Then

      If KeyDown( 205 )=True Then    ; right taste
         TurnEntity CameraSpielfeld, - CamSpPitch,0,0 : CamSpPitch = 0
         TurnEntity CameraSpielfeld,0,-2.5,0 ; -1.5
      EndIf
         
      If KeyDown( 203 )=True Then      ; left
         TurnEntity CameraSpielfeld, - CamSpPitch,0,0 : CamSpPitch = 0
         TurnEntity CameraSpielfeld,0,2.5,0
      EndIf
      
      If KeyDown( 208 )=True Then      ; down Rückwärts
         TurnEntity CameraSpielfeld, - CamSpPitch,0,0 : CamSpPitch = 0
         MoveEntity CameraSpielfeld,0,0,-0.3   
      EndIf
      
      If KeyDown( 200 )=True Then      ; up Vorwärts
         TurnEntity CameraSpielfeld, - CamSpPitch,0,0 : CamSpPitch = 0
         MoveEntity CameraSpielfeld,0,0,0.3
      EndIf
      
   EndIf
      
   If KeyHit(88) Then ; (F12)
      SaveBuffer(FrontBuffer(),"sshot" + ScreenShots + ".bmp") : ScreenShots = ScreenShots + 1 : Color 255, 255, 50 : Locate 450,100 : Print "SCREENSHOT SAVED" : Delay 1000
   EndIf   

;... Gravity ...................................................................................

   CamSp_X# = EntityX(CameraSpielfeld)
   CamSp_Y# = EntityY(CameraSpielfeld)
   CamSp_Z# = EntityZ(CameraSpielfeld)

   If CamSp_Y >= 2.0 And EntityCollided( CameraSpielfeld, T_Scene ) = False Then

         CamSp_Y = CamSp_Y - Gravity
         PositionEntity CameraSpielfeld, CamSp_X, CamSp_Y, CamSp_Z , True
         UpdateWorld
   EndIf
;...............................................................................................

   Color 0,200,0 : Locate 0,0
   Print "X : " + CamSp_X : Print "Y : " + CamSp_Y : Print "Z : " + CamSp_Z

   UpdateWorld
   RenderWorld

   DrawImage gfxSaveScreen,0,0
   DrawImage gfxMauszeiger,MouseX(),MouseY()   
   
   Flip

Forever
;***************  Landschaft Erstellung  ****************************************************
.LandschaftErstellung

gfxBodenTexture = LoadTexture( "gfx\gras1.jpg" )

;... Terrain ..............................

;Terrain1 = CreateTerrain(128);128
;EntityType Terrain1, T_Ground
;ScaleEntity Terrain1, 10,10,10
;EntityTexture Terrain1, gfxBodenTexture
;TerrainShading Terrain1, True
;PositionEntity Terrain1,-32,0,-32

;... Plane ................................

Ebene = CreatePlane()
ScaleEntity Ebene, 10,10,10
EntityTexture Ebene, gfxBodenTexture
PositionEntity Ebene, 0, 0, 0
EntityType Ebene, T_Scene;T_Ground
EntityFX Ebene, 1 ; Hell

;... Sky .........................................................................................

Sky = LoadMesh("gfx\sky1.3ds")

SkyTexture = LoadTexture("gfx\sky01.jpg")
EntityTexture Sky, SkyTexture
FlipMesh Sky
PositionEntity Sky, 32, 15, 32

EntityFX Sky, 9 ; Fog auschalten (8) UND volles self illu (1)

;------ Kameras --------------------------------------------------------------------------------

CameraSpielfeld = CreateCamera()
CameraViewport CameraSpielfeld, 0, 0, Screenbreite, ScreenHoehe - 60
PositionEntity CameraSpielfeld,10,2,10;2
TurnEntity CameraSpielfeld, 0, 90, 0

EntityType CameraSpielfeld, T_Character
EntityRadius CameraSpielfeld,0.6,1.4;0.6,1.3
;EntityBox CameraSpielfeld, 0.2,1,0.1
CameraRange CameraSpielfeld, 0.4,800 ; Default: 1,1000 ; Richtiges Z-Buffering mit 0.4,X

CameraClsColor CameraSpielfeld,200,200,220

CameraFogMode  CameraSpielfeld,1
CameraFogRange CameraSpielfeld,18,100
CameraFogColor CameraSpielfeld,200,200,220

;------ Lichter -------------------------------------------------------------------------------

Licht1 = CreateLight() ; Omni
LightColor Licht1, 330, 330, 330

PositionEntity Licht1, 100,50,100

RotateEntity Licht1, -135, 0, 0

AmbientLight 100,100,100

Return
;*** Modell Generierung ****************************************************************************
.ModellGenerierung

Modell_000 = LoadMesh("gfx\rwa1_01.3ds") ; Einfache Wälle

ModellTexture_000 = LoadTexture("gfx\wall01t0.tga")

EntityTexture Modell_000, ModellTexture_000       
FlipMesh Modell_000
EntityType Modell_000,T_Scene
ScaleEntity Modell_000, 0.03,0.03,0.03
TurnEntity Modell_000, 0, 90, 0


Return
;---------------- Fonts laden ---------------------------------------------------
.FontsLaden

fntTahoma12=LoadFont("Tahoma",12,False,False,False)

Return
;*** ENDE ******************************************************************************************
.ProgEnde

End



Wenn du kein Sky zur Verfügung hast, lösche es einfach, das ist unwichtig. Ein Modell zu laden und zu setzen ist auch nicht wichtig.
Font natürlich auch nicht.

Jetzt zum Testen des Problems, das ich am Anfang des Threads beschrieben habe:

So wie in dem Code jetzt steht, funktioniert es richtig. Der Boden ist ein Plane.
Teste es kurz um zu sehen.
Dann, springe zu dem Label "LandschaftErstellung" und da siehst du einen auskommentierten Block mit der Überschrift "Terrain".
Entferne die Commentszeichen hier überall und dann lösche oder kommenrtiere den nachfolgenden Block mit der Überschrift "Plane" aus.
Wenn du jetzt das Programm laufen läßt, wird der Boden mit dem Nebel nicht mehr richtig berechnet.

Was habe ich übersehen ?

Markus2

BeitragDi, Mai 11, 2004 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
so gehts Smile

Ambient solltest du klein halten .
LichtFarbe geht nur von -255 bis 255 .
CameraRange von 1 anfangen lassen oder alles
größer scalieren . Eine 1 ist bei mir z.B. 1cm .



Code: [AUSKLAPPEN]

;------ Kameras --------------------------------------------------------------------------------

CameraSpielfeld = CreateCamera()
CameraViewport CameraSpielfeld, 0, 0, Screenbreite, ScreenHoehe - 60
PositionEntity CameraSpielfeld,0,20,0
TurnEntity CameraSpielfeld, 0, 90, 0

EntityType CameraSpielfeld, T_Character
EntityRadius CameraSpielfeld,0.6,1.4;0.6,1.3
;EntityBox CameraSpielfeld, 0.2,1,0.1
CameraRange CameraSpielfeld, 1,800 ; Default: 1,1000 ; Richtiges Z-Buffering mit 0.4,X

CameraClsColor CameraSpielfeld,0,0,0

CameraFogMode CameraSpielfeld,1
CameraFogRange CameraSpielfeld,10,100
CameraFogColor CameraSpielfeld,200,200,220

;... Terrain ..............................

Terrain1 = CreateTerrain(128);128
EntityType Terrain1, T_Ground
ScaleEntity Terrain1, 10,10,10
gfxBodenTexture=LoadTexture( "H:\Desktop\tx.jpg")
EntityTexture Terrain1, gfxBodenTexture
TerrainShading Terrain1, True
PositionEntity Terrain1,-32,0,-32

;------ Lichter -------------------------------------------------------------------------------

Licht1 = CreateLight(2)
LightColor Licht1, 255, 255, 255
LightRange licht1,100
PositionEntity Licht1, 0,100,0

RotateEntity Licht1, -90, 0, 0

AmbientLight 10,10,10

 

Omenaton_2

BeitragMi, Mai 12, 2004 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus2, danke für dein Bemühen.
Leider funtioniert das so immer noch nicht.
Bist du dir sicher, daß das so bei dir funktioniert hat? Hast du versucht dich umzudrehen und ein wenig herumzurennen ?
Hast du vielleicht merh Zeilen geändert nur vergessen sie zu posten?

CameraRange muß exakt bei 0.4 beginnen, sonst gibts z-Buffer Clipping-Fehler wenn ich dicht vor einer Wand stehe und mich dann drehe. Das scheint aber nicht das Problem zu sein.

Markus2

BeitragMi, Mai 12, 2004 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir sah das ok aus , müßte auch nur der Teil gewesen sein .
Scaliere lieber den Rest größer und stelle den CameraRange von 1- ein
dann kannst du das schonmal ausschließen .
Oder wenns geht kannste es ja wieder runter stellen .
Also ich bin mal mit der Kamera über eine Terrain fläche gedüst
und der Nebel ist wie du es sagst mitgewandert .
Was mich aber wundert ist dieser Befehl CameraFogMode , ich
glaube den habe ich nie benutzt und ohne den ging es bei dir nicht !?
 

Dreamora

BeitragMi, Mai 12, 2004 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
also was die Farbranges betrifft liegt ihr beide falsch.
Das steht zwar gross in der Hilfe aber naja:

Red, Green, Blue = 0 - 255
Alpha = 0.0 - 1.0



Wozu dient

DrawImage gfxSaveScreen,0,0 ???

das bild wurde vor dem Start der mainloop aufgezeichnet so wie ich das sehe ... übermalt aber nachher immer den gesammten screen?
 

Omenaton_2

BeitragMi, Mai 12, 2004 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus:
CameraFogMode habe ich drin, weil ich auch damit experimentiert habe. Wenn ich diesen Befehl herausnehme, ist gar kein Fog zu sehen.
Den CameraRange habe ich testweise wieder auf 1 erhöht, aber das hat den Fehler nicht behoben.
Das Terrain habe ich nicht größer skaliert als es jetzt ist. Das ist schon um faktor 10 skaliert worden.

Dreamora:
"DrawImage gfxSaveScreen,0,0"
dient zum updaten des Hintergrundes unten, wo die 2D Anzeigen sind.
Allerdings in dem Beispiel Code war das da gerade etwas durcheinander, da ich paar Sachen hin und her geschoben habe und gelsöcht habe, es ist eine Arbeitsversion und das hat da nicht richtig funktioniert, inzwischen habe ich den Fehler schon behoben. Es ist schlecht, wie du auch gemertk hast, daß das den gesamten Screen übermalt und nicht nur unten, aber das ist unwichtig für diesen Test.
 

Gast

BeitragDo, Mai 13, 2004 8:56
Antworten mit Zitat
Meine 3D Blitz Version ist 1.86

hmm Auszug aus einem Game von mir wo ich
ein Highmap Terrain über Loadterrain benutze,
ich hab da kein Problem mit dem Nebel(Fog),
ich nutze den Nebel hier haupsächlich um den
CameraRange zu vertuschen damit man die
LOD Abrisse an den Terrainkanten nicht sieht

Den LOD brauche ich weil sehr viele Objecte
zB Bäume etc habe die FPS zu sehr drücken ich
benutze aber zusätzlich noch Obj LOD System.

Nebel ist also bei LOD sehr nützlich sollte aber
mit dem Background Color und vorallem auch
zur Beleuchtung passen, deswegen muss man
zB bei Tag/Nacht/Regen/Schnee auf andere Licht
und Fog Color Werte umstellen.


Code: [AUSKLAPPEN]

;SET UP LIGHTING
;
sa = 25 : AmbientLight sa,sa,sa
;
Global light=CreateLight(lightpivot)
RotateEntity light,45,45,0
sl = 192 : LightColor light,sl,sl,sl
LightRange light, 300
;
;END LIGHT

;CameraClsMode main_cam, False, True
CameraClsColor main_cam,80,120,120  ; Hintergrund Color
;
CameraProjMode main_cam,1
CameraViewport main_cam,0,0,GraphicsWidth(),GraphicsHeight()
;
; main_cam range und Fog
;
CameraRange    main_cam,2.0,900          ;  LOD Range 2.0 to 900
CameraZoom     main_cam,1.2                ; Camera Zoom
CameraFogMode  main_cam,1                  ; Fog ON/OFF

CameraFogColor main_cam, 90,110,110     ;Fog Color
CameraFogRange main_cam, 600,800        ;Fog Range for LOD
;

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group