opengl笔记(7)

2019-01-26 21:33

OpenGL常见问题解答(中文)

问:我想看英文常见问题解答,有没有?

答:http://www.86vr.com/news/LIST.ASP?id=3040 问:OpenGL中的Stencil Buffer是什么东西? 答:模板缓存(Stencil Buffer)。它可以保持屏幕上某些部位的图形不变,而其它部位仍然可以进行图形绘制。比方说,可以通过模板缓存来绘制透过汽车挡风玻璃观看车外景物的画面。首先,将挡风玻璃的外形存贮到模板缓存中去,然后再绘制整个场景。这样,模板缓存挡住了通过挡风玻璃看不见的任何东西,而车内的仪表及其它物品只需绘制一次。因此,随着汽车的移动,只有外面的场景在不断地更改。

问:我如何将3D文件转换成OpenGL C程序?

答:3DWin/3D to 3D,它能将多种3D格式互相转换,还可以转存成Opengl C程序。网站:http://www.stmuc.com/thbaier/tools.html 问:glos.h是什么文件?

答:判别操作系统的头文件。

问:OpenGL的左右缓冲区如何使用?即:gldrawbuffer()中的,GL_RIGHT、GL_LEFT参数的使用。我想做一副立体图,(两副图像交替在屏幕上不停刷新)。 图形加速卡选用的是华硕的3800带立体镜的那一种。

答:这需要看驱动程序是否支持OpenGL的左右缓冲区。据我们所知,华硕显卡不带这样的驱动。而象Diamond Fire GL系列、ELSA的Glorial系列等显卡支持这种功能。在购买显卡时,应认清驱动程序的支持性能。

问:请问用在OpenGL编程中有哪些方法可以得到两个曲面的交线? 答:OpenGL用于绘制图形,没有交线计算,需要自行开发算法。 问:关于OpenGL中雾的问题。 答:首先我想说一下OpenGL中雾的定义,OpenGL中雾的模式有三种:GL_LINEAR,GL_EXP,GL_EXP2。以GL_LINEA为例:雾的混合因子f(0=<=1)的计算公式为f=(end-z)/(end-start) 。其中start 和end 为程序设置的雾的起点和终点(即glFogf(GL_FOG_START,start); glFogf(GL_FOG_END,end);)。最值得关注的是z的定义。我手头上有好几本OpenGL的参考书,但介绍了雾的定义的却只有两本。在《OpenGL编程实例与技巧》(吴斌 毕丽蕴 编著)中,他们认为“z表示视点与图元中心的观察坐标之间的距离”。在《OpenGL深入编程与实例揭秘》(彭晓明 王坚 编著)中,他们认为“z是像素或顶点在眼坐标系中的z坐标分量值(总为负值)”。在VC++的联机帮助中说的是“Let z be the distance in eye coordinates from the origin to the fragment being fogged. ”。假如所绘制的物体不大(比如长和宽都为1个单位的矩形),那么上面所说的都可以近似为:z就是视点与物体在观察坐标之间的距离(负值)。当绘制的物体很大时(比如长和宽都为200个单位的矩形),我认为上面的说法都值得探讨。我认为z可能是“视点与绘制物体边缘在观察坐标之间的最近距离(负值)”,上次我绘制图形时绘制了几个很大的物体,所以当我移动物体时,雾的效果并不是近

处清楚,远处模糊。我想假如把大的物体划分为很小的物体进行绘制,就可以解决问题。

问:请问画树时如何将树设置为透明格式? 答:可以使用融合的方法。

问:我在做一个虚拟场景时是用Bezier曲面拟合环境中的曲面,然后再贴以纹理,但我发现这样极其占用系统资源,而且我用了显示列表来处理。我想请教一下有没有什么别的方法来拟合曲面而不是那么占用系统资源,或者是我的用法不对。

答:当然不能用Bezier曲面拟合环境中的曲面,Bezier曲面需要大量的计算。最好的办法是直接获得曲面的顶点,采用TRANGLES或四边形来绘制。

问:我已经做好了一个视景,现在要做它的后视景,但是有个问题就是后视景并不能由前视景简单的经过旋转180度得到(因为后视的原理是以镜平面对称),例如现在将视景绕Y轴(视景坐标系)旋转180度,出来的效果是左边的物体到右边而右边的物体到左边了,所以也不符合,现在想请教一下有没有比较简便些的算法来实现这个后视景问题。

