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 ...
随机推荐
- grafana的一些坑
坑1: 在设置alert的时候template中的变量是不被支持的,警告如下: 解决办法: 使用不带变量的具体sql查询 坑2: 时间轴的设置: 在更早的版本中时间轴的locale是无法设置的,就是说 ...
- .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”
一. 问题说明 最近.Net EF core 程序部署到服务器,服务器数据库安装的是SQL server 2008 R2,我本地用的的是SQL server 2014,在用到分页查询时报错如下: H ...
- cobbler网络装机
cobbler网络装机 原理分析 cobbler简介 Cobbler通过将设置和管理一个安装服务器所涉及的任务集中在一起,从而简化了系统配置.相当于Cobbler封装了DHCP.TFTP.XINTED ...
- ios app 开发中ipa重新签名步骤介绍
作为一个app应用程序开发者,在app应用程序在苹果商店上架前总需要将安装包安装到ios机器上进行测试,这个时候我们就需要打包in house版本的ipa了,打包in house实际上是一个将ipa应 ...
- rm: 无法删除"xxxx.dir": 是一个目录
rm命令 -f:在删除过程中不给任何指示,直接删除. -r:将参数中列出的全部目录和子目录都递归地删除. -i:与-f选项相反,交互式删除,在删除每个文件时都给出提示. 删除文件可以直接使用rm命令, ...
- 51Nod:1085 背包问题
1085 背包问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为 ...
- 蓝桥杯 BASIC-9:特殊回文数
基础练习 特殊回文数 时间限制:1.0s 内存限制:512.0MB 问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这 ...
- HDU 4681 string 求最长公共子序列的简单DP+暴力枚举
先预处理,用求最长公共子序列的DP顺着处理一遍,再逆着处理一遍. 再预处理串a和b中包含串c的子序列,当然,为了使这子序列尽可能短,会以c 串的第一个字符开始 ,c 串的最后一个字符结束 将这些起始位 ...
- 开源泛域名服务xip.io部署试用
xip.io 是一个很方便的泛域名服务,类似的有一个xip.name 的开源实现 下载 go get github.com/peterhellberg/xip.name 启动 二进制包在GOPATH/ ...
- TensorFlow笔记-01-开篇概述
人工智能实践:TensorFlow笔记-01-开篇概述 从今天开始,从零开始学习TensorFlow,有相同兴趣的同志,可以互相学习笔记,本篇是开篇介绍 Tensorflow,已经人工智能领域的一些名 ...