Terrain deformieren

Posted By: CocaCola

Terrain deformieren - 09/08/17 19:37

Hallo,

Ich habe in meinem Project, 25x eine terrain plane geladen.
im Handbuch habe ich diese Funktion gefunden:
Code:
// use a gun to produce mole-hills in terrain
function mole_gun()
{
  while (1)
  {
// calculate the target vector
    VECTOR trace_target;
    vec_set(trace_target,vector(5000,0,0)); // firing range 5000 quants
    vec_rotate(trace_target, camera.pan);
    vec_add(trace_target, camera.x);
    
// display a red spot at the target position
    if (c_trace(camera.x,trace_target, IGNORE_PASSABLE | USE_POLYGON| SCAN_TEXTURE) > 0) // hit something?
      draw_point3d(hit.x,vector(50,50,255),100,3);

    if (key_ctrl && HIT_TARGET && you && ent_type(you) == 4) // fire onto terrain
    {
// create a mole-hill by elevating the closest terrain vertex       var vertex_num = ent_nextvertex(you,hit.x); 
     CONTACT* contact = ent_getvertex(you,NULL,vertex_num); 
     c.z += 10;  // increase the vertex height
      c.v = NULL; // c.x,y,z was changed, instead of c.v      ent_setvertex(you,c,vertex_num);    // update the mesh
      wait(-0.5); // reload
    }

    wait(1); 
  }
}



nicht alle vertex reagieren, manchmal verädert sich ein vertext was ich nicht anvisiert habe.

und manchmal wird ein anderes terrain verändert.
manchmal verändert sich der vertex mehr als 10 steps in der z achse.

ich habe hier auch mal mein Project hochgeladen
[url=www.underhut.de/Prototypes/Project.zip]www.underhut.de/Prototypes/Project.zip[/url]
Posted By: tagimbul

Re: Terrain deformieren - 09/09/17 09:56

ich sehe das du ein terrain mehlmals nutzt.
im handbuch unter ent_getvertex:

Quote:
Das Modifizieren eines Mesh einer bestimmten Entity betrifft sämtliche Entities, die dasselbe Mesh verwenden. Um dies zu verhindern, benutzen Sie ent_clone.


ich denke das ein anderes terrain, das jedoch das selbe mdl file ist, verändert wird liegt daran.

beachte auch das bei CONTACT z und y vertauscht sind:

Quote:
c.v.y += 5.0; // raise the vertex (y is the height in DX coorcinates)


also ich würde zuerst einmal versuchen ein funktionierenden prototypen zu machen mit nur einem mesh in einem test level. ohne dein player model
wenn das reibungslos funktioniert:
2 terrains einbinden mit der verwendung von ent_clone

bedenke auch:
da du mehrere terrains nutzen willst wird es bei der überschneidung der einzelnen chunks probleme geben da trace nur ein objekt avisiert.
damit würde es dann, wen du an einer überlappung eine deformation kommt, nur ein terrain anheben oder senken was wiederum löcher in der map verursachen wird.

ich würde das ganz anders aufgleisen.
nutze einen globalen vector und vergleiche ob sich die vertexe sich in der range dieses globalen vectors befinden.
auf diese weise kannst du mehrere terrains, die mit einer while schleife ausgestatet sind, deformieren.

sofern du natürlich eine konstante nutzen willst um das terrain zu erhöhen.

wenn du dann jedoch hüllkurven nutzen willst damit man bzw. eine kugelfürmige deformation machen kann....
bzw. man nutzt den globalen vector und die vertex position um die distanz zu berechnen und nutzt diese dann als factor für die einwirklungsstärke was einen hüllkurven ähnlichen effekt erzeugt,
dann müstest du auch noch ein chunk verwaltungs system machen da es dabei zu ungleichförmigen erhöhungen und vertiefungen bei überschneidung bei den terrains kommen könnte. also quasi müsste man nach der deformierungs funktion die vertexe die sich am rand 2er chunks befinden subtrahiert voneinander in einen temporären vector speichern diesen mit 0,5 scalieren und bei einem addieren und beim anderen subtrahieren. also eingentlich ne interpolation damit sich beide auf halben weg treffen und an gleicher position sind.

damit kann man ausschliessen das wenn 2 vertices, von sich einem überlappenden terrain mit einen unterschied von 0.0000001 haben oder so, aber dennoch unterschiedlich deformiert werden, sich dann doch an gleicher position befinden


naja aber gibt ja 1000 wege wie mans machen könnte =)
hoffe das war hilfreich

lg tom
Posted By: CocaCola

Re: Terrain deformieren - 09/09/17 14:10

wenn ich ein vector anschiesse, verändert sich z.B. nur der erste Vector im terrain, auch wenn die blaue box vom key_tab menue grösser wird und ein terrain überlappt, kann ich das dahinterliegende terrain nicht mehr treffen, obwohl der 3d punkt darauf zeigt verändet sich nur das vordere Terrain.

Ich habe terrains gewählt, weil die sich nicht alle verändern wie bei modellen

aber nett von Dir zu hörn, tag wink
© 2024 lite-C Forums