PDA

View Full Version : Terrain-Texturing



ReneMiner
23-04-2013, 17:06
I removed the other post from other thread (3d-Editor) about this, because it's something different.
I was wondering how to create some texture for a terrain, and now - after thinking a few different ways - I came to the conclusion the best way to create some natural looking terrain would be some "spray-paint-method" where the final texture get's sprayed together from a few different texture-resources as gras, rocks, dirt etc.
That will avoid lots of repetitions and make terrain look as natural as possible.
And of course the texture can be "sprayed" in real-time to the model in a WYSIWYG-manner so using some additional paint-software is not first choice for this. I think I'll have to create some sBitmap-Data-String and replace parts through data from another bitmap - or would be better to mix colors? I fear they'll look odd and wrong-colored then.

Probably I'm gonna make another editor for terrains - but I already think about the how-to get there. Maybe someone got a suggest to this?

ReneMiner
24-04-2013, 09:10
I think I need to do it from scratch- so all works hand-in-hand together on a very low level. And overnight I had already some "input" - I guess I get this included to the 3d-Editor somehow. That might limit the amount of available texture-slots from 1024 down to 1015 - but I think, I can live with that ;)

A question to this: How can I make a string from format TBGL_Data_BGR/BGRA to become TBGL_Data_RGBA ?

Petr Schreiber
24-04-2013, 09:42
There are multiple options.

To change from BGRA ro RGBA, you just need to swap two bytes (for Blue and Red channels), so the solution could be to allocate virtual array over the string buffer and swap the components or do it using new Memory_Swap statement.

