第一个OpenGL程序
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程序相关推荐
- OpenGL学习笔记:第一个OpenGL程序完全注释
运行环境: CentOS7 g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) OpenGL实现厂商的名字:VMware, Inc. 渲染器标识符:Gallium ...
- (第二章)OpGL超级宝典学习:创建我们第一个OpenGL程序,绘制一个点和三角形
目录 前言 创建简单的应用 创建脚本 渲染底色 渲染底色plus 使用着色器(shader) 什么是着色器(shader) GLSL OpenGL的着色阶段 编写着色器 顶点着色器 片段着色器 sha ...
- 计算机图形学基础(第二版)陆枫 何云峰(2)我的第一个OpenGL程序
实际这已经不是我第一次敲这个程序了,但是基于老师在给我们上这门课时实在没搞懂,还是决定自己在敲几遍,方便期末复习. 下面开始绘制矩形啦! /* * * 我使用的IDE是Code::Bloc ...
- OpenGL---Windows下配置与第一个OpenGL程序
下面记录一下Windows下配置OpenGL与我的第一个OpenGL程序. 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ B ...
- 【OpenGL】详解第一个OpenGL程序
写在前面 OpenGL能做的事情太多了!很多程序也看起来很复杂.很多人感觉OpenGL晦涩难懂,原因大多是被OpenGL里面各种语句搞得头大,一会gen一下,一会bind一下,一会又active一下. ...
- OpenGL学习(二)第一个OpenGL程序,绘制三角形
2. 第一个OpenGL窗口程序 2.1 glfw库 一个轻量级的,开源的,跨平台的library.支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等.因为OpenGL没有窗口管 ...
- 《OpenGL超级宝典第5版》学习笔记(一)—— 第一个OpenGL程序
// GLTools库包含了一个用于操作矩阵和向量的3D数学库,并依靠GLEW获得OpenGL3.3中用来产生和渲染一些简单3D对象的函数, // 以及对视觉平截头体.相机类和变换矩阵进行管理的函数的 ...
- 【OpenGL】VAO数组实现一个OpenGL程序绘制多个图形:绘制五星红旗
如何绘制五角星见:http://t.csdn.cn/5rMA1,本文国旗由五个五角星组成 使用OpenGL通过VAO数组.VBO数组和EBO数组绘制五星红旗 #include<iostream& ...
- 基于textureview编写opengl程序
与SurfaceView相比,TextureView并没有创建一个单独的Surface用来绘制,这使得它可以像一般的View一样执行一些变换操作,设置透明度等. 另外,Textureview必须在硬件 ...
最新文章
- 2022-2028年中国网络直播行业深度调研及投资前景预测报告
- ffmpeg命令 音频文件格式转换
- UVA - 1378 A Funny Stone Game(博弈+sg函数)
- Markdown中数学公式整理
- 关于怎么怎么把 unsingned char 数据转换为 Opencv 的Mat类型,并且吧图像显示出来
- java timezone_Java TimeZone useDaylightTime()方法与示例
- SQLite | Case 子句
- javascript -- 事件--事件流-- 冒泡 --捕获
- C#类的定义与对象使用
- activity启动模式之standard
- linux中的略过目录什么意思如何解决
- 力扣刷题 DAY_71 回溯
- 蓝桥杯 完全二叉树的权值
- 九爷带你了解 深入理解 Memcache 原理
- 如何做一份好的竞品分析:商业WIFI竞品分析让你不再跳坑
- ubuntu安装chrome浏览器64位
- 概率统计Python计算:样本数据的经验分布函数
- 顺序图和活动图的一个区别
- 轻松解决 “Error creating bean with name 'indentDao' defined in file”的错误(一)
- 如何将多个doc文档合并在一起