Grafikfehler Transparente Sphere

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Firstdeathmaker

Betreff: Grafikfehler Transparente Sphere

BeitragMi, Apr 05, 2006 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mal aus Spass ne kleine Spacesim. geschrieben, allerdings ist mir ein bestimmter Grafikfehler ein Dorn im Auge:

Um die Planetensphere hab ich eine eine jeweils etwas größere Sphere gelegt welche die Atmossphäre des Planeten darstellen soll. Diese wird mit Entityalpha auf 0.5 Transparenz gesetzt. Wenn man sich mit der Kamera nun etwas weiter von den Planeten entfernt, flimmert diese Atmossphäre leider ziemlich hässlich. Weis jmd wie man das wegbekommen kann?

Spacesim (6,1 mb)

Screens kann ich leider keine angeben, da nur der Hintergrund im Windows-Screenshot abgebildet wird, aber alle 3D-Objekte nicht vorhanden sind.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Dreamora

BeitragMi, Apr 05, 2006 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du 32Bit Farbtiefe eingestellt (falls du es im Fenster laufen lässt, muss der Desktop auf 32Bit sein, insofern wäre vollbild eine sinnvolle Sache, auch rein wegen der Performance)? Andernfalls kann es zu Problemen mit Alpha (da 16bit kein alpha hat sondern nur Da und nicht da) und auch dem Tiefenbuffer kommen.

16Bit setzt einige Kompatibilitätseinstellungen, die sich dann recht unschön auf solche Dinge auswirken können.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Firstdeathmaker

BeitragDo, Apr 06, 2006 7:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab auf 32-Bit laufen. Hier mal der Code (Vielleicht hilft es ja...)

BlitzBasic: [AUSKLAPPEN]
Const GFX_X = 1280
Const GFX_Y = 1024

Graphics3D GFX_X,GFX_Y,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()


;Intro
Logo = LoadImage ("Gfx\Logo.jpg")
Global BG = LoadImage("Gfx\starfield.png")
MidHandle Logo
MaskImage Logo,255,255,0
TileImage BG
DrawImage Logo,GFX_X/2,GFX_Y/2
Flip

FreeImage Logo
;Intro Ende



;Funktionen

Type TViewPoint
Field CAM
Field Pivot
Field Aktiv
End Type

Function TViewPoint_Create.TViewPoint(Aktiv)
Local VP.TViewPoint = New TViewPoint
VP\Pivot = CreatePivot()
VP\CAM = CreateCamera(VP\Pivot)

PositionEntity VP\CAM,0,0,10
PointEntity VP\CAM,VP\Pivot

VP\Aktiv = Aktiv

CameraRange VP\CAM,0.001,400
CameraClsMode VP\CAM,0,1
CameraFogMode VP\CAM,1
CameraFogRange VP\CAM,350,400
CameraZoom VP\CAM,4.5
Return VP
End Function

Function TViewPoint_Update(VP.TViewPoint)
PointEntity VP\CAM,VP\Pivot
End Function

Function TViewPoint_Steering(VP.TViewPoint)
Local x#,y#,z#

If VP\Aktiv
If KeyDown(200) x = x-1
If KeyDown(208) x = x+1
If KeyDown(203) y = y-1
If KeyDown(205) y = y+1

Local dis# = EntityDistance (VP\CAM,VP\Pivot)
If KeyDown(78) z = z+(dis/10.0)
If KeyDown(74) And dis<350 z = z-(dis/10.0)
EndIf

MoveEntity VP\CAM,0,0,z
TurnEntity VP\Pivot,x,y,0
End Function


Type TPlanet
Field Pivot
Field Sphere
Field Atmo
Field Corona

Field Bahnspeed#
Field Rotationspeed#
End Type


