[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