If you are harcore guy, this task is ideal task for OpenCL (http://www.thinbasic.com/community/forumdisplay.php?365-OpenCL), which is available from ThinBASIC as well. It allows hardware accelerated data paralelism. You could launch micro thread on each RGBA segment and swap it on simple core of GPUs. It would be fast, but not everybody has OpenCL enabled GPU today.


Petr

Note: The TBGL_BGRA is preffered format for the GPUs.

Charles Pegge
24-04-2013, 11:30
Perlin noise is a way of creating texture. It works by generating chaotic values, interpolated at different frequencies, arranged in octaves. Good for cloudy skies, sand, and anything else in between.

Perlin noise can be tiled, when the lowest frequency (longest wavelength) fits into each tile by an integer factor.

Attached demo noise generator control. (Antivir/Avira may dislike it). You can adjust colors by RGB or HLS, and mix the different octaves. The color values are not clamped so you can get overflows, which are quite interesting in themselves.

Charles

ReneMiner
24-04-2013, 11:53
Noise is nice idea - especially for clouds, water & fog - but currently is more about ground as sand, rock, gravel, cobbles, mud etc.

Example runs fine without any complains from Windows-Defender.


OT:
Since I heard you're the hexagon-expert: Is it possible to cover a sphere (does not have to be a geometrical perfect one) with similar hexagonal tiles (which do not have to be perfect mathematical hexagons) - so I could create a planet-like ball - maybe north- and southpoles can be covered with ice, so don't need hexagonal tiles there. Can be a little elliptic as earth (wider than high) - no perfect sphere needed.
I intend to create a base for strategy-game, where all tiles have to be the same shape - so there might be a solution if the hexagons are not real ones but bent upper and lower corner(yellow) 1.5° away from surface(white) and also upper (blue) belt is smaller than lower belt (purple). Can turn them upside down below equator - but all tiles have to be even. Any idea to this?

Edit: Petr, I think I'll keep it OpenGL - so final runs on all users systems. Otherwise someone will probably complain a whole week about

Charles Pegge
24-04-2013, 13:39
Hexagons won't make a sphere, unfortunately. You will always need 12 pentagons, or 6 squares to go with them. But what you can do is create an inflated cube. One grid for each of the 6 faces. Each node is adjusted (normalised) so that it relocates onto the surface of the sphere. As you can see the squares become increasingly distorted as they approach the corners, but I think this will give you the best mapping for texturing and zoning.

Each cube face has 16 panels in this dome
https://lh4.googleusercontent.com/-ThdgJKnyWMM/S3Vi2j189GI/AAAAAAAAAUQ/rRggUWdT3WQ/s640/IMG_1517c.jpg

ReneMiner
25-04-2013, 08:29
I need some PlugIn to see it - but PlugIn not available :(

ReneMiner
25-04-2013, 11:38
Too bad, there's no compatible JRE-PlugIn for Mozilla that will install automatic - if I install manually and enable, my browser crashes/ does not respond any more :(

To keep near topic, some informational about current state/ideas:

In the meantime I started a new project, which is all about terrain-editing + scene setup. To create terrains with TBGL3dEd would be to cumbersome and waste a lot of resources - since terrains with fixed sizes don't need X+Z nor flexible UV, but just heights, vertex-normals and colors and consist of one group only.
So I'm up to create a world from fixed terrain-meshes which are 32*32 square tiles consisting of 2 triangles, each tile 32 screen-units in size, so one terrain-mesh is 1024 screen-units wide. Also I make some rule so even tiles [(1,1),(1,3)...] have diagonal line from lower left to upper right while odd tiles [(1,2),(1,4)... just add indexes to get even/odd...] have diagonals from upper left to lower right. So the hills won't bent to one side.

For the time being TBGL3dEd will maintain in a Beta-stage because it's supposed to work together (http://www.thinbasic.com/community/project.php?issueid=395) with the world-editor later so one can drag objects from somewhere else into the world and place them. Also the final mesh-format to write to is undecided yet and some little misbehavement of tB when loading associated files has to be corrected before a final .exe of TBGL3dEd will be published.


I created a simple "texture-file-format" for some to this related purpose, - spraypaint the terrains texture together from different others - that's just how I save it:


Function IMAGE_SaveBGRA(ByVal sFile As String, _
ByVal sImageData As String, _
ByVal lWidth As Long, _
ByVal lHeight As Long) As Boolean

Local fNum As DWord

If Len(sFile) > 3 Then
If Mid$(sFile, 2, 2) <> ":\" Then sFile = TEXTURES_Path + sFile
If Ucase$(FILE_PathSplit(sFile, %PATH_EXT)) <> "DATABGRA" Then sFile += ".DataBGRA"
Else
sFile = TEXTURES_Path + sFile + ".DataBGRA"
EndIf

If FILE_Exists(sFile) Then FILE_Kill(sFile)
fNum = FILE_Open(sFile, "BINARY")
If Not fNum Then Return FALSE

FILE_Put(fNum, MKL$(lWidth))
FILE_Put(fNum, MKL$(lHeight))
FILE_Put(fNum, sImageData)
FILE_Close(fNum)

Function = TRUE


End Function


sImageData is some string that holds valid data to do the following:


TBGL_MakeTexture sImageData, %TBGL_DATA_BGRA, lWidth, lHeight, lTexID, %TBGL_TEX_MIPMAP


And these are the current functions to convert to BGRA - maybe someone has an idea to do this faster?



Function IMAGE_RGBA_to_BGRA(ByVal sRGBAData As String) As String

Local lPos As Long
Local sImageData As String

While lPos < Len(sRGBAData)
sImageData += StrReverse$(Peek$(StrPtr(sRGBAData) + lPos, 3)) + Peek$(StrPtr(sRGBAData) + lPos + 3, 1)
lPos += 4
Wend

Function = sImageData

End Function

' -------------------------------------------------------------------------
Function IMAGE_BGR_to_BGRA(ByVal sBGRData As String) As String

Local lPos As Long
Local sImageData As String

While lPos < Len(sBGRData)
sImageData += Peek$(StrPtr(sRGBData) + lPos, 3) + Chr$(255)
lPos += 3
Wend

Function = sImageData

End Function

ReneMiner
01-05-2013, 11:37
Here for the nosy users some preview-example of TerrainEd which is current work in progress. It has no texturing yet - so no FreeImage - FILE-Unit is not included- but runs without from thinAir. Needs #Minversion 1.9.5.0, big screen recommended.


Currently its just some endless world (5*5 Meshes Terrain are shown) and can be edited just using mouse. No load/save yet- also a few menuitems which are currently just dummies are without functionality - or give only debug-console-output for something totally different...

Left Button.........Action!
Right Button........Move Camera
Middle Button.......Move Map
Turn Wheel..........Zoom In and Out
CTRL + Left-Click...Go to clicked Position
CTRL + Wheel........Change Pointer-size
SHIFT + Wheel.......Change Landheight

The SHIFT+Wheel-combination works always to alter height, so don't need to change tool for that.

Shortcuts:
F1 - Landheight (hold LeftMouseButton and pull land up or down)
F2 - Flatten (click LMB to level surrounding to height of cursor-position)
F3 - Soften (click LMB to soften)
F4 - Texture (NOT AVAILABLE)
F5 - Colorize (LMB to apply a color)

The textboxes on menubar show the current cell coordinates as follows:
Fist box shows North/South - (red corner in 3d-pointer points always north), larger numbers/positive direction is north
Second box shows East/West - east is positive direction here

feel free to use for personal and non-commercial projects

I'm still undecided how to get texture onto it- the only thing I know for sure - there has to be just one texture per mesh, otherwise it would use up too much time if it has to be drawn in different groups.

Edit: Attachement exchanged 05.05.2013

To see water go menu View, check "Show Water". The number below allows to alter Water-Height. Is better editing landheights if water hidden, otherwise mousepointer points on water-surface

ErosOlmi
01-05-2013, 11:58
And these are the current functions to convert to BGRA - maybe someone has an idea to do this faster?



Function IMAGE_RGBA_to_BGRA(ByVal sRGBAData As String) As String

Local lPos As Long
Local sImageData As String

While lPos < Len(sRGBAData)
sImageData += StrReverse$(Peek$(StrPtr(sRGBAData) + lPos, 3)) + Peek$(StrPtr(sRGBAData) + lPos + 3, 1)
lPos += 4
Wend

Function = sImageData

End Function

' -------------------------------------------------------------------------
Function IMAGE_BGR_to_BGRA(ByVal sBGRData As String) As String

Local lPos As Long
Local sImageData As String

While lPos < Len(sBGRData)
sImageData += Peek$(StrPtr(sRGBData) + lPos, 3) + Chr$(255)
lPos += 3
Wend

Function = sImageData

End Function


Try this one, should be some many X times faster:

Function IMAGE_RGBA_to_BGRA(ByVal sRGBAData As String) As String
Local lPos As Long
Local pByte As DWord

pByte = StrPtr(sRGBAData)
For lPos = 0 To Len(sRGBAData) - 1 Step 4
Memory_Swap(pByte + lPos, pByte + lPos + 2, 1)
Next

Function = sRGBAData


End Function


Maybe I can add some thinBasic native function (compiled) doing that job. They should be some thousands faster.

ReneMiner
01-05-2013, 12:10
I like speed-ups, especially a few 1000% :)

and I altered the IMAGE_SaveBGRA-Function due some idea of Petr
- to keep compatible with current format I just use a negative value for lWidth when I save the .DataBGRA using now


File_Put(fNum, STRZIP$(sImageData))

;)

