我是跟着这个教程学的http://download.csdn.net/detail/wd1603926823/9368086
鱼眼校正---拼接融合-----全景漫游,前两步都过了一下,在泊松融合上停留了差不多一个月,拖了太久,从昨天开始决定踏入第三步全景漫游,首先学习OpenGL,昨天基本上找了一天资料,然后用VC++6.0配置OpenGL,我是按照http://blog.csdn.net/makenothing/article/details/8451573这个人的进行配置的,全部配置好后,运行这个test程序,结果还是显示说没有glut.h这个头文件 我明明配置的时候放进GL文件夹里了啊:
这个再想想 不配置好就不能继续往下学了 肯定要实践的 另外我买了本蓝宝书 不知道怎样 还没到
http://wiki.jikexueyuan.com/project/modern-opengl-tutorial/这个资料不错http://learnopengl-cn.readthedocs.org/zh/latest/ https://github.com/cybercser/OpenGL_3_3_Tutorial_Translation
我改用了VS2013配置,终于配置成功了哈哈:
VS2013的界面果然够酷炫 这就是为什么我一定要装个比2010高的版本 除了因为我的VS2010配置了OpenCV2.4.9 我怕哪天因为我手贱乱删了什么崩溃导致我所有程序没了 还因为这个全黑的界面 多么酷炫啊哈哈!终于可以跟着教程实践学OpenGL了 好开森!!!
第二课是讲绘制点、直线和多边形,实现了几个例子:
书上没有根号 居然出来也是个五角星 其实应该用数学算是有根号的
这是本来是两个点 但OpenGL默认大小是一个像素 所以根本看不出来 其实是有的
第三课进的是几何图形绘制的细节:
下面是剔除多边形的表面:
第四课开始讲颜色了 用彩色画矩形 用指定颜色清除屏幕(其实就是把整个屏幕变成那个颜色):
第五课和第六课的 那个绘制太阳系以及显示太阳、地球、月亮的动画 都显示不出来 显示出来的窗口上面什么都没有?? 只显示坐标出来了:
但是定义的那个窗口本该出现动画的 却没出现 不知道为什么??
第七课开始讲光照了,实例部分是地球围绕太阳转 光线的变化:
是一个动画 用了上节课的动画的一点知识 结合这节课的光源的设置、材质设置等 感觉好好玩啊
第八课开始讲显示列表了 实例是绘制一个旋转的正四面体 宏定义那里居然还用了一个do while的循环 我之前都没见过这种宏定义 后面居然还用到了堆栈 那里没看太懂 按照教程的用ColorY[]为别的面着色时 本来应该是黄色 结果却 会报错 所以我改了下:
我没有用ColorY[] 因为会报错 这也是一个小动画 用到了之前学的动画效果 otherwise,我的OpenGL蓝宝书到了,翻看了下,比较适合我这种fish,我准备看完这个教程就去看蓝宝书! 这一课后面说这个立体感不强 添加光照会比较有立体感 于是我这样加的:
#include
#define WIDTH 400
#define HEIGHT 400
#include
#define ColoredVertex(c,v) do{glColor3fv(c);glVertex3fv(v);} while(0)
GLfloat angle = 0.0f;
void myDisplay(void)
{
static int list = 0;
if (list == 0)
{
GLfloat PointA[] = { 0.5f, -sqrt(6.0f) / 12, -sqrt(3.0f) / 6 }, PointB[] = { -0.5f, -sqrt(6.0f) / 12, -sqrt(3.0f) / 6 }, PointC[] = { 0.0f, -sqrt(6.0f) / 12, sqrt(3.0f) / 3 }, PointD[] = { 0.0f, sqrt(6.0f) / 4, 0 };
GLfloat ColorR[] = { 1, 0, 0 }, ColorG[] = { 0, 1, 0 }, ColorB[] = { 0, 0, 1 };
list = glGenLists(1);
glNewList(list, GL_COMPILE);
glBegin(GL_TRIANGLES);
ColoredVertex(ColorR, PointA);
ColoredVertex(ColorG, PointB);
ColoredVertex(ColorB, PointC);
ColoredVertex(ColorR, PointA);
ColoredVertex(ColorB, PointC);
ColoredVertex(ColorG, PointD);
//这里还有一个面的。。。
ColoredVertex(ColorG, PointB);
ColoredVertex(ColorR, PointA);
ColoredVertex(ColorB, PointD);
glEnd();
glEndList();
glEnable(GL_DEPTH_TEST);
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 1, 0.5, 0);
glCallList(list);
glPopMatrix();
//下面是我自己加的创造光照效果让旋转的正四面体更立体
GLfloat centerposition[] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat centerambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat centerdiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat centerspecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
glLightfv(GL_LIGHT0, GL_POSITION, centerposition);
glLightfv(GL_LIGHT0, GL_AMBIENT, centerambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, centerdiffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, centerspecular);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glutSwapBuffers();
}
void myIdle(void)
{
++angle;
if (angle >= 360.0f)
angle = 0.0f;
myDisplay();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowPosition(200, 200);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow("the 8th");
glutDisplayFunc(&myDisplay);
glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
}
可是结果 却成了灰色的样子:这到底是有光照还是没光照 我眼瞎了看不出来啊!怎么还成了灰色?
第九课 开始讲混合了 实现半透明的效果 实例是二维图形的混合:
原来第一个绘制的是第二个参数对应的 第二次绘制的是第一个参数对应的 后来还举例绘制三维图形:
堆栈我还是不知道什么时候用 我感觉不需要用它也用了 这个程序里还加入动画部分的 双缓冲技术 以及后面的交换指针 但出来又是静态的没动画 所以我想着是不是像第一课那样绘制就行了 反正出来没动画效果 所以我试了下 结果真的可以 和上面加动画的一样 不知道作者加动画干嘛的 干脆不加好了:
第十课开始讲读取bmp文件(实现屏幕截图)、绘制像素、复制,之前按照书上的说法以及实例我老师找不到 出来总是exit(0)强制退出了 没结果 然后工程目录下也找不到
这个屏幕截图的 就是把显示窗口的图片保存下来 原来要先创建一个bmp文件 我创建的是一个我随手画的:
这个是画的师父,嘿嘿把他画成了这样嘿嘿,然后保存为shifu.bmp放在这个工程目录的下一级(如果不是下一级 就读不到 没结果 这和OpenCV不同 OpenCV是直接放到这个工程目录下就好 OpenGL还有放到更下一级 也许这就是它默认的放的地方) 这个生成的grap.bmp也是在这个目录下。然后绘制像素这个实例也是我随手画的xm.bmp然后窗口绘制出来:
复制像素的这个例子显示出来的是一个白屏幕?为什么白屏呢?但是结果还是保存进目录了 通过照片查看器可以看到:
圣诞出去玩儿了。。。。。。第十一课 开始讲纹理了 这个实例是要实现这个效果:
实现这个纹理效果 很神奇啊纹理 结果报错 grap()和load_texture()这两个函数里报错:
报错说grap里三个打开文件的fopen要换成fopen_s 另外就是load_texture这个函数里glGetIntegerv()的第二个是GLuint不是GLint类型 我强制把第二个实参转换成GLint 结果也不行 教程里这一课是这里写错了???
今天又重新改了下 第二个参数那里不强制转换 而是在定义时就把它定义成GLint 结果终于没error了 可是出来却是这样:
黑白的?!形状可以看到是想要的那个效果的雏形 但怎么没颜色了 难道因为我改了定义被截断了?
第十二课 三种测试 其中一个实例是透过相框看一张图片:
不对!为什么呢?我想想 不过第二个实例的倒是正确的,绘制一个类似湖面倒影的演示: