OpenGL蓝宝书

之前那个OpenGL入门教程十二课看完了,现在开始看OpenGL蓝宝书,我要调整学习计划了,现在研二第一期,马上要结束了,从5月接触鱼眼到现在有将近8个月了,简单过了下鱼眼图像校正、图像拼接融合,现在在看OpenGL也就是开始全景漫游的学习了,而我还没有做相机标定,然后前两块学得也不算精通,所以我准备加快OpenGL的学习步伐,只求会用,不会去深究搞懂,因为我学它只是为了全景漫游,也就是一个显示的功能,所以我对这一步的要求是会用就行,知道怎么用什么时候用就行了。然后学完这个再补充全景漫游的一点理论知识结合OpenGL显示,这样我的全景漫游就算过一遍了,然后马上去学相机标定,再有多的时间去回过头去学图像拼接融合。

我是按照http://www.zyh1690.org/build-opengl-super-bible-fifth-edition-development-environment/这个人的配置《OpenGL超级宝典》的开发环境的,中间出现过很多错误,后来自己改改改终于弄好了,出现错误的原因有可能是我的系统是win7+VS2013 反正后来终于调试好了,但测试的时候,出现错误

然后我看到出错的地方好像就是一个判断是否出错 然后强制退出的   所以我就把它注释掉了    结果:

就是初始化glew库时有问题,后来弄了快一天,终于瞎弄好了,原来是这样:

要在工程目录下加入这几个lib然后VS中要加入这个glew.c  还有要把下载的那是一个头文件.h的路径放进工程包含目录中:

这样就行了  可以运行成功了:


到此为止,OpenGL蓝宝书的开发环境就初步配置好了。

一,第一个程序是2.5节的画三角形:

这个不仅要包含glew.c还要下面那三个.lib

二、第二个程序是2.6.1节绘制一个会动的矩形  没完整程序 我就在上个三角形上改 其实可以按照之前看的那个pdf教程上画出矩形 可是这里又要用着色器渲染  之前那个没用  所以还是就画一个会动的三角形好了

#include<gltools.h>
#include<GLShaderManager.h>
#ifdef _APPLE_
#include<glut/glut.h>
#else
#define FREEGLUT_STATIC
#include<GL/glut.h>
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
void SetupRC()
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
shaderManager.InitializeStockShaders();
GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
                 0.5f, 0.0f, 0.0f,
                 0.0f, 0.5f, 0.0f};
triangleBatch.Begin(GL_TRIANGLES,3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
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.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
glutSwapBuffers();
}
void SpecialKeys(int key, int x, int y)
{
GLfloat blockX = -0.5f;  //不得不在这里先定义 因为好像无法像C一样在主函数里定义 然后做实参 所以每次又回来了  只可以上下左右动一步长
GLfloat blockY = 0.5f;
GLfloat vVerts[] = { blockX, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, blockY, 0.0f, };
GLfloat stepSize = 0.025f;
if (key == GLUT_KEY_UP)
blockY += stepSize;
if (key == GLUT_KEY_DOWN)
blockY -= stepSize;
if (key == GLUT_KEY_LEFT)
blockX -= stepSize;
if (key == GLUT_KEY_RIGHT)
blockX += stepSize;
if (blockX <= -1.0f) blockX = -1.0f;
if (blockX >= 0.0f) blockX = 0.0f;
if (blockY >= 1.0f) blockY = 1.0f;
if (blockY <= -0.5f) blockY = -0.5f;
vVerts[0] = blockX;
vVerts[1] = blockY - 0.5f;
vVerts[3] = blockX + 1.0f;
vVerts[4] = blockY - 0.5f;
vVerts[6] = blockX + 0.5f;
vVerts[7] = blockY;
triangleBatch.CopyVertexData3f(vVerts);
glutPostRedisplay();
}
int main(int argc, char*argv[])
{
GLfloat blockX = -0.5f;
GLfloat blockY = 0.5f;
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
glutSpecialFunc(SpecialKeys);
GLenum err = glewInit();
if (GLEW_OK != err)
{
fprintf(stderr, "GLEW Error:%s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
return 0;
}

这样是可以动 但只可以动连续一个步长  原因就像我说的一样  因为开始定义的时候已经指定了 所以每次调用也无济于事 而我又不知道OpenGL里改怎样像c一样定义在主函数然后通过实参调用 想想那样应该可行 可以持续随着按键刷新

三、第三个是一个红色的三角形按照一个矩形路径运动


四、图元 环带 旋转等


一直按着方向键 它能一直旋转  好神奇  不过这个程序有几个地方不懂  有些函数不熟悉。。。。

五、甜甜圈


六、裁剪


七、混合


八、混合除了半透明后的另一应用 抗锯齿  就只有线上的锯齿被平滑了   可是圆等多边形的没有被平滑 即使我用多重采样也一样的结果


九、平移加旋转

创建平移矩阵、旋转矩阵,两个相乘得最终变换矩阵

十、创建球体、花托等


十一、正投影和透视投影

正投影没有现实立体感   下面是透视投影  这两个没有太去了解

十二、矩阵堆栈 在网格上的花托


十三、添加照相机变换  以及多个角色  添加光线

从讲解矩阵堆栈到第四章完结,这部分内容感觉很重要,开始变难了。中间提过一个天空盒(sky  box)技术,感觉全景漫游会要用到一样。。。明年三四月好像有招聘,寒假在家时找找深圳的全景相机的公司,想下学期去实习。

想着在家可以把这本《OpenGL超级宝典 上》给看完实现完的  结果在家这段时间都没翻开过,而只有三天我又要回学校去了。。。果然回家不能带书   今天实在是太无聊  就翻开了  发现之前看到第五章P144  结果都忘记了  又稍稍把第五章开头的又浏览了下。。。果然要学而时习之   不然就忘了   看纹理过滤和环绕:  

十四、纹理过滤、纹理环绕

右键是这几种纹理过滤方式是这样的三幅图tga文件(应该就是纹理数据)  放置成了这个巷道的样子   然后铺满显示窗口 即 视口   然后就成了操作者即 我 在这个巷道里走的形式 通过按上下键 

不同的过滤方式

我在想那些鬼片里经常出现的场景  是不是就是这样来的  经常是鬼片里某主做梦自己在房间巷道里奔跑  然后这个巷道尽头就是这样  像断崖式的。。。应该就是这样显示的吧 强大的OPENGL啊 另外读取纹理数据的时候是不是都是tga格式的啊  好想看下这个格式里面究竟是什么  我还以为直接是读取图片就是纹理贴图呢  原来不是     第一次遇到这个tga

下面是纹理环绕:

依旧是读取的一个被命名为石头的tga格式文件  然后环绕在一个正四棱锥表面    

看起来有点像金字塔了   如果是沙子的tga文件来环绕

十五、各向异性过滤

平常的纹理贴图和过滤有时会使得纹理信息丢失,造成图像模糊,各向异性过滤就是来解决这个问题的。右键有这些过滤方式选择以及开启各向异性过滤和关闭各向异性过滤

平常是关闭各向异性过滤的 就像十四中写的那样 当选择4时图像本来会模糊的  像这样

但当我打开各向异性过滤时候   消除了模糊   如下图

包括十四 中写到的别的过滤方式出现模糊时  去开启各向异性  也能消除模糊   也就是书上说的把各向异性用在基本纹理过滤和Mip贴图纹理过滤模型中了。

十六、SphereWorld就是十三的内容加了纹理部分的内容和镜面

加的是这三个纹理tga 一个是大理石纹理 一个是星球纹理 一个是月亮纹理   结果第五章完了   感觉纹理贴图很有趣很高大上同时有点难的样子   关键是好多函数啊各种功能的函数里面又各种参数  每种参数又有很多个可选项   记不住的  感觉要用到某个功能时就去查还实际点

十七,矩形纹理

现在实习了,找了个做图像的公司,只是不是我原来的研究方向,这个有点可惜,因为我很喜欢我原来自己选的方向。这个公司在芯城科技园,做模式识别的,我是进的算法部,也就是继续做图像算法,模式识别我之前没有太了解,边学边用,,,今天是2016.3.29 已经实习29天了,慢慢适应了新环境。而我们学校好像是四月底还是五月初开题,我大论文的题目已经想好了目前暂定为 基于OpenGL的鱼眼图像全景漫游系统的研究  还是我原来的方向的东西,开题报告前几天下班回来后写完了,导师说行。所以我大论文最后一步是用OpenGL实现全景漫游。而我现在实习,周末还有两个家教,时间都几乎被占完了,我之前研究方向的学习被我搁置了,但大论文的话 用我之前的三篇小论文填进去基本就差不多了,校正、匹配、拼接融合这三个方面的小论文正好凑成我的系统,最后一个漫游 就是蓝宝书上第七章。所以我暂时急功近利越过第六章 直接看第七章。我的大论文活用第七章的内容就够了。

  十八,立方体贴图

的确可以水平方向上360度进行浏览  但这个程序的上下键无法实现 我想要的前进后退浏览   这个程序里的前进后退只是将中间的球体扩大缩小而已      看来我的大论文最后显示部分还是不能够按照这个立方体贴图来   这个实现不了我要的视点在立方体中央  水平垂直都是360度漫游  



### 回答1: OpenGL蓝宝书PDF是指《OpenGL超级宝典》一书的电子版本,主要介绍了OpenGL图形学编程的基础知识和开发技巧。 OpenGL是一种跨平台的图形库,可以用于开发高性能的2D和3D图形应用程序。《OpenGL超级宝典》是一本经典的OpenGL教材,适合初学者和有一定OpenGL基础的开发者学习和参考。 这本书的PDF版本提供了一种便捷的阅读方式,可以随时随地通过电脑、平板或手机进行学习。相比于传统的纸质书籍,PDF版本的《OpenGL超级宝典》具有以下优势: 1. 可随时复制和搜索:PDF格式的书籍可以方便地进行复制和搜索,使得我们可以快速找到我们需要的内容,并方便地进行引用和参考。 2. 纸质书籍的替代品:PDF版本的书籍不占用实体空间,而且可以通过电子设备随时携带,方便在任何时间、任何地点进行学习和阅读。 3. 交互性强:PDF格式的书籍还可以添加书签、注释和标记,方便读者进行个性化的标记和笔记,更好地帮助记忆和理解。 总之,《OpenGL超级宝典》PDF版本是一种便捷、高效的学习OpenGL图形学编程的工具,通过这本书,读者可以系统地学习OpenGL的基础知识和开发技巧,从而提高自己在图形学编程领域的能力。 ### 回答2: OpenGL蓝宝书是一本关于OpenGL编程的经典教材,适合初学者和有一定编程基础的开发者。本书全面介绍了OpenGL的基础知识和常用编程技巧,并提供了大量的代码示例和实践项目。 这本书的PDF版本提供了方便的电子阅读方式,读者可以随时随地学习和实践OpenGL编程。使用PDF格式的优点是可以根据需要进行搜索、标注、复制和打印,在学习过程中方便查阅和注释,提高学习效率。 《OpenGL蓝宝书》的内容涵盖了OpenGL的基础知识,包括顶点和片元着色器、图元绘制、纹理映射、新的OpenGL特性等。此外,该书还介绍了OpenGL的高级技术,如光照、阴影、透明度、几何着色器等,帮助读者掌握更复杂的图形渲染技术。 这本书对于学习OpenGL编程的人来说是一部非常有价值的参考资料。它通过清晰的逻辑结构和易于理解的语言,帮助读者理解和掌握OpenGL的核心概念和编程技巧。同时,书中提供的示例代码和实践项目可以帮助读者巩固所学知识,并进一步探索OpenGL的应用。 总的来说,《OpenGL蓝宝书》的PDF版本是一种方便快捷的学习OpenGL编程的方式,可以满足读者在不同场合和需求下的学习和实践需求。无论是初学者还是有一定经验的开发者,都可以从中获得宝贵的知识和经验。 ### 回答3: OpenGL蓝宝书是一本经典的OpenGL编程指南,全书详尽地介绍了OpenGL的基础知识和编程技巧。这本书的完整版可以在网上找到PDF格式的电子书。通过阅读OpenGL蓝宝书,我们可以了解到OpenGL的底层原理、渲染管线以及各种常用的绘图和渲染技术。 OpenGL是一种跨平台的图形编程接口,它可以用于开发2D和3D图形应用程序。蓝宝书从基础概念开始,逐步介绍OpenGL的各个方面,包括顶点缓冲对象、着色器、纹理映射、光照等。通过例子和代码实践,读者可以深入理解OpenGL的工作原理,并学会如何使用OpenGL进行图形渲染。 OpenGL蓝宝书的PDF版本提供了便捷的学习方式。电子版本便于阅读和搜索,可以随时随地进行学习。同时,通过电子书的书签和目录功能,读者可以方便地定位到自己感兴趣的章节和内容。此外,电子书的PDF格式可以在多个设备上使用,如电脑、平板电脑和手机等。 总之,OpenGL蓝宝书PDF是一本非常有价值的OpenGL学习资料,它为初学者提供了一个系统而又详细的学习路径,帮助读者深入理解OpenGL的基础知识和编程技巧。无论是对于想要学习图形编程的人来说,还是对于已经对OpenGL有一定了解的开发者来说,这本书都是一本非常值得阅读的指南。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元气少女缘结神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值