这两节,透明度和物体的3D运动,主要集中在第9讲,因为第9讲也用到了通过Alpha值来调整透明度的地方。

  因为要模拟星星,所以要创建的四边形需要很多,例子中创建了50个正方形。因为每个星星的属性都差不多,所以选择了用结构体来循环创建。(感觉有点像面向对象的思路。)为了让星星在翻转的时候不至于由面变成一条线,通过自己数次的测试,我理解为X,Y,Z坐标轴始终是固定在所创建的对象上的,举个例子,想像一个正方形正对着自己,然后Z轴箭头向内,尾巴朝着自己,假如让此正方形向左(你自己的左边)转90度,那么坐标轴的Z轴箭头就像固定在正方形上那样,变成了箭头指向右边,尾巴朝向自己的左边。恩,(记住坐标轴就跟长在要创建的对象上就对了,之前绕死我了,以为坐标轴轴心不动,怎么都想不明白,一步一步变换观察才发现自己理解错了)。

  所以,操作顺序是:(假设有个定点,所有的星星都围绕着这个定点运动)先在定点通过翻转,朝向星星所在点的方向,然后向星星的位置出发(代码是沿X轴移动,也就是通过两次翻转说把X轴的箭头指向了星星的位置),到达星星位置,然后再逆序两次翻转复位(最开始正对观察者,到达指定位置后仍然要正对观察者,这样才不会在翻转的时候出现一条线的情形)。

  接着就是通过改变每次循环的距离和角度变化来造就各种神奇的轨迹啦。还有,修改透明度要在创建四边形之前的位置修改,就是这里:

修改位置1的值,范围0~255,值越大越透明(看起来会很亮)对比一下,左边255,右边50(用了次10,快看不见了):

