OpenGL chapter2
opengl:
	图形硬件的一种软件接口;最大的优点:它的速度快于光线追踪器或软件渲染引擎。
GLUT:
		AUX是OpenGL辅助函数库。
	数据类型:
		GLboolean	位宽:1
		GLbyte			8
		GLubyte		8
		GLuchar		8
		GLshort		16
		GLushort		16
		GLhalf			16	半精度浮点数
		GLint				32
		GLuint			32
		GLsizei			32	无符号32位整数
		GLenum		32	无符号32位整数
		GLfloat			32	32位浮点数
		GLclampf		32	[0,1]范围内的32位浮点数
		GLbitfield	32	32位
		GLdouble	64	64位双精度数
		GLclampd	64	[0,1]范围内的64位双精度数
		GLint64			64	有符号64位整数
		GLuint64		64	无符号64位整数
		GLsizeptr		本地指针大小		无符号整数
		GLintptr		本地指针大小		有符号整数
		GLsync			本地指针大小		同步对象句柄
eg:申明10个GLshort变量数组:
			GLshort shorts[10];
			GLdouble *doubles
2.2.3  OpenGL错误
					Glenum glGetError(void);
		2.2.4 确认版本
					GL函数库可以通过调用glGetString来返回与他们的版本号和生产商有关的特定信息.
					const GLubyte *glGetString(GLenum name);
		2.2.5 使用glHint获取线索
					void glHint(GLenum target,GLenum mode);
		2.2.6 OpenGL状态机
					void glEnable (GLenum capability);
					void glDisable(GLenum capability);
eg:以深度测试为例
							glEnable(GL_DEPTH_TEST);
							glDisable(GL_DEPTH_TEST);
如果希望对一个状态变量进行测试,以判断他是否已经被打开,opengl还提了一种方便的机制:
					Glboolean glIsEnabled(GLenum capability);
2.5.1  要包含什么
				#include <GLTools.h>								//OpenGL toolkit
				#include <GLShaderManager.h>		//shader Manager Class
				 #ifdef _APPLE_
					#include <gl/glut.h>
				#else
					#define FREEGLUT_STATIC
					#include <GL/glut.h>
				#endif
2.5.2 启动GLUT
int main(int argc,char* argv[])
				{
glSetWorkingDirectory(argv[0]);
//初始化GLUT
				glutInit(&argc,argv);
//告诉GLUT,在创建窗口时使用哪种类型的显示模式
				glutInitDisplayMode(GLUT_DOUBLE	|	GLUT_RGBA	|	GLUT_DEPTH	|	GLUT_STENCIL);
							GLUT_DOUBLE:	使用双缓冲窗口
							GLUT_RGBA:			RGBA颜色模式
							GLUT_DEPTH:		将一个深度缓冲区分配为显示的一部分
							GLUT_STENCIL:	确认我们有一个可用的模板缓存
//设置窗口大小和标题
					glutInitWindowSize(800,600);
					glutCreateWindow("Triangle");
//设置消息处理的回调函数
					glutReshapeFunc(ChangeSize);
					glutDisplayFunc(RenderScene);
//初始化GLEW库
					GLenum err = glewInit();
					if(GLEW_OK != err)
					{
						fprintf(stderr,"GLEW Error:%s\n",glewGetErrorString(err));
						return 1;
					}
//调用SetupRC
					SetupRC();
//开始主消息循环
					glutMainLoop();
					return 0;
					}
2.5.3 坐标系基础
					void ChangeSize(int w , int h)
					{
						glViewport(0,	0,	w,	h);
					}
2.5.4 完成设置
					glClearColor(0.0f,		0.0f,	1.0f	,	1.0f);
存储作色器:
					GLShaderManager shaderManager;
					shaderManager.InitializeStockShaders();
					指定顶点:
					//Load up a triangle
					Glfloat vVerts[] = { -0.5f,  0.0f,  0.0f,
														0.5f,  0.0f,  0.0f,
														0.0f,  0.5f,  0.0f  };
GLBatch  triangleBatch;
					triangleBatch.Begin(GL_TRIANGLES, 3);
					triangleBatch.CopyVertexData3f(vVerts);
					triangleBatch.End();
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f};
					shaderManager.UseStockShader(GLT_SHADER_IDENTOTY,vRed);
					triangleBatch.Draw();
glutSwapBuffers();
2.6.1 特殊按键
					GLUT还提供了另一个回调函数即glutSpecialFunc.它注册了一个能够在按一个特殊按键时候被调用的函数(上下左右,page up\down键等);
					glutSpecialFunc(SpecialKeys);