ErosOlmi
01-05-2013, 12:23
And this is the other one, IMAGE_BGR_to_BGRA:


Function IMAGE_BGR_to_BGRA(ByVal sBGRData As String) As String
Local lPos As Long
Local pByteIn As DWord
Local pByteOut As DWord
Local sImageData As String

'---Create a new buffer of 4 bytes for each color in BGR string
sImageData = String$(Len(sBGRData)/3 * 4, Chr$(255))

'---
pByteIn = StrPtr(sBGRData)
pByteOut = StrPtr(sImageData)


For lPos = 0 To Len(sBGRData) - 1 Step 3
Memory_Copy(pByteIn + lPos, pByteOut, 3)
pByteOut += 4
Next

Function = sImageData

End Function




Please check results because I didn't make any test.

ReneMiner
01-05-2013, 12:47
except the codeline that slipped up somehow to the first line (local lPos) - works perfect.

ErosOlmi
01-05-2013, 12:52
oops: copy/paste problem. Fixed.

In general, to get some speed is always preferred to avoid string concatenation and make in-place bytes changes.
String concatenation is always a complex and memory/cpu consuming due to many allocation/deallocation steps needed every time it occurs.

ReneMiner
06-05-2013, 20:15
Lucky me- the forum is working again - I feared my life is at end :D

No- get serious again. I append here because it's about my terrain-texturing stuff which you can see attached to post #13 of this thread. We mastered successful the problem to animate the water in the other thread- but now I got another problem:

My water was translucent before - means one could see the ground below water-layer. Now I added textures (not in download above) and now the textured ground below water-layer becomes covered by water - the water-animation still is perfect- but I can not look through the water any more. I think it has to do with TBGL_PushBlendFunc %GL_ONE, %GL_ONE and I already tried a lot of combinations there- what can I do so the textured ground becomes visible?

