Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Simple OpenTK program not working


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
3 replies to this topic

#1 richy19   Members   -  Reputation: 115

Like
0Likes
Like

Posted 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]
Toughts, creations and ramblings can be found at: http://richy1913.byethost22.com/

Sponsor:

#2 Krum110487   Members   -  Reputation: 110

Like
0Likes
Like

Posted 17 August 2012 - 06:36 PM

I could be wrong, but you might have your near a bit off on the orthographicOffCenter, try:

CreateOrthographicOffCenter(0.0f, 1.0f, 1.0f, 0.0f, -1.0f, 2.0f);

#3 richy19   Members   -  Reputation: 115

Like
0Likes
Like

Posted 18 August 2012 - 05:03 PM

I could be wrong, but you might have your near a bit off on the orthographicOffCenter, try:

CreateOrthographicOffCenter(0.0f, 1.0f, 1.0f, 0.0f, -1.0f, 2.0f);


It ended up being the z distance thanks.
I dont really understand tho, say I put 0 and -2 as the near and far distance. Am I correct to assume that anything with a Z value between these will be displayed?

Let me rephrase the question, is the zFar value a point in 3d space (making my logic valid) or is it a length in the negative direction from the zNear value(which is what it seems to be)?
by the second explanation I mean for example using -1 and 3 would make anything visible between -1 and -4

Edited by richy19, 18 August 2012 - 05:07 PM.

Toughts, creations and ramblings can be found at: http://richy1913.byethost22.com/

#4 Krum110487   Members   -  Reputation: 110

Like
0Likes
Like

Posted 18 August 2012 - 06:38 PM

the near and far (to my understanding) is how many units towards(near) and away(far) from the camera.

so -1 would be (origin - 1) (towards) and 2 would be (origin + 2) (away), so anything will render in the range of -1 to 0 or 0 to 2

so anything lower than -1 or higher than 2 wouldn't show, and it may or may not include 2 and -1 as not rendering, I am unsure, I just noticed you were cutting it close, it is always a good idea to play it safe and have some padding.

although I am new, so if you want a more detailed explanation, you might wait for someone else.

Edited by Krum110487, 18 August 2012 - 06:39 PM.





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