【C#/OpenGL】将OpenGL的坐标系转换为普通屏幕坐标系处理的方法(基于CSGL)
来源:互联网 发布:企业网络危机公关 编辑:程序博客网 时间:2024/06/05 12:40
在用OpenGL编写2D游戏或者其他图形程序时,很多人应该和我一样习惯于Windows的屏幕坐标系风格了(即左上角为(0,0),右下角为(屏幕宽度,屏幕高度))。在传统的GDI图形程序中,以及常规的Windows程序的界面控件布局,都是基于这样的坐标系。
在OpenGL中,坐标是基于浮点的,坐标一般的取值范围为(-1.0,1.0), 原点坐标(0,0)位于屏幕的正中心,对于习惯了传统Windows编程的人来说,要转换到OpenGL的坐标使用中会有一段比较痛苦的适应过程。
我找到了一个比较折中的办法,通过封装一个绘图函数,可以通过传统WIndows屏幕坐标系来调用OpenGL的绘图功能。
初始化代码:
//设置视口 GL.gluOrtho2D(0.0,ScreenWidth, <span style="font-family: Arial, Helvetica, sans-serif;">ScreenHeight</span>.0,);通过设置视口,将OpenGL的显示区域坐标范围调整到窗口或者屏幕的宽度,高度。
绘图代码:
/// <summary> /// 绘制纹理 /// </summary> /// <param name="texture">纹理ID</param> /// <param name="x">起点x</param> /// <param name="y">起点y</param> /// <param name="width">宽度</param> /// <param name="height">高度</param> 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);
<pre class="csharp" name="code"><span style="white-space:pre"></span>GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex2f(x, y + height);GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex2f(x + width, y + height);
<span style="white-space:pre"></span><pre class="csharp" name="code"><span style="white-space:pre"></span>GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex2f(x + width, y);<span style="font-family: Arial, Helvetica, sans-serif;"> </span>} GL.glEnd(); }
这样做虽然可能会有诸多缺陷,也不是OpenGL的正确使用方法,但是不失为一个折中而又带来便利的临时解决方法。
0 0
- 【C#/OpenGL】将OpenGL的坐标系转换为普通屏幕坐标系处理的方法(基于CSGL)
- openGL 坐标系的互相转换
- OpenGL坐标系之间的转换
- OpenGL的坐标系
- opengl的全局坐标系
- opengl的坐标系
- OpenGL的坐标系
- OpenGL坐标系的理解
- cocos2d中的屏幕坐标系和OPenGL坐标系转换
- cocos2d中的屏幕坐标系和OPenGL坐标系转换
- 世界坐标系,本地坐标系,opengl坐标系,屏幕坐标系
- 世界坐标系,本地坐标系,opengl坐标系,屏幕坐标系
- cocos2d-x 世界坐标系、屏幕坐标系、本地坐标系、opengl坐标系
- Cocos2d世界坐标系,本地坐标系,opengl坐标系,屏幕坐标系
- OpenGL坐标系之间的变换
- opengl中坐标系的理解
- CSGL(OpenGL C#)下的文字输出
- CSGL(OPENGL C#)下的抛物样条曲线
- Session的工作原理
- Linux下gSOAP生成webservice客户端代码 的使用心得
- Dojo入门三种HelloWorld!
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
- js寻路算法
- 【C#/OpenGL】将OpenGL的坐标系转换为普通屏幕坐标系处理的方法(基于CSGL)
- 什么是Dojo?与Jquery宏观对比,结果如何?
- 解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 问题
- C#开发Unity游戏教程之游戏对象的行为逻辑方法
- 一步一步学内核(Linux kernel) -----之1:linux内核学习资料
- 黑马程序员——Java基础---集合总结
- Qt程序"没有找到mingwm10.dll"的解决办法
- 学习SIP非常好的视频
- xcode6.1 UITableView viewWithTag