Function TPlanet_Create.TPlanet(BRad#,Art,Parent.TPlanet)
Local TPlanet.TPlanet = New TPlanet

TPlanet\Pivot = CreatePivot()
If Parent<>Null
EntityParent TPlanet\Pivot,Parent\Sphere,0
ScaleEntity TPlanet\Pivot,1,1,1
EndIf

TPlanet\Sphere = CreateSphere(16,TPlanet\Pivot)
EntityPickMode TPlanet\Sphere,2

EntityTexture TPlanet\Sphere,LoadTexture("Gfx\"+Art+".jpg")

If Art<>18
TPlanet\Atmo = CreateSphere(18,TPlanet\Sphere)
EntityTexture TPlanet\Atmo,LoadTexture("Gfx\earthcloudmap.jpg")
ScaleEntity TPlanet\Atmo,1.1,1.1,1.1
EntityAlpha TPlanet\Atmo,0.5
EntityBlend TPlanet\Atmo,3


Local r=Rand(200,255)
Local g=Rand(200,255)
Local b=Rand(200,255)

EntityColor TPlanet\Sphere,r,g,b
EntityColor TPlanet\Atmo,r,g,b
Else
TPlanet\Atmo = CreateSphere(18,TPlanet\Sphere)
EntityTexture TPlanet\Atmo,LoadTexture("Gfx\suncloudmap.jpg")
EntityFX TPlanet\Atmo,1
ScaleEntity TPlanet\Atmo,1.1,1.1,1.1
EntityAlpha TPlanet\Atmo,0.5
EntityBlend TPlanet\Atmo,3

TPlanet\Corona = CreateSprite(TPlanet\Sphere)
EntityTexture TPlanet\Corona,LoadTexture ("Gfx\corona.png")
EntityBlend TPlanet\Corona,3

TPlanet\Corona = CreateSprite(TPlanet\Sphere)
EntityTexture TPlanet\Corona,LoadTexture ("Gfx\corona.png")
EntityBlend TPlanet\Corona,3
ScaleSprite TPlanet\Corona,2,2
EndIf



Local bigmod# = 1.0
Select Art
Case 1,2,6,10,11,13;Earthlike
bigmod = Rnd(0.1,0.2)
TPlanet\Bahnspeed# = Rnd(0.2,0.4)
TPlanet\Rotationspeed# = Rnd(0.4,0.5)
If Rand(1) TPlanet\Rotationspeed#=-TPlanet\Rotationspeed#
Case 3,4,8,12,14,15,16;Moonlike
bigmod = Rnd(0.03,0.08)
EntityAlpha TPlanet\Atmo,0.2
TPlanet\Bahnspeed# = Rnd(0.2,0.4)
TPlanet\Rotationspeed# = Rnd(0.1,0.2)
If Rand(1) TPlanet\Rotationspeed#=-TPlanet\Rotationspeed#
Case 5,7,9,17;Jupiterlike
bigmod = Rnd(0.5,0.8)
TPlanet\Bahnspeed# = Rnd(0.05,0.085)
TPlanet\Rotationspeed# = Rnd(0.4,0.5)
If Rand(1) TPlanet\Rotationspeed#=-TPlanet\Rotationspeed#
Case 18;Sunlike
bigmod = Rnd(1,1)
EntityFX TPlanet\Sphere,1
TPlanet\Bahnspeed# = Rnd(0.02,0.035)
TPlanet\Rotationspeed# = Rnd(0.1,0.2)
If Rand(1) TPlanet\Rotationspeed#=-TPlanet\Rotationspeed#

End Select

ScaleEntity TPlanet\Sphere,bigmod,bigmod,bigmod


MoveEntity TPlanet\Sphere,BRad,0,0

TPlanet\Rotationspeed# = TPlanet\Rotationspeed-TPlanet\Bahnspeed

If Parent<>Null TPlanet\Bahnspeed# = TPlanet\Bahnspeed# - Parent\Rotationspeed#

TurnEntity TPlanet\Pivot,Rnd(-10,10),Rnd(360),Rnd(-10,10),1
TurnEntity TPlanet\Sphere,0,Rnd(360),0,1

Return TPlanet
End Function

Function TPlanet_Update(TP.TPlanet)
TurnEntity TP\Pivot,0,TP\Bahnspeed * FPS_TimeMod ,0,1
TurnEntity TP\Sphere,0,TP\Rotationspeed * FPS_TimeMod ,0,1
TurnEntity TP\Atmo,0,TP\Rotationspeed * 0.2 * FPS_TimeMod ,0,1
End Function

;Program initialisieren

Global CAM1.TViewPoint = TViewPoint_Create.TViewPoint(1)

AmbientLight(10,10,50)


Global Sun.TPlanet = TPlanet_Create(0,18,Null)
Global Light = CreateLight(Sun\Sphere)
Global Earth.TPlanet = TPlanet_Create(20,1,Sun)
Global Moon.TPlanet = TPlanet_Create(3,3,Earth)
Global Earth2.TPlanet = TPlanet_Create(28,2,Sun)
TPlanet_Create(2.5,16,Earth2)
Global Earth3.TPlanet = TPlanet_Create(34,5,Sun)
TPlanet_Create(2.5,4,Earth3)
TPlanet_Create(2,8,Earth3)
TPlanet_Create(3,12,Earth3)
TPlanet_Create(2.2,4,Earth3)
TPlanet_Create(2.4,4,Earth3)
TPlanet_Create(2.3,4,Earth3)
Global Earth4.TPlanet = TPlanet_Create(38,6,Sun)
TPlanet_Create(2.5,4,Earth4)
TPlanet_Create(2,8,Earth4)
TPlanet_Create(3,12,Earth4)
TPlanet_Create(2.2,4,Earth4)
Global Jupiter.TPlanet = TPlanet_Create(45,7,Sun)
TPlanet_Create(2.5,4,Jupiter)
TPlanet_Create(2,8,Jupiter)
TPlanet_Create(3,12,Jupiter)

Global HUD = LoadImage("Gfx\Style.PNG")
Global HUD2 = LoadImage("Gfx\Style2.PNG")
Global Cursor = LoadImage("Gfx\Cursor.PNG")

Global Middle = CreatePivot()

Global FPS_Last
Global FPS_Time
Global FPS_Lastloop
Global FPS_TimeMod#


;Hauptschleife
Repeat
FPS_Time = MilliSecs()
FPS_Lastloop = FPS_Time - FPS_Last
FPS_TimeMod = FPS_Lastloop / 1000.0
FPS_Last = FPS_Time



Cls
TileImage BG,0,0


MH = MouseHit(1)
MX = MouseX()
MY = MouseY()

If KeyHit(28) EntityParent CAM1\Pivot,Middle

obj = CameraPick(CAM1\CAM,MX,MY)

For TP.TPlanet = Each TPlanet
TPlanet_Update(TP)
If TP\Sphere = obj And MH
EntityParent CAM1\Pivot,TP\Sphere
PositionEntity CAM1\Pivot,0,0,0,0
EndIf
Next

TViewPoint_Update(CAM1)

TViewPoint_Steering(CAM1)

UpdateWorld()
RenderWorld()
DrawImage HUD2,0,0
DrawImage HUD,1280-ImageWidth(HUD),1024-ImageHeight(HUD)

DrawImage Cursor,MX,MY

Flip
Until KeyHit(1)
End
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

TheProgrammer

BeitragDo, Apr 06, 2006 8:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir den Code jetzt nicht genau angeschaut, aber probiere mal, die Kugel etwas größer zu skalieren. Dieses Flimmern kommt dadurch zustande, da die Oberflächen der Kugeln sehr nahe beieinander liegen. Wenn man sich weiter entfernt, weiß das Programm nicht mehr, welche Kugel als erstes zu zeichnen ist. Das Problem tritt übrigens auch ohne Transparenz auf.
aktuelles Projekt: The last day of human being
 

Dreamora

BeitragDo, Apr 06, 2006 10:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Jepp das dürfte das Problem sein, speziell da die Kugeln nicht oberflächen identisch sind da mit anderen Parametern erstellt.
Kugeln mit Grösse 1 / 1.1 dürften ohnehin ein wenig klein sein falls du effektiv mal mit irgend etwas durch den weltraum fliegen willst und am planeten vorbei fliegen möchtest.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Firstdeathmaker

BeitragDo, Apr 06, 2006 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe die äußere Kugel jetzt mal genau mit der gleichern Polygonzahl erstellt und die Größe auf 250% der inneren eingestellt. Durch die gleiche Polygonzahl verringert sich das Flakern ein kleines bisschen, durch die Größenveränderung zögere ich das Problem nur hinaus, denn beim rauszoomen tritt es doch irgendwann auf. Zudem sieht die größere Atmossphäre ab einem bestimmten Grad sehr unrealistisch aus.

"Kugeln mit Grösse 1 / 1.1 dürften ohnehin ein wenig klein sein falls du effektiv mal mit irgend etwas durch den weltraum fliegen willst und am planeten vorbei fliegen möchtest. "

Wieso? Meinst du das mit dem Hintergrund dass ich nen Trade/Fight Shooter machen möchte? Dafür würde ich natürlich andere Maßstäbe wählen, ist ja klar. Aber hier geht es mir eher darum, die Planeten wirklich sehr klein darzustellen, da das ganze als Testprojekt für ein größeres dient, in dem es mehr um stategische Elemente in einem großen Universum geht.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group