Plane anzeigefehler *ungelöst*
Übersicht

BlackErrorBetreff: Plane anzeigefehler *ungelöst* |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Du kannst fuer eine Cubemap also auch eine Ganz normale Fläche nehmen mit 2Triangles das sollte reichen... |
||
![]() |
Tobchen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() Gruß BlackError |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
BlackError |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
BlackError |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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![]() |
||
MrKeks.net |
BlackError |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hat niemand eine Idee, wie ich das problem beheben könnte? ![]() ![]() Hoffe auf weitere Vorschläge. Gruß BackError |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group