OpenGL包含200多个函数,大致分为如下几类函数:

  • 图元函数(primitive function)指定要生成屏幕图像的图元。包括两种类型:可在二维、三维或四维空间进行定义的几何图元,如多边形;离散实体,如位图。
  • 属性函数(attribute function)负责控制图元的外观。这类函数定义了颜色、线型、材质属性、光照以及纹理。
  • 观察函数(viewing function)指定摄像机的属性。 OpenGL提供一个虚拟摄像机,我们可以相对于由图元函数定义的对象设置摄像机的位置和朝向。我们也可以控制摄像机的镜头参数,以便制造出广角或长焦的效果。
  • 控制函数(control function)允许我们启用或禁用各种OpenGL特性,如消隐、纹理映射和光照等。
  • 查询函数(query function)允许我们决定某一特定系统的性能以及OpenGL状态变量的取值。
  • 输入与窗口函数不属于OpenGL核心库,但是由于它们在交互式程序中的重要地位,这类函数已被包含在GLUT库中。这些函数使我们能够对屏幕中的窗口进行控制并使用鼠标和键盘。

下面这是一段C语言编写的一个简单的opengl, 作为以后测试其他opengl程序的框架程序,代码如下:

/** 第一个opengl程序* 功能:在黑色背景中绘制一个白色重矩形* * */ #include <GL/glut.h>void display()
{glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5, -0.5);glVertex2f(-0.5, 0.5);glVertex2f(0.5, 0.5);glVertex2f(0.5, -0.5);glEnd();//opengl出于效率的考虑,对绘制命令进行了缓存,调用glFlush()函数将强制绘制器将结果立即输出glFlush();
}void init()
{//清屏, 颜色为黑色glClearColor(0.0, 0.0, 0.0, 0.0);//设置填充色为白色glColor3f(1.0, 1.0, 1.0);//设置裁剪视图glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
}int main(int argc, char **argv)
{glutInit(&argc, argv);glutCreateWindow("simple");glutDisplayFunc(display);init();glutMainLoop();//仅为了消除某些编译的警告, 无用代码return 0;
}

运行效果如下:

下面这段是Qt下的版本, 同样作为以后测试程序的模板程序,代码如下:

myglwidget.h

