Jump to content

  • Log In with Google      Sign In   
  • Create Account


how to draw lines over the terrain


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
8 replies to this topic

#1 A9876   Members   -  Reputation: 88

Like
0Likes
Like

Posted 12 June 2012 - 10:35 PM

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?Attached File  terrain-line draw.bmp   3.67MB   133 downloads

Edited by amrin, 13 June 2012 - 12:37 AM.


Sponsor:

#2 DemonRad   Members   -  Reputation: 290

Like
0Likes
Like

Posted 13 June 2012 - 01:52 AM

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!


#3 A9876   Members   -  Reputation: 88

Like
0Likes
Like

Posted 13 June 2012 - 02:40 AM

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.

#4 Wilhelm van Huyssteen   Members   -  Reputation: 902

Like
0Likes
Like

Posted 13 June 2012 - 06:58 AM

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, 13 June 2012 - 06:59 AM.


#5 szecs   Members   -  Reputation: 2093

Like
0Likes
Like

Posted 13 June 2012 - 08:14 AM

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, 13 June 2012 - 08:19 AM.


#6 clb   Members   -  Reputation: 1777

Like
1Likes
Like

Posted 13 June 2012 - 08:45 AM

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.
Me+PC=clb.demon.fi | C++ Math and Geometry library: MathGeoLib, test it live! | C++ Game Networking: kNet | 2D Bin Packing: RectangleBinPack | Use gcc/clang/emcc from VS: vs-tool | Resume+Portfolio | gfxapi, test it live!

#7 dpadam450   Members   -  Reputation: 842

Like
0Likes
Like

Posted 13 June 2012 - 09:37 AM

Yes use glPolygonOffset with a negative value for it.

#8 szecs   Members   -  Reputation: 2093

Like
0Likes
Like

Posted 13 June 2012 - 09:40 AM

I don't know why I thought there's no glPolygonOffset in OGL ES...

#9 DemonRad   Members   -  Reputation: 290

Like
0Likes
Like

Posted 14 June 2012 - 02:41 AM

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!





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS