opengl微开发之1-从零開始
对OpenGL有一点了解之后,如今開始真正编写代码。
今天的内容:
使用FreeGLUT创建OpenGL的上下文环境
初始化GLEW
创建一个OpenGL的的模板范例
第一步:
一个OpenGL的上下文能够同意我们传递命令究竟层硬件,所以须要一个上下文环境。首先须要配置一个功能窗体,创建一个名为chapter1.c的文件,在你的编辑器或者集成开发环境中打开它,插入例如以下代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <GL/glew.h>
#include <GL/freeglut.h>
#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 redglClearColor(0.0f, 1.0f, 0.0f, 0.0f);for greenglClearColor(0.0f, 0.0f, 1.0f, 0.0f);for blueglClearColor(1.0f, 0.0f, 1.0f, 0.0f);for purpleglClearColor(0.0f, 0.0f, 0.5f, 0.0f);for dark blue
參数为X-coordinate,Y-coordinate,width,height即渲染的规格尺寸



opengl微开发之1-从零開始的更多相关文章
- 从零開始学习OpenCL开发(一)架构
多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零開始做OpenCL开发>系列文章的 ...
- 从零開始学Swift之Hello World进化版
上节课,也就是昨晚啦,我们学习到从零開始学Swift之Hello World.那一节仅仅有一句代码,大家会认为不够过瘾. 那么这节课,就给大家来多点瘾货吧! 先上图! //var 代表变量的类型, s ...
- 关东升的《从零開始学Swift》即将出版
大家好: 苹果2015WWDC大会公布了Swift2.0,它较之前的版本号Swift1.x有非常大的变化.所以我即将出版<从零開始学Swift><从零開始学Swift>将在&l ...
- # 从零開始搭建Hadoop2.7.1的分布式集群
Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,可是确实有非常多细节须要注意.不然会造成很多配置错误的情况.尽量保证一次配置正确防止重复改动. 网上教程有非常 ...
- Bmob移动后端云服务平台--Android从零開始--(二)android高速入门
Bmob移动后端云服务平台--Android从零開始--(二)android高速入门 上一篇博文我们简介何为Bmob移动后端服务平台,以及其相关功能和优势. 本文将利用Bmob高速实现简单样例,进一步 ...
- 从零開始怎么写android native service?
从零開始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,非常多人可能会认为服务非常easy. 服务是简单,由于复杂 ...
- Bmob移动后端云服务平台--Android从零開始--(一)何为Bmob
Bmob移动后端云服务平台--Android从零開始--(一)何为Bmob 在正式的项目开发中,单client不能满足我们的需求,须要实现client与服务端的连接. 而在编写Android服务端代码 ...
- 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹
<PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...
- 从零開始开发Android版2048 (二)获取手势信息
今天是尝试開始Android版2048小游戏的第二天.在今天,我主要学习了怎样获取用户在屏幕滑动的手势,以及对布局进行了一些小小的完好. 获取用户操作的手势(比方向左滑.向右滑等)主要用到了Gestu ...
随机推荐
- opencv2使用形态学滤波对图像进行边缘及角点检測
#if !defined MORPHOF #define MORPHOF #include <opencv2/core/core.hpp> #include <opencv2/img ...
- Hibernate 学习教程
第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个演示样例HibernateHelloWorld 7 第7 ...
- 用正交多项式作最小二乘拟合的java实现(转)
import java.util.Scanner; public class Least_square_fit { public static double Least_square_method(i ...
- 一起学习android图像缩放资源 (27)
效果图: 在平时载入图片时,我会使用SetImageBitmap.setImageResource.BitmapFactory.decodeResource来设置一张图 片通过以上方法来设置图片时.会 ...
- ios崩溃日志1
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not loa ...
- Reorder List [leetcode] 这两种思路
第一个想法随着vector保存全部Node* 表拼接出来 void reorderList(ListNode *head) { vector<ListNode*> content; Lis ...
- OpenGL中shader使用
学了接近一个月的OpenGL,最终要排上用场了...好吧,就从学到的shader(着色器)开刀吧. 先简单的介绍shader,shader事实上是显卡的功能,就是利用显卡的GPU去做图像处理的工作,而 ...
- 看你的门-攻击服务器(4)-HTTP参数注入攻击
首先需要声明.这纯粹是没有远见和有点真才实学开发一个愚蠢的观点,只为web参考系统安全. 1.HTTP参数注入攻击 參数,被用做后端HTTP请求中的參数,这个时候就有可能会导致HTTP參数注入. 一个 ...
- android 实现悬架控制
实现桌面View 如桌面歌词 1)将要显示在桌面的view,通过WindowManager.addView.挂在到WindowManager下;注意,WindowManager对象 ...
- C++ 静态static 变量在 cocos2d-x 里面使用误区
void Cms::showMonster(CCArray* monsterArray,int type) { <span style="color:#ff0000;"> ...