Sign in to follow this  
DmitryNik

Drawing game area

Recommended Posts

DmitryNik    199
Hello.

I'm wondering, if there is a special technique for drawing a games' fields (like in Age of Empires or Heroes IV etc.). But I don't know what I should search for. I know, I can draw one with primitives and "dress" it up with texture. But would be it really the same as in the games mentioned above? And if there is a special technique for drawing such fields, could anybody give me any hints, what I should search for?

Thank you in advance[img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] Edited by DmitryNik

Share this post


Link to post
Share on other sites
Saruman    4339
You need to google for "terrain rendering" and you will find many different algorithms with various tradeoffs and specialized for various implementations. They generally get the needed data from a heightmap and build a triangulated mesh which can also account for LoD, etc... although there are other implementations such as the voxel terrain system in the C4 engine. Edited by joew

Share this post


Link to post
Share on other sites
DmitryNik    199
With the answer on my question I was able to draw using LOD my own terrain(it's awesome, guys [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] ). But I got another problem, and to avoid creating a new topic(since the question still relates somehow to the game area(terrain) drawing) I'll describe the problem and will ask the question here. I got stuck with lightning. I'm using XNA and I just tried to make some nice(I believe it's possible) lightning with BasicEffect class. I used directionalLight0 for this purpose and... it doesn't work. I've tried to rotate the terrain, then camera, but there is no any visible objects on the screen at all, there is only dark screen. Here is my code for the lightning and for the world matrix:
[source lang="csharp"] this.basicEffect.LightingEnabled = true;
this.basicEffect.DirectionalLight0.Direction = new Vector3(0,0,1);
this.basicEffect.DirectionalLight0.DiffuseColor = new Vector3(1f, 1f, 1f);[/source]

Only transformation done on the world matrix:
[source lang="csharp"]this.world = Matrix.CreateTranslation(new Vector3(-this.terrainTexture.Width / 2.0f, 0, this.terrainTexture.Height / 2.0f));[/source]

Where could be the problem? Edited by DmitryNik

Share this post


Link to post
Share on other sites
DmitryNik    199
[quote name='Molle85' timestamp='1352216021' post='4998063']
Your Directional Light vector seems to be parallel to the ground, try changing it to Vector3(0,-1,0)
[/quote]

To be honest, I've tried every possible value. But it still doesn't work.

Share this post


Link to post
Share on other sites
DmitryNik    199
Normal vectors are not zero. I've checked it. Also even custom point lightning doesn't work. And this is very strange. Since I take the light position and the Vertex position, then the "ray" is created. After that the dot product is calculated(DOT(ray, normal)). Moreover the ray is normalized. I've tried this effect on the small mesh and it worked.



[b]ADDED:[/b]

Yeees! Problem solved!!! [img]http://public.gamedev.net//public/style_emoticons/default/biggrin.png[/img]

The only reason WHY lighting doesn't work was in the order in which statements were written! Before putting vertices into the buffer we have to calculate the normal component of the each vertex. And ONLY after that we can put it in the buffer.[img]http://public.gamedev.net//public/style_emoticons/default/unsure.png[/img] Edited by DmitryNik

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