错误一

错误现象:按动相应按键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. Python下划线简介

    Python中下划线的5种含义 分享一篇文章:The Meaning of Underscores in Python. 本文介绍了Python中单下划线和双下划线("dunder" ...

  2. CMake support in Visual Studio

    Visual Studio 2017 introduces built-in support for handling CMake projects. This makes it a lot simp ...

  3. 关于HTML5中的sessionStorage的会话级缓存使用

    sessionStorage作为HTML5的Web Storage的两种存储方式之一.    用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数 ...

  4. vs code 配置 php xdebug

    1.安装扩展 php debug 2.下载xdebug插件 做个页面输出phpinfo(),复制到这个页面 https://xdebug.org/wizard.php 提交后会告诉你机子要下载哪个版本 ...

  5. AD16 PCB重新定义板型时没有Redefine Board Shape

    1.高版本的AD都没有“Redefine Board Shape” 2.在Keep-Out-Layer层,做好了板子的外形,把外形都选中后,然后快捷键D-S-D即可.

  6. windows server 2012 FTP连接报530 User 用户名 cannot log in home directory inaccessible的解决方法

    我最近在创建个人网站,经过了万网购买域名注册(www.lingcup.xyz ,www.lingcup.com),在主机屋购买免费云服务器(ip是49.4.142.41),域名别名解析(cname)到 ...

  7. iserver频繁崩溃、内存溢出事故解决小记

    一.事故分析 在生产项目中,频繁遇到iserver隔一段时间就会出现崩溃的情况. 将iserver错误日志发给技术客服后,说是内存溢出的问题. 查看服务器的配置是32g内存,按理说不该出现此类问题. ...

  8. FPGA做正则匹配和网络安全,究竟有多大的优势?

    FPGA做正则匹配和网络安全,究竟有多大的优势? 西电通院专用集成电路课程学习 云导播 网络安全已经被提升为国家战略的高度,高校里面的新增的一级学科,去年9月份,中央网信办.教育部公布了“一流网络安全 ...

  9. Centos 安装 android sdk(转)

    原文地址: https://blog.csdn.net/kai_1215/article/details/80731099 这个后面有个指令没有运行起来,我做了一些修改: 原文:sdkmanager ...

  10. 解决删除镜像时image is referenced in multiple repositories

    1.查看镜像 docker images rt@:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hours ago MB f8ab12e0 ...