Terrain bemalen

Posted By: hopfel

Terrain bemalen - 05/16/10 10:50

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:

Code:
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
Posted By: Pappenheimer

Re: Terrain bemalen - 05/16/10 18:31

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...
Posted By: hopfel

Re: Terrain bemalen - 05/16/10 19:01

Erst einmal danke für deine Antwort. laugh
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 wink ) glaube ich schon gelöst, wenns nicht funktioniert, komm ich später nochmals drauf zurück. ^-^
Posted By: wdlmaster

Re: Terrain bemalen - 05/16/10 19:36

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:

Code:
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)...
Posted By: Pappenheimer

Re: Terrain bemalen - 05/16/10 19:41

Ich habe grad in den GStudio-Ordnern ein wenig herumgesucht und bin etwas fassungslos, dass es dort kein Beispiel eines Terrains der erwähnten Art gibt.
Hier ein Link zu einer Seite, die es so gut erklärt wie es im Manual vielleicht mal erklärt werden sollte:
http://www.darkmountain.de/multiterr_shader.htm
Posted By: hopfel

Re: Terrain bemalen - 05/16/10 20:40

Beides funktioniert jetzt bestens, vielen Dank! :thumbsup:
© 2024 lite-C Forums