Hello
I have been trying to develop a simple OpenGL ES1.1 application using Mono
for Android. While building upon the template OpenGL application available
in Visual Studio, I came across some weird behaviour in OpenGL, the
GL.Translate function doesnt seem to do any translation in Z axis and I
cannot setup a perspective using GL.Frustum, I have tried code given below
on Samsung Galaxy S2 and Galaxy Tablet and the results were the same; No
translation available in Z axis. Translation in X and Y axises work fine
though. the only problem I can think of is something is wrong in OpenTK or
it is a mono for android related problem
Can anybody help me with solving this GL.Translate and Perspective problems
I have?
Thanks you very much
Batu Akan
-------------------------------------------
using System;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.ES11;
using OpenTK.Platform;
using OpenTK.Platform.Android;
using Android.Views;
using Android.Content;
namespace OpenGLTest
{
class GLView1 : AndroidGameView
{
public GLView1(Context context)
: base(context)
{
}
// This gets called when the drawing surface is ready
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// Run the render loop
Run();
}
float z = 0;
// This gets called on each frame render
protected override void OnRenderFrame(FrameEventArgs e)
{
base.OnRenderFrame(e);
MakeCurrent();
GL.MatrixMode(All.Projection);
GL.LoadIdentity();
GL.Ortho(-1.0f, 1.0f, -1.5f, 1.5f, -10.0f, 10.0f);
//If I disable the Ortho Command and enable the Perspective
command I should get
//perspective but nothing really changes
//Perspective(50.0f, (float)(Width)/(float)(Height), -0.1f,
300.0f);
GL.MatrixMode(All.Modelview);
GL.LoadIdentity();
GL.PushMatrix();
//With the two lines below the cube should move away from the
viewer,
//but nothing happens until z reaches -10.0 and then the cube
disappears alltogether
GL.Translate(0.0f, 0.0f, z);
z = z - 0.05f;
GL.ClearColor(0.5f, 0.5f, 0.5f, 1.0f);
GL.Clear((uint)All.ColorBufferBit);
GL.VertexPointer(3, All.Float, 0, CubeVertices);
GL.EnableClientState(All.VertexArray);
GL.ColorPointer(4, All.UnsignedByte, 0, square_colors);
GL.EnableClientState(All.ColorArray);
GL.DrawElements(All.LineStrip, 36, All.UnsignedShort,
CubeElements);
GL.PopMatrix();
SwapBuffers();
}
public void Perspective(float fovy, float aspect, float zNear, float
zFar)
{
float xmin, xmax, ymin, ymax;
ymax = zNear * (float)Math.Tan(fovy * Math.PI / 360.0);
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
GL.Frustum(xmin, xmax, ymin, ymax, zNear, zFar);
GL.MatrixMode(All.Modelview);
GL.Hint(All.PerspectiveCorrectionHint, All.Nicest);
GL.DepthMask(true);
}
float[] CubeVertices = new float[]
{
-1.0f, -1.0f, 1.0f,
1.0f, -1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, -1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
1.0f, 1.0f, -1.0f,
-1.0f, 1.0f, -1.0f
};
ushort[] CubeElements = new ushort[]
{
0, 1, 2, 2, 3, 0, // front face
3, 2, 6, 6, 7, 3, // top face
7, 6, 5, 5, 4, 7, // back face
4, 0, 3, 3, 7, 4, // left face
0, 1, 5, 5, 4, 0, // bottom face
1, 5, 6, 6, 2, 1, // right face
};
byte[] square_colors = {
255, 255, 0, 255,
0, 255, 255, 255,
0, 0, 0, 0,
255, 0, 255, 255,
255, 255, 0, 255,
0, 255, 255, 255,
0, 0, 0, 0,
255, 0, 255, 255,
};
}
}
_______________________________________________
Monodroid mailing list
[email protected]
UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid