openGL-计算机图形大作业中出现的几个错误及解决
错误一
错误现象:按动相应按键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-计算机图形大作业中出现的几个错误及解决的更多相关文章
- 在Linux下安装PHP过程中,编译时出现错误的解决办法
在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...
- Mysql安装过程中出现apply security settings错误的解决方法
在学习Mysql的过程中,首先要安装Mysql.然而在第一遍安装过程中难免会出现安装错误的时候,当卸载后第二次安装(或者第三次甚至更多次)的时候,往往在安装最后一步会出现apply security ...
- Myeclipse中web project各种常见错误及解决方法(持续更新)
创建web project时的问题 error:Install Dynamic web Module Facet卡住 solution:把网络关掉再创建就可以 Servlet error:The se ...
- .NET中OpenFileDialog使用报线程错误的解决方法
昨天,在做一个NPOI读取的小demo的时候,使用OpenFileDialog打开文件,最开始的写法,直接在按钮点击事件中写,会报错,代码如下: OpenFileDialog ofd = new Op ...
- Java文件中出现这样的提示错误与解决方法:Cannot return from outside a function or method?
1.打开 >> Myeclipse或Eclipse.(我使用的是Myeclipse) 2.打开 >> Window >> Preferences 如图 ...
- VS2005 “无法在证书存储区中找到清单签名证书”错误的解决方法
方法一:在VS2005中出现该错误时,用记事本打开项目的.csproj文件,删除以下内容即可: <ManifestCertificateThumbprint>B531F2CF2227 ...
- Windows7 64位中出现的KERNELBASE.dll错误的解决方法
最近在服程序时遇到个问题,电脑是win764位,编译完的exe测试,偶尔总报错,报错是偶尔的,有时候报错很频繁,但是有一次测试,测试了半天都没有报错,我以为好,发布输出没一会儿又报错了,真是崩溃了,所 ...
- 项目中gulp使用发生的错误及解决
在项目开发中,执行gulp css来生成合成的css文件时,报如下错误 Error: Cannot find module 'browserslist' 解决方法: npm install brows ...
- 连接Oracle 10g时ORA-12514:TNS:监听进程不能解析在连接描述符中给出的SERVICE_NAME错误的解决
近日服务器断电,导致客户端连接ORACLE服务器时出现ORA-12514错误,在网上查得解决方法如下 解决方法: 1. 打开/network/admin/listener.ora文件,找到: SID_ ...
随机推荐
- mysql学习笔记--数据库多表查询
一.内连接[inner join] 1. 语法一:select 列名 from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 2. 语法二:select 列名 from 表1 ...
- webapp优化
1. 优化前提: 业务架构与数据库设计 2. 单页web应用 : ExtJs backbone ng avalon 框架: React Native , ionic , Mui, m ...
- angular ViewChild ContentChild 系列的查询参数
官方说明 官方文档 在调用 NgAfterViewInit 回调函数之前就会设置这些视图查询. 元数据属性: selector - 用于查询的指令类型或名字. read - 从查询到的元素中读取另一个 ...
- 初始js闭包&事件的冒泡和捕获&EVENT对象
一.初识闭包 function a(){ var n = 0; this.inc = function () { n++; console.log(n); }; } var ...
- Ubuntu16.04 静态IP设置
为VMware虚拟机内安装的Ubuntu 16.04设置静态IP地址NAT方式 1.安装环境 VMware 12 Ubuntu 16.04 x86_64 2.在VMware中,配置网络环境 VMwar ...
- Java高级应用简笔
1. Annotation 使用范围: package, class, method, field 常用: @Override, @Deprecated, @SuppressWarnings 自定义注 ...
- Android自动化之Monkey测试(二)
本文主要从以下方面进行分享. 一.查看应用包名二.Monkey启动三.Monkey停止四.Monkey命令五.日志分析 一.查看应用包名 大多数时候,我们都是对特定的应用进行monkey测试,因此需要 ...
- MySQL 聚合函数 控制流程函数
常用的聚合函数 1. AVG() 求平均值 mysql> AVG([DISTINCT] expr) -- 返回 expr 的平均值 mysql> select AVG(age) from ...
- 原来这就是 UI 设计师的门槛
本文主要分享 UI 设计师入行的一些个人经验指南,希望可以带给新入行业的设计师一点帮助! 写在前面 随着互联网的不断发展,特别是移动互联网的不断成熟,视觉设计师也进行了迭代与细分.衍生出的 UI 设计 ...
- ----改写superheros的json以及上传到github----
以下为js代码: var header = document.querySelector('header'); var section = document.querySelector('sectio ...