Plane anzeigefehler *ungelöst*

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

BlackError

Betreff: Plane anzeigefehler *ungelöst*

BeitragMo, Aug 25, 2008 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Zusammen,

Ich habe ein Problem mit der darstellung einer einfachen plane auf einem 3d Terrain.
Betrachtet man die eingefärbte plane von weitem erkennt man das Problem.
https://www.blitzforum.de/upload/file.php?id=3333

Aus der Nähe betrachtet, wird die plane plötzlich richtig dargestellt: https://www.blitzforum.de/upload/file.php?id=3334

Woran könnte dies liegen. Meine Vermutung liegt nahe, dass es an der Function "entityalpha" liegt. Ist entityalpha auf 1 gesetzt, wird es ganz normal angezeigt, alle werte (selbst 0.999) unter 1 werden falsch angezeigt.

Ps. Da ich die plane erstnoch nur als platzhalter für eine schöne cubemap verwende, suche ich derzeit noch nach einer Lösung für das Gitterobjekt der cubemap. Wie viele triangles sind für eine schöne cubemap angebracht, dass alle objekte (Berge...) richtig gespiegelt werden?

Hoffe ihr könnt mir helfen

Gruß BlackError
  • Zuletzt bearbeitet von BlackError am Mi, Aug 27, 2008 22:02, insgesamt einmal bearbeitet

the FR3AK

BeitragMo, Aug 25, 2008 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Wie viele triangles sind für eine schöne cubemap angebracht, dass alle objekte (Berge...) richtig gespiegelt werden


Das hat nichts mit Triangles zu tun sondern mit der Textur größe auf die die Cubemap gerendert wird Wink
Du kannst fuer eine Cubemap also auch eine Ganz normale Fläche nehmen mit 2Triangles das sollte reichen...

Tobchen

BeitragDi, Aug 26, 2008 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie hast du denn CameraRange eingestellt? Sowas hier wäre mir als (z.B.) "CameraRange Kamera, 0.001, 1000"-Fehler neu, aber wenn man de ersten Wert zu niedrig macht, flackert das bei Triangles, die nur wenige Einheiten voneinander entfernt sind.
Tobchen - die Welt von Tobi!
 

Dreamora

BeitragDi, Aug 26, 2008 1:00
Antworten mit Zitat
Benutzer-Profile anzeigen
near und far range sollten MAXIMAL durch den faktor 10000 getrennt sein

also 1,10000 oder 0.1, 1000 oder 0.01, 100
deine weitenangaben werden zu zbuffer problemen führen, du kannst nicht 0.001, 1000 machen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Mr.Keks

BeitragDi, Aug 26, 2008 3:48
Antworten mit Zitat
Benutzer-Profile anzeigen
es liegt tatsächlich am entityalpha. transparente objekte können nicht über den zbuffer sortiert werden. wenn sowohl das matschterrain als auch die plane mit alpha gezeichnet werden, erscheint einfach das von beiden vorne, was zuletzt gerendert wird. die berechnungsreihenfolge in b3d ändert sich gelegentlich, wenn man die kamera bewegt - darum das plötzliche nach vorne ploppen der plane.
MrKeks.net
 

Dreamora

BeitragDi, Aug 26, 2008 8:07
Antworten mit Zitat
Benutzer-Profile anzeigen
das problem hat man aber primär wenn man sich wie gott über die bekannten grenzen hinweg setzt.
heisst: niemals alpha < 0.5 verwenden, dann gehts.

Alles < 0.5 einfach auf 0 setzen und die alpha sort fehler verschwinden normalerweise, zumindest bis zu dem punkt wo man durch die cam range settings den gesamten zBuffer lahmlegt

Liegt daran, dass der alpha test gegen 0.5 gemacht wird (-> darauf basiert masking), heisst das alles mit alpha < 0.5 für die grafikkarte garnimmer da ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BlackError

BeitragDi, Aug 26, 2008 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal danke für eure Antworten.

Allerdings erkenne ich immernoch nicht eine Lösung des Problems.

Hier mal die relevanten Code-Ausschnitte:

CameraRange Cam, 1, 10^7
See = CreatePlane()
EntityAlpha See, 0.8

@Dreamora: Mein entityalpha ist über 0.5 und es scheint trotzdem nicht zu funktionieren.

Hat jemand eine Idee, wie ich das Problem beheben kann, ohne dass ich auf entityalpha verzichten muss. Denn eine nichtdurchsichtige Wasseroberfläche ist auch nicht das wahre Smile