答:这个问题不只是旋转坐标轴,而是镜面反射编程,你可网上有关编程示例。 问:我用OpenGL画曲面,原始数据通过打开数据文件获取,但为什么打开一个数据文件画好后,紧接着打开另一个文件再画时,其外形和颜色都受第一次的曲面影响?为什么我的曲面重画(刷新视区)后变成了坐标系中的平面?即各点Z坐标的值表面上看似乎变的相等了?

答:显然你没有重新设置颜色。至于外形,检查坐标数组。检查Z轴坐标值。另外,注重几何变换PushMatrix和PopMatrix。 问:如何通过屏幕坐标获取物体三维坐标? 答:使用gluUnProject函数。

问:如何在OpenGL中将显示列表的文本用字体对话框控制?

答:在显示列表中就不能进行中间变化!用字体对话框控制字体,只能在显示列表之前。

问:导入3D模型文件为什么总是不能很好的倒入纹理贴图,有什么办法可以很好的导入一个完整的3D模型文件? 答:这种情况一般都是由于纹理坐标错误。读带纹理3DS格式模型一般比较复杂,需要时间理解透彻才行,暂时可以用材质(不含纹理)代替。借鉴网上一些免费纹理模型贴图的示例也行呀。

问:我的工程将视区分为两个后(加了一个FormView窗体,用于放一些控制图形缩放的控件,这样它于绘图窗口共享原来的视区)为什么用OpenGL画的图不见了?我需要注重什么?错在那里? 答:注重设置好象素格式。

问: 我自己绘的四边形片怎么原来有边框和界限即一个个的小方格,现在运行程序后忽然变成了一条没有任何界限的色带?程序片段如下: glPolygonMode(GL_FRONT,GL_FILL); 111 glBegin(GL_QUAD_STRIP);

for(i=0;i<=HEIGHTNUMBER;i++) {

glVertex3f(base,Ybase- i*Yalphe,0.0); glColor3f(m_getMinR+i*Redalphe,

m_getMinG+i*Greenalphe,m_getMinB+i*Bluealphe); }

glEnd();

答:调用了glPolygonMode的填充方式,当然变成色带。 问:用OpenGL做人体动画合适吗?

答:做动画可用3DSMAX这样的动画软件。而实时开发则需要OpenGL。OpenGL是很好的三维图形库,当然做人体动画需要比较复杂的编程。 问:OpenGL Extension是什么?

答:Extension是OpenGL的扩展库,各硬件厂家为了更好地发挥自己的芯片的图形性能,驱动程序支持许多非凡有用的扩展库。当然,SGI和微软力求统一标准,无奈象TNT2这样的芯片产量太大,所以厂家完全可以自行其是。为此,扩展库的支持种类、支持程度与计算机中的图形卡及其驱动程序有关。象SGI NT工作站完全支持SGI发布的所有扩展库,nVIDIA TNT2图形芯片一般都支持nVIDIA的扩展库。所支持的扩展库名称可在驱动程序显示高级设置中看到。目前ELSA这样的图形卡的性能较为优越,其nVIDIA GeForce2为芯片的图形卡所支持的扩展库相对比较完整。

问:在OpenGL中,房间漫游时总是要“穿墙而过”,下楼梯时总是悬浮在半空中。请教解决办法。

答:这需要图形学中的“碰撞检测”方法,具体过程比较复杂并很有技巧性。自己到网上看看吧。

问:请问在OpenGL的辅助库函数中是否有可以将所绘图形存为位图的函数?我想把所绘图形存为位图格式,有哪些方法? 答:没有现成的函数,自己写吧。

问:在标准C语言下,可用glBingTexture来贴纹理(以便硬件加速),不知道在Visual C++ 6.0下为什么不行,还是我没考虑到某些什么?

答:检查函数的使用方法;正确安装OpenGL1.1,甚至OpenGL1.2。

