Jump to content

  • Log In with Google      Sign In   
  • Create Account

Awesome job so far everyone! Please give us your feedback on how our article efforts are going. We still need more finished articles for our May contest theme: Remake the Classics

richy19

Member Since 20 Jun 2010
Offline Last Active Sep 16 2012 02:41 PM
-----

Topics I've Started

Procedural Terrain Progression and Queries

22 August 2012 - 09:27 AM

For a while now I have been trying to accomplish nice smooth and somewhat complex terrain generation, in the long run I would like to evolve this into a planet generator.

Started out with reimers tutorials in XNA
Posted Image

Then moving onto pure OpenGL and trying to accomplish creating and displaying the map via shaders:
Posted Image

Which takes me to my last attemp
Posted Image
Posted Image

I have recently been looking up quadtrees


But im stuck as to what to do next.

My thoughts are:
Generate a large and detailed plane, say 10.000x10.000 units
Use some noise function to give it height
Create normals
Then create index list
Create a quadtree of max level 100(for example)
then using the current quadtree level, use it as a stride for the index list (so at level 0 I draw a single quad using each corner of the plane as a vertice, at level 1 its subdivided into 4 quads and so on untill the max level)

But I dont know if this is how it works, can anyone give me some advice?
Also If anyone has some resources on Procedural Terrain on Procedural Planets it would be much appreciated.
Thanks

Simple OpenTK program not working

17 August 2012 - 05:22 PM

I was trying to port some of my old OpenGL stuff to OpenTK however I couldnt get it to work.
I am now trying a simple program to display a triangle:
This is my setup:
MVP = Matrix4.CreateOrthographicOffCenter(0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 2.0f);
where the screen is:

[source lang="plain"]0 - 0 1 - 0---------------------------------------------| || || || || |---------------------------------------------0 - 1 1 - 1[/source]


And these verticies:

[source lang="csharp"]float[] vertices = { 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f };[/source]

The triangle should be right in the midle of the screen, well for some reason it isnt.

Heres all the code encase its something other than positioning
[source lang="csharp"]// Released to the public domain. Use, modify and relicense at will.using System;using OpenTK;using OpenTK.Graphics;using OpenTK.Graphics.OpenGL;using OpenTK.Audio;using OpenTK.Audio.OpenAL;using OpenTK.Input;namespace StarterKit{class Game : GameWindow{ float[] vertices = { 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f }; int vbo; string fragmentSource = "#version 120\n" + "void main(){gl_FragColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);}"; string vertexSource = "#version 120 \n" + "uniform mat4 MVP; attribute vec4 Position;" + "void main(){ gl_Position = MVP * Position; }"; int shaderProgram, vertexShader, fragmentShader; int MVPID, PositionID; Matrix4 MVP; /// <summary>Creates a 800x600 window with the specified title.</summary> public Game () : base(800, 600, GraphicsMode.Default, "OpenTK Quick Start Sample") { VSync = VSyncMode.On; } protected override void OnDisposed(EventArgs e) { GL.DetachShader( shaderProgram, vertexShader ); GL.DetachShader( shaderProgram, fragmentShader ); GL.DeleteShader(vertexShader); GL.DeleteShader(fragmentShader); GL.DeleteProgram(shaderProgram); GL.DeleteBuffers(1, ref vbo); base.OnDisposed(e); } /// <summary>Load resources here.</summary> /// <param name="e">Not used.</param> protected override void OnLoad (EventArgs e) { base.OnLoad (e); GL.ClearColor (0.1f, 0.2f, 0.5f, 0.0f); GL.Enable (EnableCap.DepthTest); GL.GenBuffers (1, out vbo); GL.BindBuffer (BufferTarget.ArrayBuffer, vbo); GL.BufferData (BufferTarget.ArrayBuffer, (IntPtr)(vertices.Length * sizeof(float)), vertices, BufferUsageHint.StaticDraw); vertexShader = GL.CreateShader(ShaderType.VertexShader); GL.ShaderSource( vertexShader, vertexSource ); GL.CompileShader( vertexShader ); fragmentShader = GL.CreateShader( ShaderType.FragmentShader ); GL.ShaderSource( fragmentShader, fragmentSource ); GL.CompileShader( fragmentShader ); shaderProgram = GL.CreateProgram(); GL.AttachShader( shaderProgram, vertexShader ); GL.AttachShader( shaderProgram, fragmentShader ); GL.LinkProgram(shaderProgram); MVPID = GL.GetUniformLocation(shaderProgram, "MVP"); PositionID = GL.GetAttribLocation(shaderProgram, "Position"); MVP = Matrix4.CreateOrthographicOffCenter(0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 2.0f); } /// <summary> /// Called when your window is resized. Set your viewport here. It is also /// a good place to set up your projection matrix (which probably changes /// along when the aspect ratio of your window). /// </summary> /// <param name="e">Not used.</param> protected override void OnResize (EventArgs e) { base.OnResize (e); GL.Viewport (ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, ClientRectangle.Height); } /// <summary> /// Called when it is time to setup the next frame. Add you game logic here. /// </summary> /// <param name="e">Contains timing information for framerate independent logic.</param> protected override void OnUpdateFrame (FrameEventArgs e) { base.OnUpdateFrame (e); if (Keyboard [Key.Escape]) Exit (); } /// <summary> /// Called when it is time to render the next frame. Add your rendering code here. /// </summary> /// <param name="e">Contains timing information.</param> protected override void OnRenderFrame (FrameEventArgs e) { base.OnRenderFrame (e); GL.Clear (ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.UseProgram (shaderProgram); GL.UniformMatrix4(MVPID, false, ref MVP); GL.EnableVertexAttribArray(PositionID); GL.BindBuffer(BufferTarget.ArrayBuffer, vbo); GL.VertexAttribPointer(PositionID, 3, VertexAttribPointerType.Float, false, 0, IntPtr.Zero); GL.DrawArrays(BeginMode.Triangles, 0, 3); GL.DisableVertexAttribArray(PositionID); GL.UseProgram (0); SwapBuffers (); } /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main () { // The 'using' idiom guarantees proper resource cleanup. // We request 30 UpdateFrame events per second, and unlimited // RenderFrame events (as fast as the computer can handle). using (Game game = new Game()) { game.Run (30.0); } }}}[/source]

PARTNERS