how to draw lines over the terrain

Started by
7 comments, last by Dario Oliveri 11 years, 10 months ago
I am trying draw lines over the terrain when i change my view position part of the lines will go under the terrain. I have attached a file please can anyone help me on this?[attachment=9443:terrain-line draw.bmp]
Advertisement
You can render lines in another renderpass with Ztest disabled.

Render terrain normally.
Disable Ztest& Z write ->draw lines
Re-Enable Ztest&Zwrite->draw other things

this way lines will be always visibile (even if behind a mountain) above terrain, but will not be displayed above other stuff.

Peace and love, now I understand really what it means! Guardian Angels exist! Thanks!

Is Ztest is DEPTH_TEST? if yes i don't want see the lines behind a mountain.it should be over the terrain like flow path.
hmmm

maybe this is a little expensive Im not sure but you could just change the colour of the fragment based on the final world position of the pixel. I wasnt able to download your attached image. In the future you should convert it to a jpeg (since its much smaller) and include it in the post itself so im only geussing this is what you want.

So lets say the map extends along the x and y coords you can have something like this in your fragment shader to create grid like lines on your terrain. Best have a seperate shader for your terrain.

if (fragmentPosition.x%20<1 || fragmentPosition.y%20<1) //fragmentPosition is a varraying variable that passes the final vertex position to the fragment shader.
{
finalColor = vec4(0,0,0,1) //black
}
else
{
finalColor = whatever else it would have been normaly.
}

This would create a solid black line on the terrain every 20 units on both the x and y axis.
Are the lines dynamically changing, or are they static?
As far as I see on the image, you are already doing some king of projection, the lines' geometry seems to follow the terrain. If you are calculating these projected lines "precisely" so without any simplification, then probably you only have to apply some depth bias to the lines, because no matter how precisely you calculate the lines, lines and triangles are rasterized differently + some floating point errors.

Add the bias (try different values untill the result looks okay) to the lines in your fragment shader.

Maybe you can render the lines with some shader magic, I don't know the capabilities of shaders. Maybe you could store the original lines' parameters in a texture and perform the projection in the fragment shader.
Something like:
calculate the fragment's x and y coordinates in world coordinates, and if the x and y coordinates are near to a line, color the fragment differently. You could even have anti aliased lines this way. This could be very expensive though, maybe you can speed it up with checking against a texture first, which contains the rendered lines. If this test passes, you can go to the more precise check.

Dunno, maybe it's stupid...
To have the lines stay above the terrain, you can use glPolygonOffset to provide a constant depth bias. This effectively moves the lines above the terrain towards the camera.

Most often when rendering with a depth bias, I don't have depth-writes enabled, i.e. specify glDepthMask(GL_FALSE), but have depth-testing enabled, i.e. specify glEnable(GL_DEPTH_TEST). Depth-biased renders always occur at the end of the frame, after all opaque geometry have been rendered with z-writes enabled.
Yes use glPolygonOffset with a negative value for it.

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

I don't know why I thought there's no glPolygonOffset in OGL ES...
just use shadow projection but instead of projecting shadows project lines from top. ;)

Peace and love, now I understand really what it means! Guardian Angels exist! Thanks!

This topic is closed to new replies.

Advertisement