Texture coordinates on trianglestrips

designdb
Unregistered
 
Post: #1
Okay, one more, and then I'm down for the night.

I implemented trianglestrips on my terrain generator, and the textures look like junk, and it comes down to the texture coordinates. I don't know how I'm supposed to fix the corners of the texture when I'm not defining all three vertices.

I suppose I could fall back to texture teselation, but I'm concerned about the appearance of seams at the edge of each strip.

Ideas?

Thanks.
Dave Ramsey
Quote this message in a reply
Luminary
Posts: 5,143
Joined: 2002.04
Post: #2
I'm confused. Are the texture coordinates not solely dependent on the x and z coordinates of the vertex?
Quote this message in a reply
designdb
Unregistered
 
Post: #3
You can do that?

All the examples I could find in the red book used something like

[SOURCECODE]glTexCoord2(0.0 , 1.0);
glVertex3f(Whatever);
glTexCoord2(1.0 , 1.0);
glVertex3f(WhateverElse);[/SOURCECODE]

If I specify the texture coordinates using the coordinates of the object, I'm still not sure how that gets around the trianglestrip problem. In the strip, I don't explicitly define all of the coordinates (as such). Boy, that was a waffling sentence. I hope you know what I mean by that. Yes, I am defining all of the coordinates, but no longer as discrete triangles, but as triangle, then point, then point (basically).

My all triangle version used each pair of triangles which formed a square as one surface for the texture to be mapped upon (in two pieces). If I try to do that in the TriangleStrip, the coordinate which closes one Triangle also opens another.

I apologize, for it appears that I lack some of the necessary terminology to describe my problem.

Did that help, or do I need to roll out the screenshots?
Quote this message in a reply
Luminary
Posts: 5,143
Joined: 2002.04
Post: #4
I still don't understand. You are mapping one texture over the whole terrain, aren't you?

You can't use the vertex coordinates as texture coordinates directly without a vertex program. What I meant is that if a your terrain runs from (0, 0, 0) to (128, 0, 128) (diagonally) then the texture coordinates for a vertex (x, y, z) will be (x/128, z/128)... or won't they? Smile
Quote this message in a reply
designdb
Unregistered
 
Post: #5
Ahh. I see the problem. No, I am not doing one texture over the whole terrain( a la Myth), but rather trying to reproduce a cool system I saw a screenshot of on flipcode one day. The guy had a terrain engine that randomly generated a heightmap and then applied textures and coloration based upon a series of values/characteristics.

Right now, since it is still in progress, I am using only one texture, but it needs to repeat across the terrain. Originally, when it was all triangles, I used the texture once per triangle pair:

[SOURCECODE] glBegin(GL_TRIANGLES);
//POINT 1
glNormal3f((float)[normal getX], (float)[normal getY], (float)[normal getZ]);
glTexCoord2f(0.0f, 0.0f);
[vertexA draw];

//POINT 2
if(topBottom == TOP_TRIANGLE_OF_SQUARE)
{glTexCoord2f(1.0f, 0.0f);}
else
{glTexCoord2f(1.0f, 1.0f);}
[vertexB draw];

//POINT 3
if(topBottom == TOP_TRIANGLE_OF_SQUARE)
{glTexCoord2f(1.0f, 1.0f);}
else
{glTexCoord2f(0.0f, 1.0f);}
[vertexC draw];
glEnd();
[/SOURCECODE]

Yes, I know I should send the conditional outside the Begin/End, but my intention was to abandon this soon anyway.

Unfortunately, a similar approach does not work with TriangleStrips. I think I'm going to have to bind the left and bottom of the texture in the first triangle and then allow it to teselate accross the triangle strip all by itself.

The terrain looks nice in all tris, but it's a bit slow (though not noticibly slower than the STRUCT based version I had before). If I can get it all working, I'll have access to an infinite number of readily created playing fields that should be transmittable over a network with a greyscale bitmap, the terrain cuts (at what height grass becomes scrub, scrub becomes rock, where the water table is, etc), and the locations of trees and rocks and such. Should be pretty bandwidth friendly.

What I'm working on now is a testbed with a bunch of sliders for testing presets for the random heightmap generators, horizontal scaling, altitude scaling, Terrain cuts, etc.

Actually, his changed textures/colors based upon the slope of the ground (i.e. flat ground was grassy, sharply pitched ground was scrub, nearly verticle polys became rock, etc.). I'm not there yet. Smile

Does that help?
Quote this message in a reply
Luminary
Posts: 5,143
Joined: 2002.04
Post: #6
If you need a texture to tile across the terrain,

Code:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

Then simply let your texture coordinates range as high as you want. 2.0 = 1.0 = 0.0, 2.5 = 1.5 = 0.5, &c.

To turn a texture on or off for particular parts of the terrain, make a grayscale/alpha texture white where you want the texture on, black where you want it off, and multiply the two together using GL_ARB_texture_env_combine.

Add multiple different textures with additive blending, just make sure that the sum of the masks is 1 at each point.

Or is that over your head Smile
Quote this message in a reply
designdb
Unregistered
 
Post: #7
Nope, I think I got it. Of course, I won't really have it until I actually do it, but right this second is not the time... The part about additive blending and masks gave me some really cool ideas, though. Sneaky

I'll give it a try later today and let you know how it goes.
Quote this message in a reply
designdb
Unregistered
 
Post: #8
Perfect, just perfect. It has a significant advantage over what I was trying to do in that when you scale the terrain now, the textures are not scaled. I didn't mind it before, but now that I've seen these, just perfect.

Now I just have to figure out the vertex normals. I've got a good vector averaging method that accepts up to 6 vectors, and all of the Tri's have normals. The tough part is figuring out which normals to average.

I wish I was back in high school again. I had all this geometry and trig stuff down pat.

Don't bother answering the "which normals" question. It's going to be a pain in the butt because of the way I have my Triangle arrays set up, and besides, I want to figure it out for myself (or, at least, give it a shot)

OSC, as always, thank you very much for your assistance.
Quote this message in a reply
Post Reply 

Possibly Related Threads...
Thread: Author Replies: Views: Last Post
  openal coordinates vs. opengl coordinates gerald 1 6,145 Feb 3, 2011 10:04 PM
Last Post: OneSadCookie
  Integer texture coordinates. Skorche 5 3,873 Apr 28, 2005 10:49 AM
Last Post: Puzzler183
  vertex/texture coordinates screwy reubert 1 2,634 Aug 10, 2004 08:29 AM
Last Post: phydeaux
  controlling automatically generated texture coordinates ghettotek 4 3,412 Feb 26, 2003 06:00 PM
Last Post: OneSadCookie
  Quicktime and Texture Coordinates Griggs 5 3,750 Sep 27, 2002 11:34 AM
Last Post: Griggs