Categories
OpenGL

OpenGL notes(3)

做了几件事:

1. 贴图上去,生成texture。

2. 可以用键盘控制转动速度和视角远近。

3. 可以选择贴图的插值方式(Nearest, Linear & MipMapped)。在拉近视角的那一段演示了三者的区别,可能要用高清模式才能看清。后二者在这里没区别,因为箱子是很标准的256^3,第一个则可以看出来颗粒。

4. 灯光。设置了两个光源,一个是ambient的白光,亮度50%,另一个是diffuse的白光,亮度100%,位置固定。结果居然是看到箱子在两面显得暗,转到另外两面就变亮了。现在还不知道坐标是怎么设置的,也许是因为这里相对于空间转动的是视角而不是箱子吧。

update about 4:
检查了一个晚上,发现原来是在绘制立方体的时候没有用glNormal指定每个面的法向量,导致了光线诡异的变化。修改之后就正常了,下面这段视频是在修改后的基础上加入blending,实现透明效果。

Categories
Tech

OpenGL之纠结

今天开始配OpenGL的编译环境。

目前,根据我的理解,OpenGL并没有提供统一的SDK,所以有GLUT, freeglut之类的东西并存,安装之后,它们就能提供OpenGL编译所需要的一系列接口。

首先试了Mac OS X。其实没多想就放弃了。这姑娘长得那么漂亮,就没个编程的氛围……

然后就开Parallels拿Ubuntu 8.04出来。很轻松的apt-get install一下,就装上了libglut和freeglut等4个包。网上抄了一段测试代码,写好makefile,编译,通过,跳出来一个渲染后的窗口。但是console里很显眼的报错:freeglut: unable to create direct context rendering for window ‘xx’。google了一下,问题在于显卡的硬件加速没有发挥作用。从跳出来的窗口上也可以感觉到确实有些不顺畅。于是,找了nvidia的驱动来装。估量着Pro的显卡还是比较新的,8600M GT,所以装了nvidia-glx-new(-dev)。而且这个new的东西也确实是为8.04的新内核而生的。

但是,装完之后又出现新问题,连运行都不能了。编译、链接通过,运行直接报错:freeglut: OpenGL GLX extension not supported by display ‘:0.0’。再google,说是freeglut,libglut的库和nvidia驱动自带的库不能共存。!×·&……#¥×(!……#

之后看到有一篇文章,面对这种情况时,某人用mesa编译了库来用软件加速,直接无视nvidia的东西。于是照猫画虎,我也弄了mesa来编译。不见起色……怀疑是nvidia还在的缘故,于是又删了驱动,重装freeglut & libglut,重启,又弄出来新的问题,找不到-lGL。手动跑了一次ldconfig,还是死样。又把驱动装回来,编译过了,运行又是unable to create……回到原点。这时候真是严重的心烦意乱,懒得再折腾LIBRARY_PATH啥的了,估计是用虚拟机跑的时候显卡驱动比较土吧。

最后收拾收拾,还是回到Mac下了。正好翻到NeHe的OpenGL教程,里面居然有专门针对OS X的说明!OS X里也有自带OpenGL Framework。nnd。。。正好之前也装了Xcode,就下了一段sample code来。结果……一下通过……运行顺利……出现了一个可爱的红色三角形……

叹,虽然是绕了个大圈,花了大半天时间,最后的结果还是成功的,不仅可以动手写东西了,而且能舒服的呆在Mac下享受漂亮的界面而不必忍受Parallels上面奇怪的Linux(btw, Parallels跑Linux居然不能与OS X之间copy/paste,官方的解释也是无能为力。这叫人怎么用……)。

发泄完毕。