« 上一篇: 点除与矩阵除法 下一篇: 用2点的坐标建立不同坐标系之间的变换矩阵 »
萝卜 @ 2008-06-19 22:05

今日遇到这样一个问题,使用下面的语句

Z=1e52*rand(200);
axes;
mesh(Z)
结果会在命令窗提示:
Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering.
在图上没有任何图形出现。

如果使用下面的语句
Z=1e-52*rand(200);
axes;
mesh(Z)
会得到一个空的坐标轴,且gca的背景为白色。此时不出现警告。

为了让数据Z显示出来我们可以这样做:
在用mesh命令之前,使用下面的语句就可以了

set(gcf,'Renderer','ZBuffer');
或者
set(gcf,'Renderer','painters');
但是出现这样极大数据或者极小数据,我觉得可能是计算公式存在问题,出现这么大的数
有点脱离物理现实了。

当然对于不同的问题,可能这样的极端问题也可能是成立的。

其中Renderer的默认值是OpenGL,这里补充一下关于OpenGL的知识
出处:http://detail.zol.com.cn/product_param/index3397.html

    OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。
    OpenGL是个与.硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是3D图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS等3D图形设计软件制作的DFX和3DS模型文件转换成OpenGL的顶点数组。

    在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。其中,Open Inventor应用最为广泛。该软件是基于OpenGL面向对象的工具包,提供创建交互式3D图形应用程序的对象和方法,提供了预定义的对象和用于交互的事件处理模块,创建和编辑3D场景的高级应用程序单元,有打印对象和用其它图形格式交换数据的能力。

    OpenGL的发展一直处于一种较为迟缓的态势,每次版本的提高新增的技术很少,大多只是对其中部分做出修改和完善。1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。1995年OpenGL的1.1版本面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,该语言是“OpenGL 2.0”的底核,用于着色对象、顶点着色以及片断着色技术的扩展功能。

    OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。2.0版本首先要做的是与旧版本之间的完整兼容性,同时在顶点与像素及内存管理上与DirectX共同合作以维持均势。OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成(如图一)。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底的精简。此外,硬件可编程能力的实现也提供了一个更好的方法以整合现有的扩展指令。

    目前,随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但厂商的用户的认知程度并不高,未来的OpenGL发展前景迷茫。


最新评论

2008-07-02 10:09

麻烦萝卜大哥帮我调试一下这个程序好吗  多谢了


%-----------------------------------------------------------
function v1=vgb(s,a,n)
v1(1,1)=(a(s(1,1),s(2,1))+a(s(1,1),s(1,2))+a(s(1,1),s(2,2)))/3;
v1(1,n)=(a(s(1,n),s(2,n))+a(s(1,n),s(1,n-1))+a(s(1,n),s(2,n-1)))/3;
v1(n,1)=(a(s(n,1),s(n,2))+a(s(n,1),s(n-1,1))+a(s(n,1),s(n-1,2)))/3;
v1(n,n)=(a(s(n,n),s(n,n-1))+a(s(n,n),s(n-1,n))+a(s(n,n),s(n-1,n-1)))/3;
j=1;
for i=2:n-1
   v1(i,j)=(a(s(i,j),s(i-1,j))+a(s(i,j),s(i+1,j))+a(s(i,j),s(i,j+1))+a(s(i,j),s(i-1,j+1))+a(s(i,j),s(i+1,j+1)))/5;
end
j=n;
for i=2:n-1
v1(i,j)=(a(s(i,j),s(i-1,j))+a(s(i,j),s(i+1,j))+a(s(i,j),s(i,j-1))+a(s(i,j),s(i-1,j-1))+a(s(i,j),s(i+1,j-1)))/5;
end
i=1;
for j=2:n-1
v1(i,j)=(a(s(i,j),s(i+1,j))+a(s(i,j),s(i,j+1))+a(s(i,j),s(i,j-1))+a(s(i,j),s(i+1,j-1))+a(s(i,j),s(i+1,j+1)))/5;


2008-07-02 10:10

界面有点小 不能全部粘上去


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定