Sign in to follow this  
amrin

how to draw lines over the terrain

Recommended Posts

amrin    88
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] Edited by amrin

Share this post


Link to post
Share on other sites
Dario Oliveri    290
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.

Share this post


Link to post
Share on other sites
amrin    88
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.

Share this post


Link to post
Share on other sites
EternityZA    1226
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. Edited by Wilhelm van Huyssteen

Share this post


Link to post
Share on other sites
szecs    2990
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... Edited by szecs

Share this post


Link to post
Share on other sites
clb    2147
To have the lines stay above the terrain, you can use [url="http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml"]glPolygonOffset[/url] 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 [url="http://www.khronos.org/opengles/sdk/docs/man/xhtml/glDepthMask.xml"]glDepthMask(GL_FALSE)[/url], but have depth-testing enabled, i.e. specify [url="http://www.khronos.org/opengles/sdk/docs/man/xhtml/glEnable.xml"]glEnable(GL_DEPTH_TEST)[/url]. Depth-biased renders always occur at the end of the frame, after all opaque geometry have been rendered with z-writes enabled.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this