Gruß BlackError

Xeres

Moderator

BeitragDi, Aug 26, 2008 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
near und far range sollten MAXIMAL durch den faktor 10000 getrennt sein

...du bist bei 10 Mio. ...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

BlackError

BeitragDi, Aug 26, 2008 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich camaerarange Cam, 1,10000 anwende, hat das die einzige Wirkung, dass ich meinen Himmel nicht mehr sehe. Doch an dem Wasserproblem ändert sich leider auch nichts

Xeres

Moderator

BeitragDi, Aug 26, 2008 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ab welcher entfernung Plane-Camera gibt es denn den Fehler? U.u. kann BB mit so großen zahlen nicht mehr ordentlich umgehen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

BlackError

BeitragDi, Aug 26, 2008 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Also sobald der Abstand zwischen Camera und plane > 200 ist, wird es falsch dargestellt.
Oder hast du es jetzt auf die camerarange bezogen? selbst bei camerarange 1,1000 tritt der Fehler auf.
 

BlackError

BeitragDi, Aug 26, 2008 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Also sobald der Abstand zwischen Camera und plane > 200 ist, wird es falsch dargestellt.
Oder hast du es jetzt auf die camerarange bezogen? selbst bei camerarange 1,1000 tritt der Fehler auf.

FireballFlame

BeitragDi, Aug 26, 2008 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
BlackError hat Folgendes geschrieben:
Wenn ich camaerarange Cam, 1,10000 anwende, hat das die einzige Wirkung, dass ich meinen Himmel nicht mehr sehe.

Wieso ist denn dein Himmel so riesengroß? Normalerweise macht man den sehr viel kleiner und setzt ihn mit EntityOrder in den Hintergrund.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

Dreamora

BeitragMi, Aug 27, 2008 8:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur 1 Objekt reicht für den Fehler nicht.
Was sonst mit Alpha ist noch da?

Terrain mit VertexAlpha Splatting?
Gras?
...

Irgendwas hebelt es aus.


Und jo mit der cam range wirds niemals gehen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BlackError

BeitragMi, Aug 27, 2008 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn ich den Himmel so skaliere, dass er gerade um mein komplettes Terrain pass, sieht das ganze viel zu flach und kleine aus!

Und wenn ich den kompletten himmel himmel rausnehme und die camerarange auf 1,1000 stelle (was durchaus noch drinsein sollte), behebt es das Problem auch nicht.

Zu meinem Terrain. Ich hab hierfür das BB Programm FLE verwendet. Hiermit konnte ich mein Terrain (mit Heightmap geladen) mit den entspechenden Texturen "bepinseln". Wenn ich nun speichere, erstellt FLE 2 .B3D datein. Die 1. Datei beinhaltet nur die Untergrundtextur (Hier Gras). Die 2. B3D Datei beinhaltet alle restlichen Texturen (Sand,Stein...). Ich lade also beide Terrains in Blitz3D und leg die plane an die richtige Position.

Was mir nun aufgefallen ist, ist dass wenn ich das Terrain mit den Sand,Stein...-Texturen Hide, ist das Wasserproblem behoben. Es muss also an der 2. .B3D datei liegen!

Ausserdem habe ich bemerkt, dass das Problem nur dann auftritt, wenn die plane unter 0 auf der y-Achse positioniert wird. Jedoch habe ich bereits versucht, die plane auf der Position 0,0,0 zu lassen, dafür einfach das Terrain nach oben zu verschieben, was allerdings ebenso zum gleichen Fehler führt.

Ich hab echt keine Ahnung woran das alles liegen kann!

EDIT:

Hiermal die Funktion aus dem Programm FLE, welche die 2. .B3D datei speichert (Stein,Sand...)

Code: [AUSKLAPPEN]

