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 ...
随机推荐
- 7.2 TCP IP的11种状态
先看TCP IP的10种状态,如下所示: 三次握手: 客户端A端发送SYN,然后进入SYN_SENT状态,服务器B端接收到SYN后,返回一个响应ACK,同时也发送一个SYN,然后B端进入SYN_RCV ...
- kafka集群安装,配置
1.安装+配置(集群) 192.168.0.10.192.168.0.11.192.168.0.12(每台服务器kafka+zookeeper) # kafka依赖java环境,需要提前安装好jdk. ...
- 解决Android adjustresize全屏无效问题
最近在做一个即时通信的聊天页面时,页面要求要全屏显示,这个时候android:windowSoftInputMode = "adjustResize"属性就不起作用了,如果使用an ...
- Port of FreeModbus to STM32
/********************************************************************************* * Port of FreeMod ...
- 【opencv基础】detectMultiScale-output detection score
前言 使用FDDB数据库评估人脸检测的效果时,需要计算人脸区域的得分,具体问题请参考FDDB-FAQ. 实现过程 根据here和here的描述,可以使用cascade.detectMultiScale ...
- 小程序api请求层封装(Loading全局配置)
前言 小程序开发,没有vue中的axios那么好使,请求层的封装需要自己来搞. 当然请求层的配置少不了loading,这里索性也就将loading做一个配置,避免以后重复造轮子 请求封装 小程序中有封 ...
- Linux下你需要了解的10个网络和监控命令
我下面列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nsloo ...
- CF1143F/1142C U2
CF1143F/1142C U2 巧妙的思维题.注意到这里只用两个点就可以确定一根抛物线,联想到两点确定一条直线,尝试转化. \(y=x^2+bx+c\) 就可以写成 \(y-x^2=bx+c\) , ...
- jQuery prop() 方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- IP地址 无限网卡的MAC地址