#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H#include <QGLWidget>class MyGLWidget : public QGLWidget
{Q_OBJECT
public:explicit MyGLWidget(QWidget *parent = 0);signals:public slots:protected:// Set up the rendering context, define display lists etc.:void initializeGL();void resizeGL(int w, int h);void paintGL();};#endif // MYGLWIDGET_H

myglwidget.cpp

#include "myglwidget.h"MyGLWidget::MyGLWidget(QWidget *parent) :QGLWidget(parent)
{
}void MyGLWidget::initializeGL(){//清屏, 颜色为黑色glClearColor(0.0, 0.0, 0.0, 0.0);//设置填充色为白色glColor3f(1.0, 1.0, 1.0);//设置裁剪视图glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-1.0, 1.0, -1.0, 1.0);}void MyGLWidget::resizeGL(int w, int h){// setup viewport, projection etc.:glViewport(0, 0, (GLint)w, (GLint)h);}void MyGLWidget::paintGL(){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5, -0.5);glVertex2f(-0.5, 0.5);glVertex2f(0.5, 0.5);glVertex2f(0.5, -0.5);glEnd();//opengl出于效率的考虑,对绘制命令进行了缓存,调用glFlush()函数将强制绘制器将结果立即输出glFlush();}

main.cpp

#include <QApplication>
#include "myglwidget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);MyGLWidget win ;win.show();return a.exec();
}

运行效果如下:

转载于:https://my.oschina.net/fuyajun1983cn/blog/263781

第一个OpenGL程序相关推荐

  1. OpenGL学习笔记:第一个OpenGL程序完全注释

    运行环境: CentOS7 g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) OpenGL实现厂商的名字:VMware, Inc. 渲染器标识符:Gallium ...

  2. (第二章)OpGL超级宝典学习:创建我们第一个OpenGL程序,绘制一个点和三角形

    目录 前言 创建简单的应用 创建脚本 渲染底色 渲染底色plus 使用着色器(shader) 什么是着色器(shader) GLSL OpenGL的着色阶段 编写着色器 顶点着色器 片段着色器 sha ...

  3. 计算机图形学基础(第二版)陆枫 何云峰(2)我的第一个OpenGL程序

    实际这已经不是我第一次敲这个程序了,但是基于老师在给我们上这门课时实在没搞懂,还是决定自己在敲几遍,方便期末复习. 下面开始绘制矩形啦! /* * *       我使用的IDE是Code::Bloc ...

  4. OpenGL---Windows下配置与第一个OpenGL程序

    下面记录一下Windows下配置OpenGL与我的第一个OpenGL程序. 第一步:选择一个编译环境    现在Windows系统的主流编译环境有Visual Studio,Broland C++ B ...

  5. 【OpenGL】详解第一个OpenGL程序

    写在前面 OpenGL能做的事情太多了!很多程序也看起来很复杂.很多人感觉OpenGL晦涩难懂,原因大多是被OpenGL里面各种语句搞得头大,一会gen一下,一会bind一下,一会又active一下. ...

  6. OpenGL学习(二)第一个OpenGL程序,绘制三角形

    2. 第一个OpenGL窗口程序 2.1 glfw库 一个轻量级的,开源的,跨平台的library.支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等.因为OpenGL没有窗口管 ...

  7. 《OpenGL超级宝典第5版》学习笔记(一)—— 第一个OpenGL程序

    // GLTools库包含了一个用于操作矩阵和向量的3D数学库,并依靠GLEW获得OpenGL3.3中用来产生和渲染一些简单3D对象的函数, // 以及对视觉平截头体.相机类和变换矩阵进行管理的函数的 ...

  8. 【OpenGL】VAO数组实现一个OpenGL程序绘制多个图形:绘制五星红旗

    如何绘制五角星见:http://t.csdn.cn/5rMA1,本文国旗由五个五角星组成 使用OpenGL通过VAO数组.VBO数组和EBO数组绘制五星红旗 #include<iostream& ...

  9. 基于textureview编写opengl程序

    与SurfaceView相比,TextureView并没有创建一个单独的Surface用来绘制,这使得它可以像一般的View一样执行一些变换操作,设置透明度等. 另外,Textureview必须在硬件 ...

最新文章

  1. 2022-2028年中国网络直播行业深度调研及投资前景预测报告
  2. ffmpeg命令 音频文件格式转换
  3. UVA - 1378 A Funny Stone Game(博弈+sg函数)
  4. Markdown中数学公式整理
  5. 关于怎么怎么把 unsingned char 数据转换为 Opencv 的Mat类型,并且吧图像显示出来
  6. java timezone_Java TimeZone useDaylightTime()方法与示例
  7. SQLite | Case 子句
  8. javascript -- 事件--事件流-- 冒泡 --捕获
  9. C#类的定义与对象使用
  10. activity启动模式之standard
  11. linux中的略过目录什么意思如何解决
  12. 力扣刷题 DAY_71 回溯
  13. 蓝桥杯 完全二叉树的权值
  14. 九爷带你了解 深入理解 Memcache 原理
  15. 如何做一份好的竞品分析:商业WIFI竞品分析让你不再跳坑
  16. ubuntu安装chrome浏览器64位
  17. 概率统计Python计算:样本数据的经验分布函数
  18. 顺序图和活动图的一个区别
  19. 轻松解决 “Error creating bean with name 'indentDao' defined in file”的错误(一)
  20. 如何将多个doc文档合并在一起

热门文章

  1. skyline三维模型规格
  2. Varnish页面缓存服务
  3. Spring,为内部方法新起一个事务,此处应有坑。
  4. Office365 用户同步排错思路
  5. Yahoo前端优化性能规则
  6. Exchange 2010与Exchange Online混合部署PART 5:配置边缘
  7. 微信公众平台消息接口开发(13)多语种互译
  8. 域名端口自己电脑做服务器续,用默认端口,自动跳转到默认项目 【直接用域名访问我们本机的项目】...
  9. sql--找含有制定字符列的表
  10. 负载均衡器技术 Nginx VS F5 Big-IP