在OpenGL中,坐标是基于浮点的,坐标一般的取值范围为(-1.0,1.0), 原点坐标(0,0)位于屏幕的正中心,对于习惯了传统Windows编程的人来说,要转换到OpenGL的坐标使用中会有一段比较痛苦的适应过程。
我找到了一个比较折中的办法,通过封装一个绘图函数,可以通过传统WIndows屏幕坐标系来调用OpenGL的绘图功能。
初始化代码:
//设置视口
GL.gluOrtho2D(0.0,ScreenWidth, ScreenHeight.0,);
通过设置视口,将OpenGL的显示区域坐标范围调整到窗口或者屏幕的宽度,高度。
绘图代码:
///
/// 绘制纹理
///
/// 纹理ID
/// 起点x
/// 起点y
/// 宽度
/// 高度
public static void DrawImage(uint[] texture, float x, float y, float width, float height)
{
// 绑定纹理
GL.glBindTexture(GL.GL_TEXTURE_2D, texture[0]);
GL.glBegin(GL.GL_QUADS);
{
// 纹理坐标映射
GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex2f(x, y);
GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex2f(x, y + height);
GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex2f(x + width, y + height);
GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex2f(x + width, y);
} GL.glEnd(); }
这样做虽然可能会有诸多缺陷,也不是OpenGL的正确使用方法,但是不失为一个折中而又带来便利的临时解决方法。