Function OptimizeLandscape2()
 ; this function creates a mesh with all the remaining layers and ignores all the Tris that are
 ; fully invisible
 EntityParent layer(1),0
 EntityParent layer(2),0
 EntityParent layer(3),0
 EntityParent layer(4),0
 EntityParent layer(5),0

 ; build the optimized mesh
 landscape2=CreateMesh()
 For ch=numlayers To 2 Step -1
  child=layer(ch)
  For su=1 To CountSurfaces(child)
   surf=GetSurface(child,su)

   brush=GetSurfaceBrush(surf)
   surf2=CreateSurface(landscape2,brush)
   For tri=0 To CountTriangles(surf)-1

    v_x0#=VertexX(surf,TriangleVertex(surf,tri,0))
    v_x1#=VertexX(surf,TriangleVertex(surf,tri,1))
    v_x2#=VertexX(surf,TriangleVertex(surf,tri,2))

    v_y0#=VertexY(surf,TriangleVertex(surf,tri,0))
    v_y1#=VertexY(surf,TriangleVertex(surf,tri,1))
    v_y2#=VertexY(surf,TriangleVertex(surf,tri,2))

    v_z0#=VertexZ(surf,TriangleVertex(surf,tri,0))
    v_z1#=VertexZ(surf,TriangleVertex(surf,tri,1))
    v_z2#=VertexZ(surf,TriangleVertex(surf,tri,2))

    v_u0#=VertexU(surf,TriangleVertex(surf,tri,0))
    v_u1#=VertexU(surf,TriangleVertex(surf,tri,1))
    v_u2#=VertexU(surf,TriangleVertex(surf,tri,2))

    v_v0#=VertexV(surf,TriangleVertex(surf,tri,0))
    v_v1#=VertexV(surf,TriangleVertex(surf,tri,1))
    v_v2#=VertexV(surf,TriangleVertex(surf,tri,2))

    v_a0#=VertexAlpha(surf,TriangleVertex(surf,tri,0))
    v_a1#=VertexAlpha(surf,TriangleVertex(surf,tri,1))
    v_a2#=VertexAlpha(surf,TriangleVertex(surf,tri,2))


    If (v_a0<>0.0) Or (v_a1<>0.0) Or (v_a2<>0.0)
     v0=AddVertex(surf2,v_x0,v_y0,v_z0,v_u0,v_v0)
     VertexColor surf2, v0,255,255,255,v_a0
     v1=AddVertex(surf2,v_x1,v_y1,v_z1,v_u1,v_v1)
     VertexColor surf2, v1,255,255,255,v_a1
     v2=AddVertex(surf2,v_x2,v_y2,v_z2,v_u2,v_v2)
     VertexColor surf2, v2,255,255,255,v_a2
     AddTriangle(surf2,v0,v1,v2)
    EndIf
   Next
  Next
 Next

 Print "welding..."
 weld(landscape2)

 ScaleMesh landscape2,lscale,lscale,lscale
 UpdateNormals landscape2
 EntityFX landscape2,32
 Print "oki"
 EntityParent layer(1),layer(2)
 EntityParent layer(2),layer(3)
 EntityParent layer(3),layer(4)
 EntityParent layer(4),layer(5)
 EntityParent layer(5),layer(6)

 Return landscape2
End Function



könnte dieses Komentar:

; this function creates a mesh with all the remaining layers and ignores all the Tris that are
; fully invisible

ausschlaggebend sein?


Gruß BlackError

Der_Schläfer

BeitragMi, Aug 27, 2008 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde dir empfehlen, den Himmel nicht um die Map sondern um die cam zu legen, und zwar so:

Code: [AUSKLAPPEN]

skybox=load... ;das ding kann auch nur 2 einheiten gross sein
entityorder skybox,-1 ;damit sie immer hinter allem anderen erscheint

;und in der Hauptschleife dann die SkyBox immer auf die Koordinaten der Kamera setzten

positionentity skybox,entityx(cam),entity(cam),entityz(cam)



auf diese weise bewegt sich die skybox immer mit der kamera mit und du kannst die camerarange kleiner als die diagonale des maps machen ohne dass man löcher im himmel sieht

Mr.Keks

BeitragMi, Aug 27, 2008 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
dreamora: das mit alpha 0.5 ist kompletter schwachsinn, wenn ich mich nicht seeeehr stark irre. spiel es mal im kopf durch: falls alpha 0.5 schon als undurchsichtig gelten würde, was ja nicht wirklich ist, dann würden eigentlich dahinter liegende und sichtbare objekte wegen des zbuffertests nicht gezeichnet... die ganzen querelen mit dem zbuffer würden noch schlimmer. dass blitz bei entities mit vertexalpha komplett das zeichnen in den zbuffer deaktiviert, kannst du leicht überprüfen: setze einfach mal entityfx eines beliebigen entities auf vertexalpha....
MrKeks.net
 

BlackError

BeitragMi, Aug 27, 2008 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat niemand eine Idee, wie ich das problem beheben könnte? Sad Sad

Hoffe auf weitere Vorschläge.

Gruß BackError

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group