[Nel] Landscapes without 3DSMax

Cyril 'Hulud' Corvazier corvazier@nevrax.com
Tue, 18 Dec 2001 20:20:34 +0100


Hi Paul,

> Thank you everyone for the links.    I'm afraid though that these terrain
> building packages generate height fields, and as you may or may not be
> aware, NeL uses bezier patches, not height fields to generate its terrain.

You can build patches with an heightfield. It a fast way to generate
a simple lansdcape. Simply raise the tangeants vertices with the joined
vertices of a bezier patch : you have a heightfield !

> 1.  How much information of the CPatchInfo object must be filled in to
have
> a viable object?  sPatch gives me a 4x4 array of vertexes which I can use
to
> populate the vertices, tangents, and interiors of the CPatchInfo object.
> However, I am still a bit unclear what much of the data in the CPatchInfo
> object is, especially the BindEdges (4 CBindInfo structs).  Are these
filled
> in when welding the zones together, or are they something I will need to
> fill in upon generating a single zone?

The BindEdges info are required to properly link patches together at
runtime. You have to filled them for internal zone linking. zone_welder will
fill them
of inter-zone link. Hear come some explications on how to fill the
CBindInfo.

The patches can be linked those way : (warning ASCII arts in non-constant
size
fonts.. :-)  )

---

The edge numbers are :

     3
   ***
0 *  * 2
   ***
     1

---

There is 3 ways to bind patches together. (1-1, 1-2, 1-4)

---

One patch on another :

**********
*      *        *
*  0  *   1   *
*      *        *
*      *        *
**********
CBindInfo:
Patch 0, edge 2 : NPatchs = 1,  MultipleBindNum = 1, Next = { Patch 1 },
Edge = { 0 }
Patch 1, edge 0 : NPatchs = 1,  MultipleBindNum = 1, Next = { Patch 0 },
Edge = { 2 }

---

Two patches on another (Bind 2)

**********
*      *   1   *
*  0  ******
*      *   2   *
**********
Bind info:
Patch 0, edge 2 : NPatchs = 2,  MultipleBindNum = 1, Next = { Patch 1, Patch
2 }, Edge = { 0, 0 }
Patch 1, edge 0 : NPatchs = 1,  MultipleBindNum = 2, MultipleBindId = 1,
Next = { Patch 0 }, Edge = { 2 }
Patch 2, edge 0 : NPatchs = 1,  MultipleBindNum = 2, MultipleBindId = 0,
Next = { Patch 0 }, Edge = { 2 }

---

4 patches on another (Bind 4)

**********
*      *   1   *
*      ******
*      *   2   *
*  0  ******
*      *   3   *
*      ******
*      *   4   *
**********
Patch 0, edge 2 : NPatchs = 4,  MultipleBindNum = 1, Next = { Patch 1, Patch
2, Patch 3, Patch 4 }, Edge = { 0, 0, 0, 0 }
Patch 1, edge 0 : NPatchs = 1,  MultipleBindNum = 4, MultipleBindId = 3,
Next = { Patch 0 }, Edge = { 2 }
Patch 2, edge 0 : NPatchs = 1,  MultipleBindNum = 4, MultipleBindId = 2,
Next = { Patch 0 }, Edge = { 2 }
Patch 3, edge 0 : NPatchs = 1,  MultipleBindNum = 4, MultipleBindId = 1,
Next = { Patch 0 }, Edge = { 2 }
Patch 4, edge 0 : NPatchs = 1,  MultipleBindNum = 4, MultipleBindId = 0,
Next = { Patch 0 }, Edge = { 2 }

---

Note that zone_welder welds automaticaly the zones together but don't
generate bind info for internal patch linking in a zone.
It searches for shared vertices in the 2 zones and weld them. Zone_welder
can perform only 1-1 bind type.

I hope this is understandable, don't hesitate to ask for details.

> 2.  Once I manage to export a .zone file, what's the quickest, dirtiest
way
> to test it?  Will I need to build an entire app just to load the .zone, or
> is there some way I can easily hack it into the Snowballs client just to
see
> if it indeed exported a valid file?

You can replace a zone in snowball, or make a simple application to see
the zone. If you want, i can post a peace of code for a small app.

Cyril Corvazier