OpenGL笔记
发布日期:2021-06-28 22:17:25
浏览次数:2
分类:技术文章
本文共 3183 字,大约阅读时间需要 10 分钟。
译序
早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNorma等固定管线API。
openGL ES 2.0 版本开始不再支持固定管线,只支持可编程管线。
准备
1.The OpenGL Extension Wrangler(GLEW) 是用来访问OpenGL 3.2 API函数的。
不能简单的使用gl.h来访问OpenGL接口,除非你相用旧版的OpenGL。
在现代OpenGL中,API函数是在运行时(run time)确定的,而非编译期(compile time)
GLEW可以在运行时加载OpenGL API。
2.GLFW 允许我们跨平台创建窗口,接受键盘鼠标消息。OpenGL不处理这些窗口创建和输入。
3.OpenGL Mathematics(GLM)是一个数学库,用来处理矢量和矩阵等几乎其他所有的东西。
旧版OpenGL提供了glRotate glTranslate和glSale等函数。
在现代OpenGL函数中 这些函数已经不存在了。我们需要自己处理所有的数学运算。
Shaders
shaders是一段GLSL小程序,运行在GPU而非CPU。
他们使用OpenGL Shading Language(GLSL)语言编写。看上去像C/C++.
像其他编程语言一样,使用Shaders需要编译链接成可执行程序。
旧版OpenGL中Shaders是可选的,现代OpenGL中 Shaders是必须的。
Vertex Shaders
Vertex shader主要是将点(X Y Z)变换为不同的点。顶点只是几何形状中的一个点,一个点叫vertex
多个点叫vertices
Fragment Shaders
fragment shader 的主要功能是计算每一个需要绘制的像素点的颜色。
一个fragment是一个像素 片段着色器(fragment shader)就是像素着色器(pixel shader)。
编译shaders
--------------------------------------------------------
//create the shader object
GLuint _object = glCreateShader(GL_VERTEX_SHADER);
if(_object == 0)
throw std::runtime_error("glCreateShader failed");
//set the source code
const char* code = shaderCode.c_str();
glShaderSource(_object, 1, (const GLchar**)&code, NULL);
//compile
glCompileShader(_object);
//throw exception if compile error occurred
GLint status;
glGetShaderiv(_object, GL_COMPILE_STATUS, &status);
if (status == GL_FALSE) {
std::string msg("Compile failure in shader:\n");
GLint infoLogLength;
glGetShaderiv(_object, GL_INFO_LOG_LENGTH, &infoLogLength);
char* strInfoLog = new char[infoLogLength + 1];
glGetShaderInfoLog(_object, infoLogLength, NULL, strInfoLog);
msg += strInfoLog;
delete[] strInfoLog;
glDeleteShader(_object); _object = 0;
throw std::runtime_error(msg);
}
-----------------------------------------------------------------------
解析shadres
------------------------------------------------------------------------
//create the program object
GLuint _object = glCreateProgram();
if(_object == 0)
throw std::runtime_error("glCreateProgram failed");
//attach all the shaders
for(unsigned i = 0; i < shaders.size(); ++i)
glAttachShader(_object, shaders[i].object());
//link the shaders together
glLinkProgram(_object);
//detach all the shaders
for(unsigned i = 0; i < shaders.size(); ++i)
glDetachShader(_object, shaders[i].object());
//throw exception if linking failed
GLint status;
glGetProgramiv(_object, GL_LINK_STATUS, &status);
if (status == GL_FALSE) {
std::string msg("Program linking failure: ");
GLint infoLogLength;
glGetProgramiv(_object, GL_INFO_LOG_LENGTH, &infoLogLength);
char* strInfoLog = new char[infoLogLength + 1];
glGetProgramInfoLog(_object, infoLogLength, NULL, strInfoLog);
msg += strInfoLog;
delete[] strInfoLog;
glDeleteProgram(_object); _object = 0;
throw std::runtime_error(msg);
}
----------------------------------------------------------------------------
参考:
http://huangwei.pro/2015-05/modern-opengl1/
https://www.opengl.org/sdk/docs/man/html/
http://www.cocoachina.com/game/20141127/10335.html
http://blog.csdn.net/candycat1992/article/details/39675513
http://fengmm521.blog.163.com/blog/static/2509135820133254936364/
http://blog.csdn.net/afei198409/article/details/8255518
http://blog.csdn.net/mzyang272/article/details/7655464
转载地址:https://blog.csdn.net/yhhwatl/article/details/50994969 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月09日 17时56分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
retrofit优点,互联网寒冬公司倒闭后,年薪50W
2019-04-29
retrofit原理面试,Android性能优化最佳实践,面试必备
2019-04-29
【工作感悟】Android多进程从头讲到尾,offer拿到手软
2019-04-29
【微信小程序】面试一路绿灯Offer拿到手软,好文推荐
2019-04-29
Android之内存泄漏调试学习与总结,分享PDF高清版
2019-04-29
事件分发机制怎么回答,Android开发究竟该如何学习,使用指南
2019-04-29
python3 语法注意
2019-04-29
C语言复习
2019-04-29
Spring:源码解读Spring IOC原理
2019-04-29
Spring AOP原理分析一次看懂
2019-04-29
Spring AOP的实现原理(二)
2019-04-29
Spring AOP的实现原理(三)
2019-04-29
Spring AOP的实现原理(四)
2019-04-29
Spring AOP的实现原理(五)
2019-04-29
Java动态代理与CGLIB
2019-04-29
Java 9 新特性
2019-04-29
缓存与数据库不一致
2019-04-29
Gson的入门使用
2019-04-29
SpringBoot之集成Spring AOP
2019-04-29
Linux免密码登录设置
2019-04-29