opengl (1) 基本API的熟悉
1 运行如下代码,可以看到如下效果,我们利用opengl画出一个三角形。
void renderScene(void)
{
/*
glClear清除缓冲区
*/
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /*
将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作
1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。
3.中心左面的坐标值是负值,右面是正值。
移向屏幕顶端是正值,移向屏幕底端是负值。
移入屏幕深处是负值,移出屏幕则是正值。
*/
glLoadIdentity(); /*
画出三个顶点,根据这三个顶点链接成一个凸包
*/ glBegin(GL_TRIANGLES);//GL_TRIANGLES三角形
glVertex3f(-1.0, -1.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
glVertex3f(0.0, 1.0, 0.0);
glEnd(); /*
双缓冲模式
与 glutInitDisplayMode(GLUT_RGBA) 对应
*/
glutSwapBuffers();
}
这个代码中需要解释的是glLoadIdentity(),假如这个函数去掉,当我们窗口大小变化的时候,窗口中的所有东西都会消失。
这个小小的细节涉及到opengl的渲染机制,opengl有个变化矩阵堆栈,opengl中的每个定义好的将要渲染的矩阵呈现之前都要先乘以栈顶的矩阵。glLoadIdentity()将栈顶的矩阵设置为固定不变的单位矩阵,所以当窗口大小变化需要重绘窗口的时候,就可以就可以保持不变了。
其他情况类似的情况如下:
glTranslatef:将T(x,y,z)右乘与堆栈的栈顶变换矩阵。右乘的解释,假设目前栈顶变换矩阵为M,那么就相当于把M修改为M*T.
glRotatef :将R(x,y,z,s)右乘与堆栈的栈顶变换矩阵。
glLoadIdentity:将堆栈的栈顶变换矩阵设置成单位矩阵。
glPushMatrix:将堆栈的栈顶变换矩阵复制一份,然后Push到堆栈中。所谓Push,就像塞子弹一样把一个矩阵压入到堆栈中,此时,栈顶就是这个新的矩阵了,注意定义的向量都是和栈顶变换矩阵作用的。
glPopMatrix:将堆栈的栈顶变换矩阵Pop出来。
更多细节参考 http://wenku.baidu.com/view/a4f5748fcc22bcd126ff0c1a.html
2 关于视图显示 glViewport();glOrtho();
void renderScene_1(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT); /*
画笔的颜色
*/
glColor3f(1.0, 1.0, 0.0); glLoadIdentity(); /*
http://hi.baidu.com/xun1573/item/a872977f9fbbbd366cc37c6f
http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html
glOrtho获取截屏
procedure glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);
拉伸之后放在glViewPort上,
根据glViewPort(x, y, width, height)
放在总的窗口上的(x, y)坐标上
*/ glViewport(, , , );
glOrtho(0.25, 0.25, 0.75, 0.75, -0.0, 0.5); /*
画一个正方形
*/ glBegin(GL_POLYGON);
{
glVertex3f(0.25, 0.25, 0.0);
glVertex3f(0.75, 0.25, 0.0);
glVertex3f(0.75, 0.75, 0.0);
glVertex3f(0.25, 0.75, 0.0);
}
glEnd(); /*
双缓冲渲染
*/ glutSwapBuffers();
}
http://hi.baidu.com/xun1573/item/a872977f9fbbbd366cc37c6f
http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html
opengl (1) 基本API的熟悉的更多相关文章
- OpenGL FrameBufferCopy相关Api比较(glCopyPixels,glReadPixels,glCopyTexImage2D,glFramebufferTexture2D)
OpenGL FrameBufferCopy相关Api比较 glCopyPixels,glReadPixels,glCopyTexImage2D,glFramebufferTexture2D 标题所述 ...
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- guava 学习笔记 瓜娃(guava)的API快速熟悉使用
1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API C ...
- 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API C ...
- 【转】瓜娃(guava)的API快速熟悉使用
http://www.cnblogs.com/snidget/archive/2013/02/05/2893344.html 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: I ...
- Android 中建立一个OpenGL ES的开发环境
转自: http://wiki.eoe.cn/page/Building_an_OpenGL_ES_Environment.html 负责人:zhangql原文链接:http://docs.eoean ...
- Vulkan在Android使用Compute shader
oeip 相关功能只能运行在window平台,想移植到android平台,暂时选择vulkan做为图像处理,主要一是里面有单独的计算管线且支持好,二是熟悉下最新的渲染技术思路. 这个 demo(git ...
- OpenGL ES: (4) EGL API详解 (转)
上一节我们初步学习了 OpenGL ES.EGL.GLSL 的相关概念,了解了它们的功能,以及它们之间的关联.我们知道了 EGL 是绘制 API(比如 OpenGL ES)与 底层平台窗口系统之间的接 ...
- OpenGL 开始学习指南
近期需要做一个涌潮的预报与仿真模拟,为了使模型更具有真实感,且逼真,使用起来更灵活.感觉还是得从基础的OpenGL学习.鉴于Direct3D技术存在的众多不确定性,且评论不太好的原因,决定用OpenG ...
随机推荐
- linux安装mysql出现Could NOT find Curses (missing CURSES_LIBRARY CURSES_INCLUDE_PATH),提示解决方法
[root@localhost mysql-5.5.11]# cmake . 出现以下错误提示: -- Could NOT find Curses (missing: CURSES_LIBRARY ...
- mysql 导出导入数据库中所有数据
导出数据库所有数据 >mysqldump -uroot -proot -all hzgajzyz>e:/hzgajzyz.sql 导入数据库所有数据 >source e:/hzgaj ...
- merge into 和 update 的效率对比
以前只考虑 merge into 只是在特定场合下方便才使用的,今天才发现,merge into 竟然会比 update 在更新数据时有这么大的改进.其实呢,merge into部分的update和u ...
- 【java】Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签
摘录某个工程的 web.xml 文件片段: 访问顺序为1—>2—>3—>4,其中2和3的值必须相同. url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命 ...
- Spring核心框架 - AOP的起源及介绍
一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...
- iOS8定位问题
正文:主要解决iOS8以前能定位,但是在iOS8时候无法定位的问题 在iOS8以前,我们的GPS定位是在用户设置的里面显示的是总是使用,但是在iOS8以后,苹果修改了这部分授权,你需要多加入2个pli ...
- Oracle数据库的下载和安装
那天分享一下Oracle的下载和安装的过程,有需要的朋友可以借鉴参考一下.如有雷同不胜感激! 首先可以到Oracle的官网下载Oracle的最次年版本的Oracle数据库.一下是个人下载的数据库版本百 ...
- python登录豆瓣,发帖
学习了urllib.urllib2及cookielib常用方法的使用登录豆瓣,由于有验证码,采取的办法是将验证码图片下载到同目录下,查看图片后输入验证码即可登录.发帖帖子内容写死在代码中了 [Pyth ...
- 9个Java性能优化工具汇总
本文来自blog.idrsolutions.com 1.NetBeans profiler NetBeans Profiler是一个模块化的添加,为NetBeans IDE提供分析功能,它是一个开源的 ...
- 网上测试了很多关于PYTHON的WEBSOCKET样例,下面这个才成功了
这是最底层的, 嘿嘿,我 还是习惯搞个框架来实现急需要的功能... 这个东东玩得很有意思的.. 服务器端的代码: import simplejson import socket import sys ...