tags:

views:

75

answers:

1

I have a large set of lines, which I render from a vertex buffer object using glMultiDrawArrays(GL_LINE_STRIP, ...);

This works perfectly well. Now I have lots of vertex pairs which I also have to visualize. Every pair consists of two vertices on two different lines, and the distance between the vertices is small. However, I like to have the ability to draw a line between all vertex pairs with a distance less than a certain value.

What I like to have is something like a buffer object with the following structure:

i1, j1, r1,
i2, j2, r2,
i3, j3, r3,
...

where the i's and j's are indices pointing to vertices and the r's are the distances between those vertices. Thus every vertex pair is stored as a (i, j, r) tuple. Then I like to have a (vertex) shader which only draws the vertex pairs with r < SOME_VALUE as a line.

So my question is, what is the best way to achieve this?

A: 

I guess the classic would be to store the extra data in a texture, and do a lookup in your shader. But if it's really fixed, you could store the distance itself as a texture coordinate assigned to the vertex, and use it directly. I think you'll have to store it with every vertex (shaders generally don't like to work with pairs) regardless of how you go about solving it.

This is assuming you're not reusing vertexes for multiple lines.

EDIT:
Ok, so, since you're reusing vertexes, I guess you'll need do be clever about it. If it's part of at most two (or a fixed amount) lines (like a line strip), you can make two calls, the first call using the first texture coordinate, and so on. I'll see if I can think of another way.

roe
The problem with storing it per vertex is that every vertex can be part of multiple pairs and thus I have to store a variable amount of data for every vertex.
muksie