错误一

错误现象:按动相应按键i和o无法在x轴和y轴移动camera,但按相应按键p可以在z轴移动camera。

错误原因:为了移动camera,设置了三个全局变量x、y、z,用于gluLookAt(x, y, z, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)的参数。但void myKeyboard( unsigned char key, int x, int y )传参时使用了x和y这两个变量名,所以在该函数调用的

case 'i': case 'I':
x += 1; break;

这样的与参数x有关以及与参数y有关的语句中,x和y的值并未发生变化。

解决方案:为了移动camera,设置了三个全局变量x、y、z改名为xx,yy,zz,相应的用到这三个变量的地方也做修改。

如何找到的错误原因:x,y,z三个是一起设置与使用的参数,其中两个无法正常使用,第三个却可以,那么应该有不同之处。先是看了一遍使用这三个参数的代码,格式一致,并未发现不同。然后扩大检查代码的范围,查看使用这三个参数的整个函数,先从写的键盘事件的函数入手,就看到了myKeyboard函数传参的变量名,恍然大悟。

错误二

错误现象:纹理贴图贴上的图片中颜色出现了误差,比如本来应该是红色的变成了蓝色,整个图片色调都变了。

错误原因:bmp载入函数写好之后生成纹理时glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0,GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels);函数中GL_BGR_EXT参数报错,起初改成了GL_RGB,通过了编译。但是bmp存储不是RGB的顺序而是BGR的顺序,这里本来就应该是GL_BGR_EXT参数,这里的GL_BGR_EXT参数报错是因为没有头文件glext.h,无法处理该参数。

解决方案:将GL_RGB改回GL_BGR_EXT,并加上头文件#include <GL/glext.h>。

如何找到的错误原因:一开始无从下手,后来想,他山之石可以攻玉,不妨看看别人的纹理贴图代码,发现别人用了glext.h头文件和GL_BGR_EXT参数,尝试着修改之后,图片恢复正常颜色。后来又查了相关资料,才知道bmp存储不是RGB的顺序而是BGR的顺序,glext.h头文件中有将BGR的顺序变为RGB的顺序的函数。

错误三

错误现象:天空盒贴图贴了底面和后面时,发现明明有一条公共边,两张图片却未能接在一起,本应是底面与后面相交处却是背景颜色黑色。

错误原因:视角是30度俯视且gluPerspective()的zFar参数设置不够大,导致那部分棱角未在视图中显示。

解决方案:修改了图片的位置以及zFar大小为合适值。

如何找到的错误原因:一开始以为是自己贴图的函数glVertex3f中坐标设置错误,可是再三检查无误,百思不得其解。这时代码已经几百行,以为是某句代码写错,看了一遍没看出来,觉得代码太多不好寻找错误代码位置,于是重新建了个project,只写贴图相关的代码,写到gluPerspective()函数时,突然想到该透视视图原理如下图

图中梯形柱是视图的大小,超出该梯形柱的区域都不可见。而且曾经写的正方体在改变位置时会出现被削去一块的现象,想到可能是gluPerspective()的zFar参数和贴图的位置坐标设置不够合理使得那个底面与后面相交棱无法显示,于是修改了其参数大小,发现贴图显示正常了。

openGL-计算机图形大作业中出现的几个错误及解决的更多相关文章

  1. 在Linux下安装PHP过程中,编译时出现错误的解决办法

    在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...

  2. Mysql安装过程中出现apply security settings错误的解决方法

    在学习Mysql的过程中,首先要安装Mysql.然而在第一遍安装过程中难免会出现安装错误的时候,当卸载后第二次安装(或者第三次甚至更多次)的时候,往往在安装最后一步会出现apply security ...

  3. Myeclipse中web project各种常见错误及解决方法(持续更新)

    创建web project时的问题 error:Install Dynamic web Module Facet卡住 solution:把网络关掉再创建就可以 Servlet error:The se ...

  4. .NET中OpenFileDialog使用报线程错误的解决方法

    昨天,在做一个NPOI读取的小demo的时候,使用OpenFileDialog打开文件,最开始的写法,直接在按钮点击事件中写,会报错,代码如下: OpenFileDialog ofd = new Op ...

  5. Java文件中出现这样的提示错误与解决方法:Cannot return from outside a function or method?

    1.打开  >>  Myeclipse或Eclipse.(我使用的是Myeclipse) 2.打开  >>  Window  >>  Preferences  如图 ...

  6. VS2005 “无法在证书存储区中找到清单签名证书”错误的解决方法

    方法一:在VS2005中出现该错误时,用记事本打开项目的.csproj文件,删除以下内容即可:    <ManifestCertificateThumbprint>B531F2CF2227 ...

  7. Windows7 64位中出现的KERNELBASE.dll错误的解决方法

    最近在服程序时遇到个问题,电脑是win764位,编译完的exe测试,偶尔总报错,报错是偶尔的,有时候报错很频繁,但是有一次测试,测试了半天都没有报错,我以为好,发布输出没一会儿又报错了,真是崩溃了,所 ...

  8. 项目中gulp使用发生的错误及解决

    在项目开发中,执行gulp css来生成合成的css文件时,报如下错误 Error: Cannot find module 'browserslist' 解决方法: npm install brows ...

  9. 连接Oracle 10g时ORA-12514:TNS:监听进程不能解析在连接描述符中给出的SERVICE_NAME错误的解决

    近日服务器断电,导致客户端连接ORACLE服务器时出现ORA-12514错误,在网上查得解决方法如下 解决方法: 1. 打开/network/admin/listener.ora文件,找到: SID_ ...

随机推荐

  1. JS 通过 navigator获取判断浏览器信息

    获取浏览器信息需要使用navigator.userAgent 对象 根据获取到的内容判断浏览器信息 亲身测试 navigator.userAgent IE 11  Mozilla/5.0 (Windo ...

  2. swiper插件遇上tab切换

    当swiper插件遇到tab切换,即display的显示与否属性时,失效,方法如下: <script language="javascript"> var mySwip ...

  3. php的trie_filter扩展安装敏感词查找

    #编译libiconv ./configure make make install #编译libdatrie-0.2.11 ./configure LDFLAGS=-L/usr/local/lib L ...

  4. DIV+CSS详解

    DIV+CSS详解 ✪DIV+CSS"这种叫法其实是一种不准确的叫法 在做笔记的最前面必须先给大家纠正一个错误,就是"DIV+CSS"这种叫法其实是一种不准确的叫法,是国 ...

  5. Centos 7下网卡bonding配置之mode4

    一.bonding技术 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量.实现网络冗余.负载等功能,有 ...

  6. vue props命名最好直接使用kebab-case (短横线隔开式) 命名

    vue官方解释,props使用驼峰命名的话,在html中使用时也需要转化成短横线命名,否则报错.个人比较喜欢上下文统一,直接在props命名时就把它命名成短横线隔开式吧.

  7. P1579哥德巴赫猜想

    写来自己学习用~ 题目内容: 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和1 ...

  8. swift 移除控制器中的已经存在的VC 注意

    1.要用 || 2. 如果使用这个代码 只会移除一个VC

  9. 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595

    如图3,点阵屏分单色和彩色,点阵屏是由许多点组成的,在一个点上,只有一颗一种颜色的灯珠,这就是单色点阵屏,彩色的在一个点上有三颗灯珠,分别是RGB三原色. 图4你可能没看出来,那么大块黄色的就是点阵屏 ...

  10. .net framework , code first

    1. 创建一个控制台应用程序, 并添加引用 2 创建 一个类 public class New { [Key] public string NewId { get; set; } public str ...