还有教程里说把深度测试关了,我试着没关也没看出什么区别。。带过吧。

  还有报各种重定义之类的问题,试着添加或者去掉外部依赖项glu.lib之类的(我之前加进去也没报错)。

  之前说过的用鼠标左右键以及滚轮控制的方法,我找到啦,因为例子代码用了windows自己的这个函数:

 LRESULT CALLBACK WndProc(    HWND    hWnd,            // Handle For This Window
UINT uMsg, // Message For This Window
WPARAM wParam, // Additional Message Information
LPARAM lParam) // Additional Message Information
{
switch (uMsg) // Check For Windows Messages
{
case WM_ACTIVATE: // Watch For Window Activate Message
{
if (!HIWORD(wParam)) // Check Minimization State
{
active=TRUE; // Program Is Active
}
else
{
active=FALSE; // Program Is No Longer Active
} return ; // Return To The Message Loop
} case WM_SYSCOMMAND: // Intercept System Commands
{
switch (wParam) // Check System Calls
{
case SC_SCREENSAVE: // Screensaver Trying To Start?
case SC_MONITORPOWER: // Monitor Trying To Enter Powersave?
return ; // Prevent From Happening
}
break; // Exit
} case WM_CLOSE: // Did We Receive A Close Message?
{
PostQuitMessage(); // Send A Quit Message
return ; // Jump Back
} case WM_KEYDOWN: // Is A Key Being Held Down?
{ keys[wParam] = TRUE; // If So, Mark It As TRUE
return ; // Jump Back
} case WM_KEYUP: // Has A Key Been Released?
{
keys[wParam] = FALSE; // If So, Mark It As FALSE
return ; // Jump Back
} case WM_SIZE: // Resize The OpenGL Window
{
ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width, HiWord=Height
return ; // Jump Back
}
case WM_MBUTTONDOWN:
{
keys[wParam] = TRUE; // If So, Mark It As TRUE
return ;
}
case WM_LBUTTONDOWN: //左键按下
{
MouseLB=TRUE;
return ;
}
case WM_LBUTTONUP: //左键释放
{ MouseLB=FALSE;
return ;
} case WM_RBUTTONDOWN: //右键按下
{
MouseRB=TRUE; return ;
}
case WM_RBUTTONUP: //右键释放
{
MouseRB=FALSE; return ;
} case WM_MOUSEWHEEL: //滚轮
{
//keys[wParam] = FALSE;前滚:7864320
int zDelta = GET_WHEEL_DELTA_WPARAM(wParam);
if (zDelta<) //后滚
{
zoom-=1.2f;
}else{
zoom+=1.2f;
}
//MessageBox(NULL,"you","",MB_OK|MB_ICONEXCLAMATION); return ;
}
} // Pass All Unhandled Messages To DefWindowProc
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

而我再使用glut自己的这个函数就报内存冲突的错误:

glutMouseFunc(mouse);

所以要么只用这个,要么就像我一样用上面的代码。其中

 int zDelta = GET_WHEEL_DELTA_WPARAM(wParam); 

这个是当滚轮事件触发时,用于判断是向前滚还是向后混的变量,zDelta会相应的呈正或负。我参考这个作的修改。

哎,一弄大半天都快过去了,不过弄清楚了很多问题,也蛮值得的啦。

OpenGL第8,9讲小结的更多相关文章

  1. 有关于OpenGL、OpenGL ES、WebGL的小结

    转自原文 有关于OpenGL.OpenGL ES.WebGL的小结 一.   OpenGL简介 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言.跨平台的编程接口 ...

  2. OpenGL第18,19,20讲小结

    18讲是通过调用库函数画一些简单的二次几何体,比如球体.圆锥体.圆盘等等. 19讲简单的讲了下粒子系统.其实就是三角形贴上星星的纹理,通过启用混合(GL_BLEND)来达到一种动态的粒子效果.通过修改 ...

  3. OpenGL第15,16,17讲小结

    这三讲没有什么特别的感觉,15讲把纹理贴到3D字体上,16讲讲了雾的生成,17讲是通过以事先保存好的纹理贴图的字体来显示2D文字,这样子不用调用windows的字体,而是使用纹理中的字体.这样也在一定 ...

  4. OpenGL第12-14讲小结

    首先要为自己为什么没有写第10讲的控制3D场景和第11讲的红旗飘飘呢?因为没看啊~哈哈哈,而且我尝试着运行红旗飘飘的时候电脑蓝屏了(可能不是它的锅),暂时跳过了. 恩,12到14主要了解了这么些东西, ...

  5. OpenGL第6、7讲小结

    因为内容比较多,所以只看了两讲(强行解释). 一讲讲了如何给各个面贴纹理,一讲讲了加光照和按键控制. 现在讲的都是给规则的面贴纹理,像正方形,刚好纹理图也是正方形,那像人物模型的衣服贴起来用代码控制得 ...

  6. OpenGL1-6讲小结

    首先是第一讲,GL窗体的搭建,依葫芦画瓢,很多代码虽然解释了,最后看起来还是比较生涩.一开始按照上一篇的链接去敲的代码,结果最后while死循环了,我也不知道问题出哪儿,后来去找了个源码,还附带了更加 ...

  7. OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

    实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...

  8. [整理]vimtutor章节小结

    第一讲小结 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键. h (左移) j (下行) k (上行) l (右移) 2. 欲进入 Vim 编辑器(从命令行提示符),请输入: ...

  9. Vimtutor(中文版)学习笔记各章小结

    在Bash中直接输入 vimtutor 打开新世界!通常阅读完需要25-30分钟不等,像玩游戏一样学会vim,然后爱不释手 里面设置了很多例子通过实践操作来学,这里仅把vimtutor上的每一章小结记 ...

随机推荐

  1. Map生成器 map适配器如今能够使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象

    Map生成器 map适配器如今能够使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象 package org.rui.collection2.map; /** * ...

  2. MYSQL: Handler_read_%参数说明

      环境: 表t_feed_idx(user_id bigint, feed_id bigint, KEY (`user_id`,`feed_id`)) engine=innodb;表t_feed_i ...

  3. IT思想类智力题

    1. 台阶问题 题目:一个人上台阶可以一次上一个或两个,问这个人上n层的台阶,一共有多少种走法. 本题可以采用递归的方法来设计模型,先从数字的规律入手:假设共有i阶台阶,走完所有的台阶有n种走法,则存 ...

  4. Sleep v.s. sleep

    Sleep函数_百度百科 http://baike.baidu.com/link?url=EmOxsG_du8HdLbv_9nDVlahpZOQ6DgkoLKooQInorAqIl_CEhCvBzTC ...

  5. hdu1050 Moving Tables

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1050 求区间上点的最大重叠次数. #include <stdio.h> #include &l ...

  6. GNU-ARM汇编

    GNU ARM 汇编指令(2008-10-29 00:16:10) 标签:linux gnu arm 汇编指令 it 分类:技术文摘 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C+ ...

  7. tachyon with hadoop

    hadoop2.2.0 jdk1.7 tachyon0.5.0 无zookeeper tachyon和hadoop都是伪分布式模式 1.修改core-site.xml文件 <property&g ...

  8. 3.5html学习笔记之框模型,盒子模型

    块元素:block 两个相邻的元素外边距,两者之间取最大. 浮动(定位机制针对框来说): 1.position:absolute,relative,fixed 1)relative:在原来的位置上进行 ...

  9. P1707 刷题比赛

    P1707 刷题比赛 10通过 38提交 题目提供者nodgd 标签倍增递推矩阵洛谷原创 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 不科学 题目背景 nodgd是一个喜欢写程序的同学, ...

  10. jsonp跨越请求百度搜索api 实现下拉列表提示

    题目来源: 最近在做百度IFE前端技术学院的题,然后有一题就是模拟百度搜索智能提示.题目是开源的,稍后给出地址. 因为博主没学过后端啊,欲哭无泪,所以不能实现后端模糊搜索,那如果前端ajax纯粹请求一 ...