squareBatch.CopyVertexData3f(vVerts);
					//用箭头键操正方形在屏幕范围内移动
					void SpecialKeys(int key, int x, int y)
					{
						GLfloat stepSize = 0.025f;
GLfloat blockX = vVerts[0];
						GLfloat blockY = vVerts[7];
if(key == GLUT_KEY_UP)
							blockY += stepSize;
⋯⋯⋯⋯⋯⋯⋯⋯
							⋯⋯⋯⋯⋯⋯⋯⋯
glutPostRedisplay();
					}
2.6.2 刷新显示
					glutPostRedisplay();
2.6.3 简单的动画片
					void RenderScene(void)
					{
						glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f};
						shaderManager.UseStickShader(GLT_SHADER_IDENTITY,vRed);
						squareBatch.Draw();
glutSwapBuffers();
BounceFunction();
						glutPostRedisplay();
					}
OpenGL chapter2的更多相关文章
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
		
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
 - [OpenGL超级宝典]专栏前言
		
我小时候的梦想呢,是做宇航员或者科学家或者是做一款属于自己的游戏,后来前面两个梦想都没有实现,于是我就来实现我的第三个梦想了,,,我呢,也算是零基础,因为我的专业是物联网工程,这个专业覆盖面之广,简直 ...
 - OpenGL超级宝典笔记----渲染管线
		
在OpenGL中任何事物都在3D空间中,但是屏幕和窗口是一个2D像素阵列,所以OpenGL的大部分工作都是关于如何把3D坐标转变为适应你屏幕的2D像素.3D坐标转为2D坐标的处理过程是由OpenGL的 ...
 - OpenGL超级宝典笔记----框架搭建
		
自从工作后,总是或多或少的会接触到客户端3d图形渲染,正好自己对于3d图形的渲染也很感兴趣,所以最近打算从学习OpenGL的图形API出发,进而了解3d图形的渲染技术.到网上查了一些资料,OpenGL ...
 - 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
		
本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...
 - OpenGL shader 中关于顶点坐标值的思考
		
今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...
 - OpenGL: 纹理采样 texture sample
		
Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...
 - OpenGL ES 3.0: 图元重启(Primitive restart)
		
[TOC] 背景概述 在OpenGL绘制图形时,可能需要绘制多个并不相连的图形.这样的情况下这几个图形没法被当做一个图形来处理.也就需要多次调用 DrawArrays 或 DrawElements. ...
 - opengl 笔记(2)
		
/*- * Opengl Demo Test * * Fredric : 2016-7-10 */ #include <GLUT/GLUT.h> #include <stdlib.h ...
 
随机推荐
- 建立自己的javaBean --成功
			
1.用记事本新建一个java 程序,文件名为TestBean.java ,文件内容如下: package test; public class TestBean{ private String nam ...
 - springboot整合jedisCluster
			
maven依赖 springboot整合jedisCluster相当简单,maven依赖如下: <dependency> <groupId>org.springframewor ...
 - 将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3
			
在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF:同时还发布了 Visual Studio 2019 预览版 ...
 - 位操作Bit Operation算法题
			
一道让你拍案叫绝的算法题 这是一道看完答案会觉得很简单,但做之前很难想到答案的题目!!! 不信? Let us go ! 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均 ...
 - 有用的sql语句积累
			
⑴. sql查询未被外键关联的数据 select * from bb b where not exists (select 1 from aa a where a.bid=b.bid)
 - pandas Timestamp的用法
			
(Timestamp('2018-08-01 00:00:00'), <class 'pandas._libs.tslibs.timestamps.Timestamp'>) 注意这里面的T ...
 - Linux块设备驱动_WDS
			
推荐书:<Linux内核源代码情景分析> 1.字符设备驱动和使用中等待某一事件的方法①查询方式②休眠唤醒,但是这种没有超时时间③poll机制,在休眠唤醒基础上加一个超时时间④异步通知,异步 ...
 - Linux下的Nginx部署禅道
			
基本思路:先安装好nginx和mysql和php,上传禅道的源码.把禅道的源码包扔到 nginx/apache 的工程路径内或者nginx/apache内的配置文件指向nginx的路径,然后将ngin ...
 - 笔记本设置 2K 显示屏 Intel HD Graphics 3000
			
收了一台 32英寸的显示器,接到笔记 本只有 1920x1080,心想没得救了,要换笔记本才能用了. 在网上找了一圈,找到一篇说 Intel HD Graphics 3000 可以支持到 2560x1 ...
 - uml 知识点
			
Unified Modeling Language (UML)又称统一建模语言或标准建模语言