3 registered members (AndrewAMD, TedMar, Ayumi),
1,374
guests, and 5
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Terrain bemalen
#323643
05/16/10 10:50
05/16/10 10:50
|
Joined: Dec 2008
Posts: 605 47°19'02.40" N 8°32'54.67" E...
hopfel
OP
User
|
OP
User
Joined: Dec 2008
Posts: 605
47°19'02.40" N 8°32'54.67" E...
|
Hi, ich versuche einen kleinen Terraineditor zusammenzubasteln, mit dem man per Pinsel aufs Terrain zeichnen kann. Ich hab schon nen Pinsel in Form eines Kreises hingekriegt, den ich mit der Maus übers Terrain bewegen kann, und kann schon drauf Zeichnen. Folgenden Code habe ich bis jetzt:
function boden() //zum Updaten des Bitmap-pointers fürs Terrain
{
ent_morphskin(my,boden_str); //Grundtextur auf Terrain setzen
while(1)
{
boden_bmp=bmap_for_entity(my,0);
wait(-5);
}
}
BMAP* gras ="gras.bmp"; //grüne Bitmap
function draw()
{
while(1)
{
if(mouse_left)
{
bmap_blit(boden_bmp,gras, vector(drawpos.x,drawpos.y,0)); //drawpos = Position des Pinsels
}
wait(1);}
}
(Das sind die beiden Funktionen, die das Malen betreffen, es fehlen natürlich noch Vector-deklarationen etc.) Dazu habe ich 2 Probleme festgestellt: 1. Wenn ich aufs Terrain gemalt habe und die Kamera wegbewege, blendet das gezeichnete langsam aus bzw. wird durchsichtig und die vorherige Oberfläche kommt wieder zum Vorschein. Das stört ziemlich, wenn man das Terrain von weit oben bemalen will. 2. Mit einer einfarbigen Quellbitmap geht das Malen noch ganz gut, aber wenn ich jetzt mit einer Textur zeichnen will, überlappen sich die einzelnen Texturteile, und das sieht ziemlich unschön aus. Die Bitmaps müssten sich irgendwie aneinanderketten lassen. Hoffe, jemand kann mir helfen. Lg, Hopfel
Hilf mir, dir zu helfen!
|
|
|
Re: Terrain bemalen
[Re: hopfel]
#323699
05/16/10 18:31
05/16/10 18:31
|
Joined: Sep 2003
Posts: 5,900 Bielefeld, Germany
Pappenheimer
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
|
zu 1. das könnte am Mipmapping liegen. Mipmapping heißt ja, dass die eigentliche Textur durch kleiner auflösende Kopien von ihr angezeigt werden, wenn die Kamera weiter von ihr entfernt ist oder von einem schrägen Winkel auf die Fläche schaut. Ich stelle mir vor, dass die Mipmaps noch die alten von der ursprünglichen Textur sind. Entweder müsstest Du sie aktualisdieren ( http://www.conitec.net/beta/abmap_to_mipmap.htm) oder die Mipmaps für das Malen "abschalten", z.B. indem Du mip_levels auf 1 setzt ( http://www.conitec.net/beta/mip_levels.htm). zu 2. Ich würde keine Textur direkt draufmalen, damit bleibst Du mit der Auflösungsqualität immer weit hinter dem zurück, was Du mit einem Terrainmaterial erreichen kannst, dass z.B. 3 verschiedene Texturen über eine Bitmap auf das Terrain verteil. In diesem Fall sollte Dein Pinsle diese spezielle Bitmap bemalen, die an den Stellen dann die der Farbe zugehörige Textur zeigt. Dazu muss eventuell der Shader jeweils aktualisiert werden, vielleicht macht er es aber auch von selber...
|
|
|
Re: Terrain bemalen
[Re: Pappenheimer]
#323701
05/16/10 19:01
05/16/10 19:01
|
Joined: Dec 2008
Posts: 605 47°19'02.40" N 8°32'54.67" E...
hopfel
OP
User
|
OP
User
Joined: Dec 2008
Posts: 605
47°19'02.40" N 8°32'54.67" E...
|
Erst einmal danke für deine Antwort. Zu 1. Ich habe mal versucht, mip_levels auf 1 zu setzen, aber dann kommt, wenn ich das Programm teste, die Fehlermeldung: "Can't create DirectX texture -Name meines Terrains-" Wenn ich dann die nächsten 6 Fenster per 'OK' weggeklickt habe, funktioniert alles wie es sollte. Wenn ich sie per abmap_to_mipmap aktualisiere, gehts zwar ohne Fehlermeldung, aber es stockt wie gewaltig. 'o.0 Zu 2. Ich habe so gut wie kein Wort davon verstanden. >.< Habe aber das Problem (zumindest im Kopf ) glaube ich schon gelöst, wenns nicht funktioniert, komm ich später nochmals drauf zurück. ^-^
Hilf mir, dir zu helfen!
|
|
|
Re: Terrain bemalen
[Re: hopfel]
#323709
05/16/10 19:36
05/16/10 19:36
|
Joined: Apr 2010
Posts: 172
wdlmaster
Member
|
Member
Joined: Apr 2010
Posts: 172
|
zu 1: bmap_to_mipmap ist schon die richtige Lösung. Allerdings ist diese Anweisung sehr langsam. Ich würde sie immer nur einmal aufrufen, und zwar immer, wenn die Maustaste nach dem Bemalen losgelassen wird:
char MouseDown = 0;
while (1) {
...
...
if (!MouseDown && mouse_left) MouseDown = 1;
if (MouseDown && !mouse_left) {MouseDown = 0;bmap_to_mipmap (bmap_for_entity(my,0));}
...
...
wait(1);}
zu 2: Da ist Pappenheimer's Idee auch die richtige Entscheidung. Das bedeutet nichts weiter, als dass du auf deine Textur nur die 3 Grundfarben (+ Alpha) malst, und der shader dann den Rest übernimmt --> nämlich an Stelle der Farben verschiedene Texturen anzuzeigen. So ein shader ist z.B. im "code" Ordner von A7 dabei (Terraintex3.fx)...
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|