博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opengl微开发之1-从零開始
阅读量:5927 次
发布时间:2019-06-19

本文共 3242 字,大约阅读时间需要 10 分钟。

对OpenGL有一点了解之后,如今開始真正编写代码。

今天的内容:

        使用FreeGLUT创建OpenGL的上下文环境

        初始化GLEW

        创建一个OpenGL的的模板范例

第一步:

         一个OpenGL的上下文能够同意我们传递命令究竟层硬件,所以须要一个上下文环境。首先须要配置一个功能窗体,创建一个名为chapter1.c的文件,在你的编辑器或者集成开发环境中打开它,插入例如以下代码:

#include 
#include
#include
#include
#include
#define WINDOW_TITLE_PREFIX "Chapter 1" int CurrentWidth = 800, CurrentHeight = 600, WindowHandle = 0; void Initialize(int, char*[]);void InitWindow(int, char*[]);void ResizeFunction(int, int);void RenderFunction(void); int main(int argc, char* argv[]){ Initialize(argc, argv); glutMainLoop(); exit(EXIT_SUCCESS);} void Initialize(int argc, char* argv[]){ InitWindow(argc, argv); fprintf( stdout, "INFO: OpenGL Version: %s\n", glGetString(GL_VERSION) ); glClearColor(0.0f, 0.0f, 0.0f, 0.0f);} void InitWindow(int argc, char* argv[]){ glutInit(&argc, argv); glutInitContextVersion(4, 0); glutInitContextFlags(GLUT_FORWARD_COMPATIBLE); glutInitContextProfile(GLUT_CORE_PROFILE); glutSetOption( GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS ); glutInitWindowSize(CurrentWidth, CurrentHeight); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); WindowHandle = glutCreateWindow(WINDOW_TITLE_PREFIX); if(WindowHandle < 1) { fprintf( stderr, "ERROR: Could not create a new rendering window.\n" ); exit(EXIT_FAILURE); } glutReshapeFunc(ResizeFunction); glutDisplayFunc(RenderFunction);} void ResizeFunction(int Width, int Height){ CurrentWidth = Width; CurrentHeight = Height; glViewport(0, 0, CurrentWidth, CurrentHeight);} void RenderFunction(void){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSwapBuffers(); glutPostRedisplay();}
编译执行之,将会得到例如以下窗体:

解释:

WINDOW_TITLE_PREFIX  定义窗体名字

CurrentWidth、CurrentHeight  窗体的尺寸

WindowHandle   FreeGLUT创建的窗体处理句柄

初始化:

声明函数原形并定义main应用程序入口函数,在Initialize函数中调用InitWindow函数。InitWindow调用几个FreeGLUT函数创建一个窗体,以glutInit函数開始,其作用是初始化FreeGLUT类库。其參数是main传入的两个參数,你也能够不使用不论什么參数。

上下文类型和窗体选项:

        glutInitContextVersion

        glutInitContextFlags

        glutInitContextFrofile

        glutSetOption 其參数GLUT_ACTION_ON_WINDOW_CLOSE是确保glutMainLoop函数在main结束时将其清除。

        glutInitWindowSize 初始化窗体的尺寸

显示模式:

        glutInitDisplayMode  定义OpenGL上下文类型,设备应该怎样渲染场景,选择有:

                                    GLUT_DEPATH  启动Depth buffer,也叫Z-buffer,依据它来决定像素屏幕上的渲染顺序

                                     GLUT_DOUBLE  启动 double-buffer,也就是开启前后端显示缓存,主要是降低图片的闪烁

                                     GLUT_RGBA        定义色彩的混合模式,即RGBA混合模式

创建窗体:

glutCreateWindow 创建我们的上下文环境并返回新创建的窗体处理句柄。其參数WINDOW_TITLE_PREFIX即窗体的名称

函数回调:

glutReshapeFunction 处理窗体尺寸

glutDisplayFunction  渲染场景

调试输出:

glGetString 获取OPengl的版本号

fprintf  c函数,打印字符

例如以下:

屏幕刷新颜色:

      glClearColor  其參数相应的是FreeGLUT的GLUT_RGBA设置模式,值范围0~1.0f相应1~100%色彩强度。

      以下是RGBA的混合直观效果图:

   样例:

         

  • glClearColor(1.0f, 0.0f, 0.0f, 0.0f); for red
  • glClearColor(0.0f, 1.0f, 0.0f, 0.0f); for green
  • glClearColor(0.0f, 0.0f, 1.0f, 0.0f); for blue
  • glClearColor(1.0f, 0.0f, 1.0f, 0.0f); for purple
  • glClearColor(0.0f, 0.0f, 0.5f, 0.0f); for dark blue
最后的參数是透明度。
主循环:
       glutMainLoop 仅仅要窗体处于活动状态,就会不断运行这个函数,知道窗体退出。
       
重置渲染尺寸:
        ResizeFunction 其CurrentWith和CurrentHeight窗体尺寸
         glViewpoirt  參数为X-coordinate,Y-coordinate,width,height即渲染的规格尺寸
渲染:
   RenderFunction 绘制对象
   glclear 即第一次往后端缓存中填充的颜色,之后在上面绘制其它对象
   glutSwapBuffer 交换前后端显示缓存数据
调用玩glutSwapBuffers之后:
加入GLEW:

转载地址:http://dohvx.baihongyu.com/

你可能感兴趣的文章
在MOSS中开发和部署Infopath
查看>>
Node.js meitulu图片批量下载爬虫1.01版
查看>>
宽字符编码和解码通用类[CodeWidthChartUtility]
查看>>
javascript:浮动div,可拖拽div,遮罩层(div和iframe实现)
查看>>
java03
查看>>
Go语言并发机制初探
查看>>
如何在6-8小时之内读完300页的书?
查看>>
发布一个免费漂亮的仿Outlook风格、支持换肤的通用界面框架
查看>>
你所不知道的 CSS 动画技巧与细节
查看>>
LeetCode:Valid Parentheses
查看>>
druid相关的时间序列数据库——也用到了倒排相关的优化技术
查看>>
Curator Zookeeper分布式锁
查看>>
XSLT 的调试
查看>>
【管理学习】团队领导力之辅导
查看>>
我在经网的日子---从1个程序员开始建立的规范技术团队
查看>>
Git和Github简单教程【转】
查看>>
apue.h头文件
查看>>
Android -- 解析xml
查看>>
.net面向对象学习笔记
查看>>
基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 模块插件集成
查看>>