views:

37

answers:

2
+3  Q: 

Texturing a model

I have coded a 3d-terrain engine with simplistic model engine on top of it.

I use a rectangular heightmap for my terrain, so texturing those triangles is pretty straightforward.

However, on texturing my model i am a bit stuck.

I use a custom model format, so answers like use blender or use 3ds will not be helpful.

The reason for this is that I started this hobby-project to teach myself OpenGL programming, and since i had the models ready from a really old Turbo Pascal software renderer a friend of mine wrote in 1999, i just kept using them.

My questions are:

Is there an well-known algorithm to generate the texture coordinates for the triangles my model consists of? If not, what strategy should I follow?

+4  A: 

There are a number ways of automatically generating texture coordinates, but I don't know of any easy way to do it that will give you coordinates without significant distortion or excessive discontinuities.

I would say that the easiest approach will be to write a small program that converts from your current model format to something more standard. I've done this in the past, and I've found the XNA .x format pretty easy to convert to. I think anything else you attempt will ultimately take longer and be more difficult than doing this and then using the tools available in a 3D modelling package.

If you're absolutely certain you don't want to do the conversion, then my advice is to aim for something simple, and accept that the results won't be great. One easy approach is a spherical projection - basically you assign the texture coordinates to vertices based on the "latitude" and "longitude" corresponding to a vector going from the centre of the model to the vertex.

Similarly easy, but often better for things like characters is to project all forward facing polygons to just their x and y coordinates, and similarly for the back facing polygons except that you offset them so the two sets are next to each other.

Going further you could try cylindrical projections also. Each of these projections will work well for certain kinds of shapes. But, generally they will be much worse than proper UV unwrappings like in Blender, etc.

RD1
+1  A: 

You could also write a little Blender importer and the corresponding exporter. Each should take no more than 100 lines of Python (your model format seems to be simple), and auto uv mapping algorithms are a lot more complicated than 2x 100 LOC

Yet another solution is to drop the support for your old format and use the first .obj loader (or anything) you find.

Calvin1602