问:Delphi和Visual C++都支持OpenGL,假如要编类似模拟飞行的程序, 哪个更轻易一些,或者说Delphi和Visual C++哪个处理图形动画更快一些? 答:Delphi做界面比VC较轻易,做算法较麻烦。但VC做算法和图形程序都会更好一些。

问:在进行编程时,我想把自己的三维模型或人体骨骼运动输出到3DS中,不知我可找到相应答案吗?

答:3DS MAX好象还不能直接接受外部运动数据,但它可以生成运动数据(使用一些插入件,网站里有),或者先有运动数据后,再设法输入到3DSMAX中。 问:我们知道通过一个点的三维坐标可很方便地计算出在二维屏幕上该点的二维坐标(用OpenGL编程更轻易)。但反过来,在知道二维显示坐标的前提下怎样计算出三维坐标解集(应为一直线)?

答:这个问题可用OpenGL的gluUnproject()函数。

问:在OpenGL编程中,我碰到一个问题:在知道三自由度转角与臂长的前提下如何计算臂长端点的空间坐标(x,y,z)。我用C语言进行了编程,不知OpenGL中是否有相应的函数?

答:这个问题属计算问题,需要自行编程解决,OpenGL 主要解决三维图形及效果的绘制问题。

问:请问如何解决大数据量的三维可视化的速度问题?除此之外还有没有别的办法? 答:OpenGL只是一个很好绘图渲染的库,大数据量的算法则需要自行编程实现。 问:我想做一个有关人体模型的三维重建的东西,该如何做呢?

答:关于三维重建的问题,由于国内还处于学术研讨层次上,我建议首先看一些有关论文,再考虑程序实现。

1)医学图象三维重建及可视化技术研究

:http://www.cad.zju.edu.cn/chinagrap...ot_QinXuJia.ppt 2)科学计算视化及虚拟现实医学应用

:http://www.cad.zju.edu.cn/chinagrap.../VisualHOT3.ppt 3)应用数学研究室

研究室的主要研究方向有:工业CT图像重建的数学理论与算法。 :http://www.biti.edu.cn/t_r/yy.htm

问:网上一些程序中用到的纹理图像并不是位图格式,而是以bw或rgb为扩展名的文件,不知用什么软件才能打开这些图形文件,并且我想问一下这些图形文件能否转换成位图格式?我用Acdsee和Photoshop都打不开。

答:可以用Acdsee2.4版打开rgb格式图象文件,你也可直接在OpenGL程序中使用bmp文件,可查glu.h中的image宏。

问:请问在OpenGL下如何画凹多边形,若分解为三角形,则不能使用glPolygonMode功能,有什么办法解决。 答:一般都要预处理,保证不出现凹多边形,但OpenGL也提供了一种处理方法,即Tesselation分化方法,但占内存大,影响速度性能,不宜使用。

问:如何解决由于Win系统不支持spong平滑模式 导致曲面镜面光不平滑的问题?

答:需要材质、网格密度与SMOOTH绘制模式结合。

问:如何锁定图形中部分图形对象,而只对某些对象进行操作?

答:对每个对象命名(可用OpenGL中的显示列表方法),然后分别控制就可。 问:有关OpenGL的颜色操作与纹理,材质和光照之间的关系。 答:说来话长,需好好看书。

问:在拾取操作过程中,整个显示列表是否不起作用?假如要对单个地物进行操作时,是否必须单个进行建立显示列表?

答:显示列表与内存含义类似,一旦确定显示列表,其中的内容就不要改变;但可加速。

问:请问如何在不修改其他图形对象时,删除某些对象? 答:仍然用显示列表方法。

问:我要将一个人的照片用贴纹理的方法贴到一视景中,要使除人以外的部分要是透明的,而位图往往是矩形的,那么在编程如何才能让除人以外的部分透明呢? 答:可考虑使用stencil纹理贴图方法。

问:如何锁定图形中部分图形对象,而只对某些对象进行操作?

答:对每个对象命名(可用OpenGL中的显示列表方法),然后分别控制就可。 问:我在OpenGL中用一维求值器绘制Bezier曲线: glBegin(GL_LINE_STRIP); for (i = 0; i <= 30; i++)

glEvalCoord1f((GLfloat) i/30.0);


opengl笔记(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:[精选资料]关于如何培养学生勤俭节约习惯的研究

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: