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度漫游  



  • 10
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

元气少女缘结神

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

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

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

打赏作者

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

抵扣说明:

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

余额充值