Nebel Problem
Übersicht

Omenaton_2Betreff: Nebel Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
so gehts ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() 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 ; |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group