文档章节

OpenGL学习(二)第一个程序

痞子蔡
 痞子蔡
发布于 2014/10/22 22:24
字数 741
阅读 35
收藏 1

开发环境搭建好后,可以正式开始写代码了。

一.

图中或许是最简单的创建OpenGL窗口的代码了,因为很多非常有用的初始化工作还没做,不过这并不妨碍我们看到结果,如果一切编译正常通过的话,运行后你将看到一个小窗口(freeglut默认的大小是300x300),窗口的内容是无法预料的,或许是黑色,或许是屏幕内容。如果编译出错,那可能是开发环境没配置好。如果编译通过却看不到窗口,那你可能还要继续往下看!



二.

        相信接触过GUI编程的小伙伴对上面的几行代码很容易理解,初始化,创建窗口,主循环,没什么不懂的。接下来我们要给它增添几行代码,以使它能更好的按照我们的意图工作。


再次编译运行,我们可以看到一个大小为640x480大小的黑色窗口。

在main函数里,我们初始化显示模式为RGBA和双缓冲,大部分时候双缓冲(GLUT_DOUBLE)比单缓冲(GLUT_SINGLE)更好用,所以这里我们直接谈论双缓冲而不讨论单缓冲了。对于freeglut, 默认的显示模式是GLUT_SINGLE|GLUT_RGBA|GLUT_DEPTH,如果使用单缓冲,我们不必显式的调用glutInitDisplayMode。


三.

        值得一提的是,虽然这些代码仅30行,但是里面的坑却不少。

        首先,初始化窗口大小和位置的函数必须在创建窗口之前调用,否则不会起作用。上面的代码,如果把glutInitWindowSize和glutCreateWindow函数的位置互换,那么窗口的大小其实只有300x300(freeglut默认值), 而不是我们的680x480。

        其次,必须要显式的调用glClearColor设置背景颜色,因为glut没有默认的背景色。同时,渲染窗口的操作必须在创建窗口之后调用,如果把glutCreateWindow函数放在glutDisplayFunc函数之后,那么glutDisplayFunc没有任何效果,窗口背景不会被涂成黑色。

        再者,由于OpenGL是基于状态机的,所以render函数中,glClear清理操作不会被立刻执行,只有加上glutSwapBuffers函数,强制执行操作,所以的操作才会被真正执行。如果没有glutSwapBuffes,glClear无法使背景变为黑色。gl.h中有一个类似的函数glFlush, 这个函数是对于单缓冲模式而言的,对于双缓冲则没有效果。但glutSwapBuffers既可以用于双缓冲也可以用于单缓冲,因为glutSwapBuffers内部调用了glFlush。如果是单缓冲模式,glutSwapBuffers完全等同于glFlush,只有在双缓冲模式下,glutSwapBuffers除了执行glFlush外, 还会执行额外的操作。因此我建议无论何时最好使用glutSwapBuffers。


下一篇将介绍如何画基本的几何图形。


© 著作权归作者所有

痞子蔡
粉丝 8
博文 14
码字总数 3127
作品 0
南昌
私信 提问
OpenGL学习入门之VS2010环境配置 [转]

OpenGL开发环境简介    基于OpenGL标准开发的应用程序运行时需有动态链接库OpenGL32.DLL、Glu32.DLL,这两个文件在安装Windows NT时已自动装载到C:WINDOWSSYSTEM32目录下(这里假定用户将W...

IMGTN
2012/07/24
328
0
Android图形---OpenGL(二)

本文译自:http://developer.android.com/guide/topics/graphics/opengl.html OpenGL 包 一旦使用GLSurfaceView和GLSurfaceView.Renderer类给OpenGL建立了一个View容器,那么就可以开始使用以...

长平狐
2012/10/16
138
0
OpenGL ES Programming Guide for iOS 第一章

关于OpenGL ES Open Graphics Library(OpenGL)用于二维及三维数据的可视化。它是一种多用途的开放标准图形库,支持二维和三维数位内容创作,机械和建筑设计,虚拟样,飞行模拟,游戏,以及更...

长平狐
2012/10/08
490
0
VS2010配置OpenGL开发环境

最近开始研究OpenGL了,下面是网上看到的一篇入门VS2010上环境配置的文章 OpenGL(Open Graphics Library)是一个跨编程语言、跨平台的专业图形程序接口。 OpenGL是SGI公司开发的一套计算机图形...

TinkerS
2012/11/14
837
0
图片和图形之用OpenGL ES显示图形(9)

原文 概要 Android框架提供了大量用于创建有吸引力的功能性图形用户界面的标准工具。但是,如果您想要更多地控制应用程序在屏幕上绘制的内容,或者冒险进入三维图形,则需要使用其他工具。A...

lichong951
2018/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

02.日志系统:一条SQL更新语句是如何执行的?

我们还是从一个表的一条更新语句说起,我们创建下面一张表: create table T(ID int primary key, c int); 如果要将ID=2这一行c的值加1,SQL可以这么写: update T set c=c+1 where ID=2; 前...

scgaopan
今天
7
0
【五分钟系列】掌握vscode调试技巧

调试前端js 准备一个前端项目 index.html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1......

aoping
今天
6
0
PhotoShop 高级应用:USM锐化/S锐化/防抖

、 高反差锐化+混合模式:叠加模式 【将更多的边缘细节添加到图像中】

东方墨天
今天
7
0
Python数据可视化之matplotlib

常用模块导入 import numpy as npimport matplotlibimport matplotlib.mlab as mlabimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmfrom mpl_toolkits.mplot3d i......

松鼠大帝
昨天
5
0
我用Bash编写了一个扫雷游戏

我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法。比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习。 我在...

老孟的Linux私房菜
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部