ich bin ganz neu hier, und möchte mich erstmal bei der Community bedanken,
Eure Tutorials sind einfach wunderbar, ich hab extrem viel Wissen da raus gezogen.
Vielen Dank and keep up the good work!
Nun aber zu meinem Problem:
Ich rendere ein Terrain (Heightfield) und verwende dabei
-> eine Grundtextur, welche ich über das komplette Feld lege, ohne Repeat, welche vorher von der CPU noch mit einer Lightmap angereichert wird
-> und dann ziehe ich in 5x5 Patterns noch ein paar Detailtexturen darüber
Meine Anforderungen sind: das Feld muss editierbar sein, das heisst, ich möchte die Detailtexturen überall gemischt haben können,
also nicht einfach nur nach Höhe.
Hierfür möchte ich nun weiche Übergänge zwischen den Texturen erzeugen, allerdings möchte ich dafür keinen Shader verwenden. Ein Shader sollte vielleicht später mal optional sein, aber erstmal wollte ich das ohne Shader lösen.
Blah Blah Blah, naja jedenfalls mache ich das im Moment so, das ich die Grundtextur sowie eine Detailtextur per Multitexturing rendere.
Danach wollte ich in einem zweiten Pass dann die Übergänge bzw. die anderen Texturen per Blending realisieren.
Also schalte ich für den 2. Pass die Texture Unit 0 ein und aktiviere Blending.
Aber irgendwie scheint das mit dem Blending nicht zu funktionieren. In den Tutorials wird ein Polygon einfach zweimal gezeichnet, mit genau den gleichen Koordinaten. Bei mir sehe ich vom Blending überhaupt nur dann etwas, wenn ich das zu Blendende Polygon tatsächlich etwas höher zeichne (also z.B. z+0.005). Woran liegt das? Schalte ich den Tiefenpuffer ab, funktionierts. Ich verstehe nur nicht, es sollte doch eigentlich auch funktionieren indem ich ein Polygon nochmal "draufklatsche", oder? Hängt das vielleicht mit dem Multitexturing zusammen? Oder hab ich da jetzt nen ganz blöden Denkfehler?
Deine Beobachtungen sind absolut korrekt. Stell mal den Depthtestmode auf GL_LEQUAL. Dann wird auch überzeichnet, wenn das aktuelle Fragment den gleichen Tiefenwert hat wie das alte. Das könnte dabei helfen. Ansonsten weiß ich auch nicht weiter. Hatte nämlich auch mal das gleiche Problem und habe es bis heute nicht weiter verfolgt
BTW: Willkommen im Forum
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Deine Beobachtungen sind absolut korrekt. Stell mal den Depthtestmode auf GL_LEQUAL. Dann wird auch überzeichnet, wenn das aktuelle Fragment den gleichen Tiefenwert hat wie das alte. Das könnte dabei helfen. Ansonsten weiß ich auch nicht weiter. Hatte nämlich auch mal das gleiche Problem und habe es bis heute nicht weiter verfolgt
BTW: Willkommen im Forum
Das hat geholfen! Danke!
Damit bin ich dann schon beim nächsten Problem
Verstehe ich das richtig, das man während Multitexturing auch noch glBlend anwenden kann? Mein Multitexturing-Pass läuft nähmlich ohne aktiviertes glBlend durch. Wenn ich jetzt später Blende, macht er das korrekt (ich meine ich bekomme die von mir gewünschten Verläufe), aber er moduliert den Farbwert um einiges heller als das was ich beim Multitexturing Pass gezeichnet habe.
wird das terrain statisch ? dann würde ich eher die textur komplett vorberechnen(in berücksichtigung der heightmap) und nichts blenden...
Jein
Also man soll die Hoehen während des Programms schon verändern können. Das kann man jetzt schon. Aber das braucht nicht mit Echtzeitansprüchen zu laufen.
Es reicht vollkommen, wenn er sich da mal ne halbe Sekunde Zeit lässt, nachdem man mit der Maus ein Berg hochgezogen hat. Ich habe vor das so zu machen, das wenn man etwas an der Landschaft verändert, man die Änderung erstmal als "Preview" mit nem Drahtgitter sieht. Wenn es ok ist, dann quittiert man das und er baut die Heightmap neu auf.
Da ich die Endboxen meines Octree's als Displaylisten speichere, bau ich den da jedesmal wieder neu auf. Aber auch das geht apzektabel schnell.
Die meiste Zeit wird man während des Programmlaufs aber mit einer statischen Heightmap verbringen.
Zuletzt geändert von Mados am Sa Feb 11, 2006 23:07, insgesamt 1-mal geändert.
wird das terrain statisch ? dann würde ich eher die textur komplett vorberechnen(in berücksichtigung der heightmap) und nichts blenden...
Davon abgesehen ist mir nicht ganz klar wie du das meinst. Ich meine ich rendere ja die Detailtexturen auf 5x5 Quads (aus Triangle-strips). Ich bräuchte dann doch eine große Textur die diese Auflösung bietet? Oder sehe ich das jetzt komplett falsch?
So mittlerweile läuft es nicht schlecht. Ich hatte lediglich vergessen beide Texture Units auf Blending zu schalten.
Jetzt kann der Code
-> beliebig viele Texturen verwenden
-> durch einfaches Ändern des "Groundtypes" an einem Heightpoint kann man jederzeit die dortige Base-Texture ändern
-> das Ganze bei akzeptablen Framerates durchziehen, weil nur dort nachgezeichnet sind, wo Verläufe nötig sind, und dann
auch nur so oft nachgezeichnet wird, wie es dort Mischtexturen gibt. D.h. in 90% der Fälle muss er nur einmal drüber,
im schlechtesten (und seltensten) Fall so oft, wie es Texturen gibt.
-> und bei all dem auf neumodische Shader verzichten
Wenn der User bzw. eine Sanddüne in eien Grasfläche reinmalt, werden nur die Aussenseiten nachgezeichnet, in einem 2. Pass.
Wunderbar!
Vielen Dank für Eure Hilfe, ohne die hätt ichs erstmal nicht soweit geschafft.
Ich hätte gern mal einen Screenshot gepostet, hab aber keinen Upload Platz, naja egal.
Kannst doch hier auch was uploaden Unten einfach auf Attachment hinzufügen klicken ^^
ok, ich probiers mal
meine Skysphere is noch im A*sch, also da drüber mal hinwegsehen.
In diesem Screen sind per randomizer 4 Texturen (Gras, Sand, Schnee, Fels) gesetzt, bis zu einer gewissen Grenze, wo dann nur noch Gras ist.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du hast den Klassischen Berg quasi auf den Kopf gestellt, oder? Beim Alpenpanorama war das Gras immer unten, und der Fels und Schnee immer oben... Aber vielleicht bin ich einfach zu konservativ...
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Du hast den Klassischen Berg quasi auf den Kopf gestellt, oder? Beim Alpenpanorama war das Gras immer unten, und der Fels und Schnee immer oben... Aber vielleicht bin ich einfach zu konservativ...
lol, naja der screen soll ja nur die Möglichkeiten des Codes zeigen
meine Skysphere is noch im A*sch, also da drüber mal hinwegsehen.
Du verwendest Pathfinding, um deine Skybox zu generieren? Interessant. Ich hab mich mit A* noch nie wirklich auseinandergesetzt, aber ich wäre interessiert, das Ergebnis von einer Implementation dieses Pathfindings als Skybox zu sehen
€dit:
Was mich verwirrt ist dein Nick. MadOs klingt nach krankem Betriebsystem. Wieso hast du dann nen Screenshot geposted mit einer Linux-Anwendung drauf? ^^
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
meine Skysphere is noch im A*sch, also da drüber mal hinwegsehen.
Du verwendest Pathfinding, um deine Skybox zu generieren? Interessant. Ich hab mich mit A* noch nie wirklich auseinandergesetzt, aber ich wäre interessiert, das Ergebnis von einer Implementation dieses Pathfindings als Skybox zu sehen
€dit: Was mich verwirrt ist dein Nick. MadOs klingt nach krankem Betriebsystem. Wieso hast du dann nen Screenshot geposted mit einer Linux-Anwendung drauf? ^^
Hat nix mit dem Betriebssystem zu tun. Nix besseres is mir halt grad net einfallen
Registriert: Do Mär 06, 2003 15:27 Beiträge: 281 Wohnort: Bochum
Mados hat geschrieben:
Davon abgesehen ist mir nicht ganz klar wie du das meinst. Ich meine ich rendere ja die Detailtexturen auf 5x5 Quads (aus Triangle-strips). Ich bräuchte dann doch eine große Textur die diese Auflösung bietet? Oder sehe ich das jetzt komplett falsch?
Nunja eigentlich sind Detailtexturen Greyscale-tex die halt durch blending dem terrain detail hinzuzufügen sollen, da man um die eigentliche farbgebung des terrains zu erreichen im einfachsten falle eine textur (meinetwegen gras) drüber zeiht. dabei wird jene ja sehr gestreckt weshalb eben detail verloren geht.
nur eine textur zur färbung zu nehmen nimmt einem ja die möglichkeit der höhe entsprechend verschiedene texturen zu verwenden, deshalb würde ich für meinetwegen 2x2quads des terrains(bestehend aus zum beispiel 10x10quads) eine textur erstellen, die du procedural aus den color-tex zusammen mixt abhängig von dem teil der heigtmap an der stelle... hoffe das war nachvollziehbar.
was ich meinte war: bei der methode müsste jedesmal wenn sich die heightmap ändert die texur an der stelle neu berechnet werden.
Davon abgesehen ist mir nicht ganz klar wie du das meinst. Ich meine ich rendere ja die Detailtexturen auf 5x5 Quads (aus Triangle-strips). Ich bräuchte dann doch eine große Textur die diese Auflösung bietet? Oder sehe ich das jetzt komplett falsch?
Nunja eigentlich sind Detailtexturen Greyscale-tex die halt durch blending dem terrain detail hinzuzufügen sollen, da man um die eigentliche farbgebung des terrains zu erreichen im einfachsten falle eine textur (meinetwegen gras) drüber zeiht. dabei wird jene ja sehr gestreckt weshalb eben detail verloren geht. nur eine textur zur färbung zu nehmen nimmt einem ja die möglichkeit der höhe entsprechend verschiedene texturen zu verwenden, deshalb würde ich für meinetwegen 2x2quads des terrains(bestehend aus zum beispiel 10x10quads) eine textur erstellen, die du procedural aus den color-tex zusammen mixt abhängig von dem teil der heigtmap an der stelle... hoffe das war nachvollziehbar. was ich meinte war: bei der methode müsste jedesmal wenn sich die heightmap ändert die texur an der stelle neu berechnet werden.
Ja, so habe ich das am Anfang auch gemacht. Aber schnell wurde mir klar, das ich keine Prozedurale Textur welche mit der Hoehe arbeitet brauche. Der Anwendungsfall ist der, das man egal wohin, auch wenn es geologisch keinen Sinn macht, Geländetypen frei platzieren kann. Tatsächlich ist es so, das meine Detailtexturen die wesentliche Farbinformation enthalten. Es wird noch eine große Textur benutzt, um global übers Gelände ein wenig Varianz rein zu bringen, welche grayscaled ist.
So rendere ich im Moment:
Erstmal interpoliert die CPU die
Varianztextur (grayscale, gestreckt) und die
Lightmap (grayscale, gestreckt),
danach rendere ich darauf die
Detailtexturen multitextured.
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.