Petr Schreiber
06-05-2013, 21:03
Hehe, maybe you will have to get back to alpha in the end, with alpha premanipulated image - TGA can store alpha and TBGL can load 32bit TGAs.

There is a nice tool to examine blending modes online:
http://www.andersriggelsen.dk/glblendfunc.php


Petr

ReneMiner
07-05-2013, 08:52
I think I will use the simple BGRA-format because I can easily add alpha to any pixel as I want. I don't even need to convert the bmp to tga for that - see above: we got a few ways to manipulate and convert image-data already ;)

Maybe...surprise...got something to code in mind...'til later

PS: are all those (your linked tool) switches valid? (for example i don't know %GL_ONE_MINUS_CONTANT_COLOR from TBGL)

Petr Schreiber
07-05-2013, 09:19
Hi Rene,

yes they are valid, but not supported on every OpenGL implementation. The equates are defined in thinBasic_glExt.inc, and you can use them with TBGL_BlendFunc and TBGL_PushBlendFunc in case %GL_ARB_imaging imaging extension is supported. To see, if %GL_ARB_imaging is supported, use TBGL_oglExtensionSupport function.


Petr

ReneMiner
07-05-2013, 11:31
Question into the other direction - opposite of TBGL_MakeTexture... is there a way to retrieve the Image-Data-String so I could for example TBGL_LoadTexture(bmp,dib,tga) instantly with native function and get something back like

myBmp as String = TBGL_GetTextureData(TBGL_GetTextureHandle(textureIndex), %TBGL_DATA_BGRA or whatever possible...)

as I can retrieve TBGL_GetTextureResolution?

Petr Schreiber
07-05-2013, 15:56
Hi Rene,

it is possible, I will add TBGL_GetTextureData to TBGL in ThinBASIC 1.9.7.0.


Petr

Petr Schreiber
07-05-2013, 19:37
Well, developed, documented and simply tested. You can download it here (http://www.thinbasic.com/community/showthread.php?t=10909) as usually.
The syntax is without the use of TBGL_GetTextureHandle, simply for example TBGL_GetTextureData(1, %TBGL_DATA_BGRA).

Petr

ReneMiner
07-05-2013, 19:43
Great... I was the whole day busy trying to get it done by freeimage, but somehow that does not load the bmp correctly - now I can skip this and use TBGL... :D

To the help:

Returns ??? I would say String,
check Equate- Should be %TBGL_Data_xxxx

Petr Schreiber
07-05-2013, 20:05
Ooops, right you are. I reuploaded the fixed help file. I need to get some sleep now :D


Petr

ReneMiner
08-05-2013, 08:17
OK, I'm still playing the texture-man here- now is the following: just for test I tried out different texture-quality - all work fine but if I use %TBGL_TEX_CRISPANISO the font (TBGL_BuildFont used) in slot 1 disappears from screen. Is it hardware-dependend? I thought I got pretty good hardware...

And however I try - I don't get the water to be translucent as long as the ground below has texture. The link above for trying the switches shows totally different results - I also tried lots of settings - even have all switches available during runtime - only idea that is left is to make the ground from a 24-Bit-Texture since alpha would make no sense here anyway. Maybe I try this now...

Petr Schreiber
08-05-2013, 08:37
Hi Rene,

when you specify %TBGL_CRISPANISO, do not forget to specify the anisotropy level parameter. That should do the trick.

I have updated TBGL to presume default value of 2 for anisotropy, in case user does not specify it and fixed some more typos in the help file. You can get it here (http://www.thinbasic.com/community/showthread.php?10909-The-latest-TBGL-version) as usually.


Petr

ReneMiner
11-05-2013, 17:59
Just to demonstrate - I've found a way to mix textures seemless from totally different textures now- here just 2 screenshots
- sorry, I can currently not upload it here because full filesize exceeds now 100 MB... :D

But as you see, I am able to create almost endless terrain-worldspace (2^32^2 Cell-Mehes) in the meantime.

Petr Schreiber
11-05-2013, 21:26
Very nice Rene,

I am curious to hear more about the approach you picked. It looks great!


Petr

ReneMiner
12-05-2013, 10:47
OK, I won't keep it a secret... I upload it here but be aware- tB-Minversion 1.9.6 + latest TBGL-Package (http://www.thinbasic.com/community/showthread.php?t=10909) needed.

I selected to include a few textures only so you can play a little bit. If you want more textures, place them in BMP-Format into some subfolder of media-folder.
Textures should have Size of 256*256, else won't work.
(Press F4 to reload Subfolder-List or click onto some subfolder in list to reload folder-content then when adding textures due runtime.)

For the interested: All texture-painting is done in sub TERRAIN_Texturize()

You should choose a small Pointer-Size (1 or 2) to draw fast and dense.
The larger the cursor the more blend-effect but needs longer.
If you got a slow computer it's not recommended to use Pointer-Sizes above 5.

You can convert BMP easily to some %TBGL_DATA_-Format using the Functions TEXTURE_... in unit Main.
Just write some Sub, you might fire your new sub by changing something in Gadget-Unit, suggest:
Sub GADGET_ClickMenuitem(), Case %gHelpAbout,
comment the current codeline there "GADGET_CreateMessage..." and hack the call of your own sub in.
Thereafter your sub will run if you click on Menu\Help\About...

convert a BMP by calling like this:


If TEXTURE_LoadData( "c:\Filename.Bmp", %PreservedSlots) Then
TEXTURE_SaveData("c:\Filename.DataRGB", %PreservedSlots)

' optional you can also use this syntax
' TEXTURE_SaveData("c:\Filename", %PreservedSlots, %TBGL_Data_RGB)
' but omit file-extension in passed filename then if it differs from format,
' else you'll have a file extension like "Filename.bmp.DataRGB" !
Endif

RGBA or BGRA won't make any sense for terrain so use RGB or BGR to keep files small.
%PreservedSlots is some empty texture-slot which is safe to use here.

@Petr: Texture_LoadData/Texture_SaveData - maybe an idea...but build-in to TBGL probably difficult because this uses "ZLib"

Edit: Attachement removed - still a lot to do ;)

Petr Schreiber
12-05-2013, 11:17
Hi Rene,

this is working really nice. I will probably not add any ZLib dependant stuff to TBGL, but I will think about function updating just part of the texture - it could improve the bus transfer speeds.

Tip: Loop elimination
The following:


While lDstPxlX > %Cell_Texturesize
lDstPxlX -= %Cell_TextureSize
cmX += 1
Wend

While lDstPxlZ > %Cell_Texturesize
lDstPxlZ -= %Cell_TextureSize
cmZ += 1
Wend


can be replaced with faster equivalent:


cmX = lDstPxlX \ %Cell_Texturesize + 1 ' -- Integer division
cmZ = lDstPxlZ \ %Cell_Texturesize + 1
lDstPxlX = Mod(lDstPxlX, %Cell_Texturesize)+1
lDstPxlZ = Mod(lDstPxlZ, %Cell_Texturesize)+1


The following:


While lSrcPxlX > 256 : lSrcPxlX -= 256 : Wend
While lSrcPxlZ > 256 : lSrcPxlZ -= 256 : Wend


can be replaced with faster equivalent:


lSrcPxlX = Mod(lSrcPxlX, 256)+1
lSrcPxlZ = Mod(lSrcPxlZ, 256)+1


Tip: Distance calculation
This:


dDist = Sqr( Pow(lX,2) + Pow(lZ,2) )


can be replaced with:


dDist = dist(0, 0, lX, lZ)


Petr

ReneMiner
12-05-2013, 11:27
thanks for your suggests - I changed it (but not in download yet, there are a few more Sqr's that I changed too, all in Terrain_-altering-subs)

Mentioning "While" - is there no ElseWhile ?

You might experience that the water-animation slows down pretty much if the mousepointer points into 3d-view - that's because of TBGL_GetPixelInfo - place pointer above some Gadget as Land-Dialog or Top-Menubar to see the water animated correctly. Show/Hide Water from View-Menu where you also can change water-height or water-texture by turning mousewheel when pointing onto some numeral there.

PS: I've found some bug related to selection of colors. To fix yourself, check out

Sub GADGET_ClickFrame


' somewhere around line 1817 you find:
If Between(lY, 0, 4) Then
Colour_Current = %clrUser1 + lY + 5 * (Gadget(%gColorBrowse).V + lX)

' should look like this after fix:
Colour_Current = %clrUser1 + lY + 5 * (Gadget(%gColorBrowse).V + lX - 1)
'...

you'll need to add the "- 1" at end of this line.

Greetings from seamless screwed cheerio-hills

ReneMiner
16-05-2013, 19:42
If anyone is interested - it's a very large file and I fear the upload-hoster is a crap because very slow- but it's free.
125 MB because 25 MB a few demo-cells - the rest is mostly media. I think I'll not upload these again so grab'em now to get some good starting-library ;)

New Features:
play on view-menu with Fog
draw textures & colors blended or opaque to terrain
import media (bmb/png/uncompressed tga or DataRGB, DataBGRA etc.) just by dragging into the window. If it's 256*256 and a folder in texturing-dialog is opened, the texture will be converted & copied into this open subfolder. If it's 1024 * 1024 (%Cell_Texturesize) it will be applied to the current centered cell. Other sizes will be converted to either RGB or BGRA and saved to Media-folder.

The numbers at the menubar display the current centered cell coordinates. You can enter numbers or just alter them point there and use mousewheel
(as almost any user-defineable numerals)

The "^"-sign inside the 3d-mousepointer points north btw.

tB-Minversion 1.9.6.0

EDIT

Re-Uploaded:
7z-decompressing-software needed
has about 135 MB (i took a few of the textures out so food & novelty-folders are pretty empty now)

Download

(http://www.datafilehost.com/d/bf6a3b8f)

ErosOlmi
24-03-2014, 00:27
For some reason I missed this great script.

Here some images

Billbo
31-03-2014, 13:08
Rene,

Your download link ends up with a 300+ KB installer file. Not the 7z file.
I do not trust these small online installers for 135 MB programs (plus,
it's under a Russian name).

Could you please provide a direct link to the 7z file. Your help will be
most appreciated.

Bill

ReneMiner
31-03-2014, 13:35
installer file? no this can not be right.
if I click the link I end up here: http://www.datafilehost.com/d/bf6a3b8f
there's a grey button that says download and on clicking it I get prompted if to open it using 7z or to save.

I have no idea how else I could make this large file accessable
- the size is due to loads of built-in textures and some demo-world.

However, I attach a very stripped-down version of it.

There's no demo-world and only 2 textures to draw with and a few textures for the water (enable in View-menu)

To add new textures to your "library" create subfolders to categorize these inside the Media-Folder before you run this.

While you are building "your world" you can add new textures in *.png or *.bmp-format or uncompressed *.tga to your "library" then simply by opening the desired folder in "Texturing-Window" and drag the file from explorer into the tbgl-window to get converted into the used format instantly. They have to have a size of 256*256 pixels.

min-OS: Windows XP

EDIT: there's a problem now due to the missing textures ( i don't know what i did there but somehow the listview gets some index-problem when accessing textures for the second time ) and will need some time to find out how to solve

Billbo
31-03-2014, 14:02
Rene,

Thanks for your quick reply.

I have attached what the download windows look like. This
is with small box under the grey button checked. Unchecked,
the download does not connect.

Bill

P.S. It is downloading now. I unchecked the box and started
a download. It took about 10 minutes to connect. BTW. It
just completed. It downloaded just fine.

Thank you very much.

ReneMiner
31-03-2014, 14:12
I fixed the problem and re-uploaded the stripped-down-version again.
On "Select a world"- question type in the name ("new world") and use enter - in following sessions you can pick existing worlds in the upper list.

Also found out - you can add new subfolders in Media-folder during runtimes - when opening textures-window (F4) it reloads them...
(this time a few gravel-textures so different size than above)

PS. best to drag-in bmp since these have no alpha-channel which is unnecessary for terrain anyway

Billbo- maybe not choose "open" but "save" in first window that pops up when click on "download" ?

+ to have the fix it only needs gadget-unit of this download -

Billbo
31-03-2014, 14:41
Rene,

I sure appreciate it. It downloaded the update.

Check my P.S. above.

Bill

ReneMiner
31-03-2014, 18:08
I'm sure some will ask why I did not finish it...

Now- some landscape is nice, but would be better if some trees or houses in there. I think I'll redo something similar in the future that unites mesh+terrain-editor so you can build mesh-prototypes, create an object ("myHouse(1)") , assign the mesh(es) to it and place it into the landscape. How does that sound?

Sadly it has to wait until I've found a solution for the slow "loading-speed" which is caused by missing materials in TBGL-m15-format and no other way than pumping the data into display-lists then - to torture users with the current available speed is inacceptable.

Also I'll wait for some oopification-improvements that are just around the corner and I hope for "the new TBGL" of course to have some cool native data-format that can create entities from the information of some passed datapointers and desired vertex-type.