文档库 最新最全的文档下载
当前位置:文档库 › 基于XML的BOM多视图映射方法研究

基于XML的BOM多视图映射方法研究

基于XML的BOM多视图映射方法研究
基于XML的BOM多视图映射方法研究

田禄俊,等:基于XML的BOM

多视图映射方法研究7期目前,PDM、ERP、CAPP等应用系统已经在各个企业有了较大范围的应用,并取得了显著的成效。但由于这些系统分属不同的专业领域,并且各系统在功能、结构和数据上相对独立,彼此不能实现信息交换和共享,导致本来可以并行的工作只能串行处理,很大程度上降低了企业运营的效率。建立企业各应用系统的集成平台,实现各系统的无缝集成,达到数据和信息的高度共享,是一种必然的趋势。BOM(BillofMaterial,物料清单)作为这些系统管理的核心数据,贯穿于产品的全生命周期,是企业系统集成中最重要的基础数据和成功的关键。

在产品的整个生命周期中的不同阶段,有着不同BOM视图[1],可以解决在异构系统集成中BOM的共享和映射这个难点,满足BOM的一致性、完整性和数据集成性的需求。由于XML众多特性非常适合应用在BOM上,已经提出了XMLBOM的概念[2]。因此本文采用基于XML的建立BOM模型的方法,实现异构系统BOM视图间的共享、传递和重构。

基于XML的BOM模型的建立

1.1

XML在BOM中的应用优势

由于XML具有层次结构和可扩展性特点,在机

械行业中,大量的数据开始以XML格式进行交换和存储。XML使得不同计算机应用系统之间交换数据变得容易起来,并且保证了数据在交换过程的正确性和完整性。利用XML存取BOM数据具有很大的优势,实现不同系统之间BOM数据的共享和交换,可以解决BOM应用中的一系列难以解决的问题[3]。

(1)由于BOM具有明显的层次特点,在传统的关系数据库上存储较为复杂,存在大量的数据冗余,并且难于保证数据的一致性和完整性。XML也具有明显的层次,因此把BOM数据以XML文档的形式存储较为方便,有利于保证BOM数据的一致性和完整性。

(2)不同系统之间可以直接通过交换XML文档实现BOM数据的共享和交换,保证了异构环境下

BOM数据的共享和交换。

(3)由于XML具有良好的可扩展性,并且用XML

文档表达的BOM数据结构简单、层次分明,可以方便地对数据进行扩充和修改,有利于BOM数据的版本管理和扩充,实现不同的配置要求,便于实现不同BOM视图间的转换。

(4)零部件和文档之间的关系都可以集中存储在XML文档中,实现了结构化数据和非结构化数据的集中管理,保证了BOM数据的集中性和统一性。

可见,用XML表示BOM有很多优点,而且易于实现不同系统之间BOM传递和共享。

1.2基于XML的BOM模型建立

随着计算机技术的应用在企业中的不断深入,

基于XML的BOM多视图映射方法研究

田禄俊

王仲奇

张慧娜

(西北工业大学机电学院航空制造工程系,西安710072)

摘要产品的BOM数据贯穿于产品的整个生命周期,是各应用系统之间进行数据集成的桥梁和基础。BOM多视图之间的映

射一直是企业集成的关键,也是一个难点问题。XML由于其本身具有很多优越性,非常适合用来表示BOM,易于实现BOM在不同系统之间的共享和传递。以EBOM向MBOM映射为例为实现BOM多视图间的重构,给系统的集成提供了一种非常有希望的解决方法。关键词

物料清单(BOM)

XML多视图映射

中图法分类号TP392;文献标识码

2005年12月5日收到

国家自然科学基金(K0504020515)资助

第一作者简介:田禄俊(1981—),男,安徽黄山人,硕士研究生,主要研究方向为企业信息化集成,通信地址:陕西省西北工业大学483#(710072),E-mail:tianlujun@mail.nwpu.edu.cn。

第6卷第7期2006年4月

1671-1815(2006)07-0829-04科学技术与工程

ScienceTechnologyandEngineeringVol.6No.7Apr.2006

2006Sci.Tech.Engng.

科学技术与工程6卷

现代BOM已经不单是一个狭义上的零件明细表,还应该包含更多的信息,比如文档、实体模型,零件的加工信息、工艺信息等。这样BOM本身就构成一类复合对象,这是现代BOM有别于传统BOM的显著特点之一,也增加了建立BOM模型的难度。

当前,大家都习惯用树状结构来表示BOM,设计主要考虑两个方面:节点的层次结构和节点的属性。在企业实际生产中,例如由于存在大量的零部件工艺借用的问题,因此一方面保证产品零部件装配关系的完整性和一致性,避免产生不必要的冗余。BOM数据表的设计采用产品零部件之间的装配属性关系与产品零部件自然属性相分离的方式。亦即用一个表描述装配关系,用另一个(些)表描述产品零部件的详细属性信息(有的时候可能不只一个表,因为BOM不同零部件的属性有的时候具有自己的一些特性,可能需要另外建表,这里表达的含义主要是层次结构表和属性表分开的意思)。可以通过节点层次关系表来建立XML文件的层次结构,然后将产品零部件的属性填入其中,这样建立基于XML的模型。如图1所示。

下面就是一个利用上述方法构建出来的某装配件的XML文件

<?xmlversion="1.0"encoding="GB2312"?><B1000物料名称=XX型显示终端>

<B1001物料名称=机箱数量=1类型=B生效日期=050101失效日期=070101成品率=0.99...>

</B1001>

<B1002物料名称=键盘数量=1类型=M生效日期=050101失效日期=060101成品率=0.98...>

<C2277物料号=...>...</C2277><X2286></X2266></B1002>...

<B1000物料名称=XX显示终端>

2BOM多视图映射的关键技术和基本流程

2.1XML与关系数据库的映射

虽然XMLDB已经有了较快的发展,但还不是很

成熟。XML的核心作用仍主要体现于共享数据的交换实现和直接的Web操作上,一般很少直接管理产品数据。因此,目前在实际应用中,大量数据的存储管理还是依靠关系数据库管理系统。

为了数据库和XML文件之间相互传输数据,需要进行XML文档结构和数据库结构之间的相互映射。这种映射分成两大类:模式驱动和模板驱动[4]。无论使用哪种方法,都必须进行XML文档和数据库之间的转换,以实现BOM信息在关系数据库中的存储与读取。

现在就以数据库映射到XML文档算法说明数据库和XML文件之间的映射。基本算法如下:

1)创建一个空的XML文件;

2)用深度遍历的方法将表1的树状架构依次插

入步骤1)生成的空文件,最终生成XML的文件的节点结构,这一就完成了XML文件的层次结构的构造;

3)采用广度遍历的方法遍历步骤2)生成的XML文件,利用sql查询语句将表2中零部件的属性一次插入XML文件中相应的节点中,作为XML文件中的NODE属性。

2.2基于XML的BOM操作

BOM不同视图映射的时候,主要是改变BOM的

节点结构和节点的属性。采用XML文件建立的BOM

物料号物料名称类型生效日期失效日期成品率ABC码

B1001机箱B0501010601011.00AB1002键盘

0501010601010.97BC2277键盘体M0501010602020.98BX2266

按钮键B

050101

060202

0.98

表2

零部件的属性表

层次

物料号

数量

下一级物料号

0B100011B10011...1B10021C2272C22771Z9912

X2266

Z992

表1

BOM层次结构表

图1构造基于XML的BOM模型

节点层次结构表

零部件的属性表

节点层次结构

节点的属性

BOM的XML文

830

田禄俊,等:基于XML的BOM多视图映射方法研究7期

模型,就能利用XML的相关标准DOM(DocumentObjectModel,即文档对象模型),可以方便地对XML文件进行各种操作。通过将XML文档的内容实现为一个对象模型,实现BOM所需要的各种操作。DOM是一种与平台和语言无关的接口,它允许程序和脚本动态访问和修改文档的内容、结构和类型[5]。它定义了一系列的对象和方法对DOM树的节点进行各种随机操作,现在就用Java的DOM部分的API来实现BOM的各种操作。

2.2.1创建BOM的文档对象

由于在异质系统中采用XML文件共享和传递BOM信息,把这个文档的内容解析到一个个Java对象中去供程序使用,利用JAXP就能做到这一点。

DocumentcreatDocument(){

DocumentBuilderFactoryfactory=

DocumentBuilderFactory.newInstance();

factory.setValidating(validating);

Documentdoc=factory.newDocumentBuilder().parse(newFile(filename));

returndoc;

现在就可以利用这个BOM的文档对象实现对XML文件添加或者删除节点和属性修改等操作了。2.2.2修改BOM

利用Java本身提供的API可以很方便地对BOM的节点层次结构进行节点的属性进行各种修改,本文以下只是简短地列出BOM对增加节点和修改属性的操作,其他各种操作类似。

Documentdoc=creatDocument()//创建BOM文档对象

Elementelement=doc.getElementById("key1")//查找指定节点

Elementnewelement=doc.createElement("item")

//生成一个新的节点

element.insertBefore(newelement,element.getLastChild())

//将节点插入指定节点的指定位置

booleanhas=element.hasAttribute("value")

//判断该节点是否含有指定属性

element.setAttribute("value","newValue1");

//将属性重新设定一个新值

2.2.3BOM可视化显示

XML文件本身是一种良好的结构化文件,但是在实际应用中一向要对BOM进行可视化处理,这样用户才能更直观地使用和阅读BOM文件,软件才能有实际应用的价值。几乎任何编程语言都可以显示XML文件的树状结构。其中java当中的GUI部分的JTree非常适合用来显示XML文件。其基本过程主要如下:(1)解析要显示的XML文件,生成一个XML文件的文档对象;(2)构造一个空的JTree对象;(3)用深度递归的方法遍历该XML文件的文档对象,得到XML文件的每一个节点和节点属性,将其包装到一个TreeNode对象中,然后所有的TreeNode对象按照原先的层次结构插入到(2)生成的JTree对象中去。这样就完成了JTree显示XML文件。

2.3BOM映射的基本流程

不同的BOM之间视图映射一直是企业系统件集成的基础和难点。研究产品BOM视图映射重点是要总结源BOM与目标BOM之间的节点关系的不同以及BOM上的节点属性信息的不同,也就是考察与映射前后发生变化的节点结构与信息。EBOM(设计BOM)是所有BOM数据信息的根本来源,MBOM是MRPⅡ和ERP运算的基础。本文主要研究以EBOM向MBOM映射,进而研究其他的BOM映射。EBOM与MBOM的节点信息的差异主要来源于可能会加入EBOM本身不含有的制造信息,如工艺信息、加工信息、工艺装备等信息,节点的原有信息有些可能需要保留,而有的则需要删除。节点关系的不同原因主要有以下几点:

虚拟件:虚设部件是指在设计中出现,但在实际生产中并不参与制造,也不占用库存的物料;

工艺件:工艺件是指在设计BOM中不出现,但在实际生产中因为工艺要求,既要制造又要储存的部件;

外协件:外协件是指部件本身及其所属的所有零部件都外协加工的部件。

此外导致外部条件变换的情况,比如某物料有替换件,还有可能根据工厂情况临时调整制造BOM结构。

EBOM视图到MBOM视图重构的基本算法:

(1)首先从PDM或其他EBOM管理系统提取出

图2JTree显示的BOM

结构

831

科学技术与工程6卷

BOMMulti-viewMappingBasedonXMLTIANLujun,WANGZhongqi,ZHANGHuina,LIUBo

(SchoolofMechallectronic,NorthwesternPolytechnicalUniversity,Xi'an710072)

[Abstract]TheproductBOMdataisusedandprocessedintheproductlifecycle,andisthebridgeofdata

integrationamongenterpriseapplications.BOMmulti-viewmappingisthekeyfactorofenterpriseintegrationandisthedifficultproblem.XMLhasmanyadvantagesandisveryfittoexpressBOM.Withthismethod,BOMcanbestoredandpassedbetweendifferentsystemsandmulti-viewmappingiseasytobeprocessed.AsolutiononEBOMtoMBOMisgivenandanewpromisingwayofapplicationsystemsisprovided.[Keywords]BOM(BillOfMaterial)XML(eXtensibleMarkedLanguage)multi-viewmapping

EBOM的XML文件。

(2)把(1)得到的文件,传递到ERP或MBOM管

理系统(利用XML文件易于在不同系统间共享和传递的优势),复制EBOM到MBOM系统里,这个文件是下面进行映射的基础。

(3)遍历整个XML文件,根据节点属性变化和节点结构产生变化的原因对其进行调整,同时加入

MBOM所需要的制造信息,这就产生了MBOM的XML文件。

(4)几乎可以通过任何编程语言将(3)得到的

XML文件建立一个可视化的树状图形,便于用户操

作。利用XML文件与数据库的映射,将MBOM的数据信息写入MBOM的数据库管理系统进行管理,这就完成EBOM视图向MBOM视图的映射。

3结论和应用

BOM是企业的核心数据,在企业信息化中具有举足轻重的作用。通过用XML半结构层次化数据形

式来表达BOM,不但更为简单和自然,而且可以充分利用XML标准提供的各种完善的服务功能,极大

地简化了编程。本文结合了课题———军机数字化设计制造集成技术,开发出了基于XML的设计与制造集成系统,实现了设计BOM向制造的BOM映射,为系统的集成提供一种很有希望的解决方法。

1项艳梅,朱林,刘清华.基于BOM的产品数据多视图集成研究,计算机应用研究,2004;(2):17—19,55

2PLMXML白皮书.Openproductlifecycledatasharingusing

XML,UGS公司文档,2002

3李振林,廖文和,刘长易.XML在企业信息套装软件BOM中的应用.企业管理与信息化,200;3(5):79—81

4熊光彩,莫蓉,毛海鹏,张定华.基于XML的BOM信息共享和存储,机械科学与技术,2002;(5):848—851

李世斌,谢庆生.应用集成中BOM及其管理的研究.计算机与现代化,2003;(7):33—36

图3EBOM向MBOM基本流程

PDM系或其他EBOM管理系统

提取EBOM并传递

根据具体算法调整节点结构

XML文件到数据库的映射

遍历整个XML文件

EBOM(XML)

解析

XML文件

生成MBOM(XML)

单一数据源或者物料制造零件信息库(MBOM特有的属性)

生成MBOM的节点层次结构和保留共同属性

可视化的树状结构(前台)

MBOM管理系统数据库(后台)

832

计算机图形学课程设计--圆柱面图像纹理映射算法

计算机图形学课程设计--圆柱面图像纹理映射算法

《计算机图形学》 课程学习报告 项目题目:圆柱面图像纹理映射算法

目录 一、项目描述............................................................................... .. (1) 1.1圆柱面的建立和二维图像纹理的绑定 (1) 1.2坐标系的建立............................................................................... (1) 二、项目需求............................................................................... .. (1) 2.1 几何构造的原理............................................................................... . (1) 2.2、动画的设计 (2) 2.3 纹理的设计 (2) 2.3.1 纹理映射的原理 (2) 2.3.2 纹理定义 (2) 三、项目设计...............................................................................

(3) 3.1、窗口设计以及各项功能的实现 (3) 3.1.1 窗口设计函数 (3) 3.1.2 点表函数 (4) 3.1.3 面表函数 (4) 3.1.4 绘制圆柱函数 (6) 3.1.5 透视变换函数 (8) 3.1.6 读入纹理函数 (8) 3.1.7 背景函数 (9) 3.1.8 时间函数............................................................................... . (9) 3.1.9 动画控制函数............................................................................... .. (10) 四、项目效果............................................................................... (10) 4.1构造图形分析以及坐标系变换的效果.....................................错误!未定义书签。 五、项目总

实验六凹凸纹理映射技术样本

实验六: 凹凸纹理映射技术 一、实验目的 掌握凹凸纹理映射的原理, 熟悉Ogre中纹理映射的使用方法。 二、实验仪器 pc、 vs 三、实验原理及过程 1、网上检索凹凸纹理映射相关技术 凹凸纹理映射是一种纹理混合方法, 它能够创立三维物体复杂的纹理外观表面。普通的纹理映射只能模拟比较平滑的三维物体表面, 难以显示表面高低起伏、凹凸不平的效果。凹凸纹理映射能够经过一张表示物体表面凹凸程度的高度图( 称为凹凸纹理) , 对另一张表示物体表面环境映射的纹理图的纹理坐标进行相应的干扰, 经过干扰的纹理坐标将应用于环境映射,从而产生凹凸不平的显示效果。凹凸纹理映射一般由三张纹理映射图组成, 第一张纹理图表示物体表面原始纹理颜色, 第二张凹凸纹理图表示物体表面凹凸的高度起伏值, 用来对下一张环境纹理图坐标进行干扰, 第三张纹理图表示周围镜面反射或漫反射光照的环境光照映射图。让我们来看看一个粗糙的表面。 从远处看, 你判断这个物体是粗糙的的唯一证据是在它表面上下的亮度有改变。你的大脑能够获得这些亮暗不一的图案信息, 然后判断出它们是表面中有凹凸的部位。左边的一幅图就说明了这一点。你能够发现它是一个浮雕式的表面。一些矩型和字母被印入表面, 可是它们摸上去就像是一个隐藏的监控器的玻璃。如果这个图像是在适当的位置上, 那么它除了改变亮度, 不需要再做任何其它的工作。那么你可能会问: 我是怎么知道哪些点要亮, 哪些点要暗呢? 这不难。绝大多数人生活在这样一种环境下——这个环境的大多数光源来自上方( 译者注: 比如白天主要的光来自太阳, 夜晚主要的光来自天花板上的日光灯) 。因此向上倾的

地方就会更亮, 而向下倾的地方就会更暗。因此这种现象使你的眼睛看到一个物体上亮暗区域时, 能够判断出它的凹凸情况。相对亮的块被判断是面向上的, 相对暗的块被判断是面向下的。因此我只需要给物体上的线条简单得上色。如果你想要更多的证据, 这里还有一幅几乎相同的图, 不同于前的是它旋转了180度。因此它是前一幅图倒转的图像。那些先前看起来是凹进去的区域, 现在看起来是凸出来的了。 凹凸映射(凹凸纹理)Bump Mapping 这个时候你的大脑并没有被完全欺骗, 你脑中存留的视觉印象使你依然有能力判断出这是前一幅图, 只是它的光源变了, 是从小往上照的你的大脑可能强迫性地判断出它是第一幅图。事实上, 你只要始终盯着它, 而且努力地想像着光是从右下方向照射的, 你就会理解它是凹的( 译者注: 因为日常生活的习惯, 你会很容易把这些图形判断成凸出的图形, 可是因为有了上一幅对照图的印象, 你可能才会特别注意到这些图块其实还是凹入的, 只是判断方法不符合我们日常生活习惯, 因为这时大多数光不是从上方照射, 而是从下往上照射) 。凹凸纹理映射技术能够用来模拟粗糙物体表面凹凸不平的细节, 如: 橘子、草莓、树皮等。凹凸纹理映射最早只能用于离线绘制系统, 随着图形硬件的发展, 她已经成为游戏引擎中不可缺少的部分。最早的凹凸纹理映射使用一个高度图和曲面参数( 一般是纹理坐标) 的偏导数计算扰动后的法向。这个偏导数表明了物体表面改变的尺度。理论上, 凹凸映射中涉及的法向操作实在像素层次上的。 凹凸纹理映射的步骤如下: ( 1) 计算每个顶点处的T、 B、 N, 并计算切平面坐标的矩阵。 ( 2) 根据该矩阵将光源变换到切平面空间, 变换后光源的x、 y即顶点的相邻点。

计算机图形学大作业报告记录(灯光纹理映射)

计算机图形学大作业报告记录(灯光纹理映射)

————————————————————————————————作者:————————————————————————————————日期:

大作业报告 实验课程名称:计算机图形学 学生姓名: 班级: 学院(系):学生学号: 指导教师:成绩:

一、目的 这次大作业是作为这学期的最后的一个考核,所以必须要用到所有的本学期学过的知识,比如怎样画出三维图形,怎样在图像上在图像上添加纹理光照,怎样使用鼠标和键盘进行人机交互等。 二、主要功能模块设计 1 矩阵运算模块的设计: 功能描述:程序启动后,这部分功能模块会为整个应用程序提供算法支持,具体是矩阵直接的相互运算,在2D向3D转化过程中会起到很重要的作用。 代码设计: float vv(float * v1, float * v2){ return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; } void vxv(float * n, float * v1, float * v2){ n[0] = v1[1] * v2[2] - v1[2] * v2[1]; n[1] = v1[2] * v2[0] - v1[0] * v2[2]; n[2] = v1[0] * v2[1] - v1[1] * v2[0]; } void loadIdentity(Matrix m){ Matrix identity = {{1.0,0.0,0.0,0.0}, {0.0,1.0,0.0,0.0}, {0.0,0.0,1.0,0.0}, {0.0,0.0,0.0,1.0}}; for(int i = 0;i < 4; i++) for(int j = 0;j < 4; j++) m[i][j] = identity[i][j]; } void preMultiply(Matrix p, Matrix m){

立方体纹理映射

1问题描述与算法思想 1.1纹理映射简介 纹理映射(Texture Mapping)是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。在三维图形中,纹理映射(Texture Mapping)的方法运用得最广,尤其描述具有真实感的物体。比如绘制一面砖墙,就可以使用一幅具有真实感的图像或者照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。如果不用纹理映射的方法,这墙上的每一块砖都要作为一个独立的多边形来绘制。另外,纹理映射能够保证在变换多边形时,多边形上的纹理也会随之变化。例如,用透视投影模式观察墙面时,离视点远的墙壁的砖块的尺寸就会缩小,而离视点近的就会大些,这些是符合视觉规律的。此外,纹理映射也被用在其他一些领域。如飞行仿真中常把一大片植被的图像映射到一些大多边形上用以表示地面,或者用大理石、木材等自然物质的图像作为纹理映射到多边形上表示相应的物体。纹理对象通过一个单独的数字来标识。这允许硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从而减少了运算量,提高了速度。纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细节。然而纹理加载的过程可能会影响程序运行速度,当纹理图像非常大时,这种情况尤为明显。如何妥善的管理纹理,减少不必要的开销,是系统优化时必须考虑的一个问题。还好,相关软件提供了纹理对象对象管理技术来解决上述问题。与显示列表一样,纹理对象通过一个单独的数字来标识。 立方体映射(cube-map)纹理是一种特殊类型的纹理,用于环境映射,使用一组图像并把他们作为立方体的面。立方体映射的6个面用正方形并且大小相同的6个子纹理表示。要从立方体纹理中采样的时候,使用的纹理坐标是3维,并且被看做来自原点的方向。方向指向用来读取纹理的立方体映射表面的位置。立方体纹理映射主要思想是通过观察向量和表面的法向量反射来确定采样的纹理坐标。 1.2实验目的 1) 掌握位图纹理读入方法; 2)掌握立方体纹理映射算法。 1.3功能要求 1)建立三维坐标系Oxyz,远点位于屏幕客户区中心,x轴水平向右为正,y轴垂直向上为正,z轴垂直于屏幕指向观察者。 2)设置屏幕背景色为黑色。 3)读入六张构成天空盒的位图作为纹理映射到立方体的可见表面上。 4)按下鼠标左键缩小立方体,按下鼠标右键增大立方体。 5)使用键盘方向旋转纹理立方体。 6)使用动画按钮播放或停止立方体动画。 1.4算法原理(算法思想) 立方体进行纹理映射是纹理对象并不是直接绑定到着色器,而是绑定到一个

二维纹理映射

二维纹理映射 一、实验目的和要求 掌握纹理映射的基本原理,利用VC++ OpenGL实现纹理映射技术。 二、实验原理 纹理映射是真实感图形制作的一个重要部分,运用纹理映射可以方面地制作真实感图形,而不必花更多的时间去考虑物体的表面纹理。如一张木制桌子其表面的木纹是不规范的,看上去又是那么自然,如果在图形制作中不用纹理映射,那么只是这张桌面纹理的设计,就要花费很大精力,而且设计结果也未必能像现实中那么自然。如果运用纹理映射就非常方便,可以用扫描仪将这样的一张桌子扫成一个位图。然后的具体的操作中,只需把桌面形状用多边形画出来,把桌面纹理贴上去就可以了。 另外,纹理映射能够在多边形进行变换时仍保证纹理的图案与多边形保持一致性。例如,以透视投影方式观察墙面时,远端的砖会变小,而近处的砖就会大一些。 此外,纹理映射也可以用于其他方面。例如,使用一大片植被的图像映射到一些连续的多边形上,以模拟地貌,或者以大理石、木纹等自然物质的图像作为纹理映射到相应的多边形上,作为物体的真实表面。 在OpenGL中提供了一系列完整的纹理操作函数,用户可以用它们构造理想的物体表面,可以对光照物体进行处理,使其映射出所处环境的景象,可以用不同方式应用到曲面上,而且可以随几何物体的几何属性变换而变化,从而使制作的三维场景和三维物体更真实更自然。 在OpenGL中要实现纹理映射,需要经历创建纹理、指定纹理应用方式、启用纹理映射、使用纹理坐标和几何坐标绘制场景几个过程。 用于指定一维、二维和三维纹理的函数分别为: Void glTexImage1D(GLenum target, Glint level, Glint components, GLsizei width, Glint border, GLenum format, GLenum type, const GLvoid *texels); Void glTexImage2D(GLenum target, Glint level, Glint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *texels); Void glTexImage3D(GLenum target, Glint level, Glint components, GLsizei width, GLsizei height, GLsizei depth, Glint border, GLenum format, GLenum type, const GLvoid *texels); 其中,参数target取值一般为GL_TEXTURE_1D, GL_TEXTURE_2D和GL_TEXTURE_3D,分别与一维、二维和三维的纹理相对应。参数Level表示纹理多分辨率层数,通常取值为0,表示只有一种分辨率。参数components的可能取值为1~4的整数以及多种符号常量(如GL_RGBA),表示纹理元素中存储的哪些分量(RGBA颜色、深度等)在纹理映射中被使用,1表示使用R颜色分量,2表示使用R和A颜色分量,3表示使用RGB颜色分量,4表示使用RGBA颜色分量。参数width,height,depth分别指定纹理的宽度、高度、深度。参数format和type表示给出的图像数据的数据格式和数据类型,这两个参数的取值都是符号常量(比如format指定为GL_RGBA,type指定为GL_UNSIGNED_BYTE,参数texels指向内存中指定的纹理图像数据。 在定义了纹理之后,需要启用纹理的函数: glEnable(GL_TEXTURE_1D);

立方体纹理映射

立方体纹理映射

1问题描述与算法思想 1.1纹理映射简介 纹理映射(Texture Mapping)是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。在三维图形中,纹理映射(Texture Mapping)的方法运用得最广,尤其描述具有真实感的物体。比如绘制一面砖墙,就可以使用一幅具有真实感的图像或者照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。如果不用纹理映射的方法,这墙上的每一块砖都要作为一个独立的多边形来绘制。另外,纹理映射能够保证在变换多边形时,多边形上的纹理也会随之变化。例如,用透视投影模式观察墙面时,离视点远的墙壁的砖块的尺寸就会缩小,而离视点近的就会大些,这些是符合视觉规律的。此外,纹理映射也被用在其他一些领域。如飞行仿真中常把一大片植被的图像映射到一些大多边形上用以表示地面,或者用大理石、木材等自然物质的图像作为纹理映射到多边形上表示相应的物体。纹理对象通过一个单独的数字来标识。这允许硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从而减少了运算量,提高了速度。纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细节。然而纹理加载的过程可能会影响程序运行速度,当纹理图像非常大时,这种情况尤为明显。如何妥善的管理纹理,减少不必要的开销,是系统优化时必须考虑的一个问题。还好,相关软件提供了纹理对象对象管理技术来解决上述问题。与显示列表一样,纹理对象通过一个单独的数字来标识。 立方体映射(cube-map)纹理是一种特殊类型的纹理,用于环境映射,使用一组图像并把他们作为立方体的面。立方体映射的6个面用正方形并且大小相同的6个子纹理表示。要从立方体纹理中采样的时候,使用的纹理坐标是3维,并且被看做来自原点的方向。方向指向用来读取纹理的立方体映射表面的位置。立方体纹理映射主要思想是通过观察向量和表面的法向量反射来确定采样的纹理坐标。 1.2实验目的 1) 掌握位图纹理读入方法; 2)掌握立方体纹理映射算法。 1.3功能要求 1)建立三维坐标系Oxyz,远点位于屏幕客户区中心,x轴水平向右为正,y轴垂直向上为正,z轴垂直于屏幕指向观察者。 2)设置屏幕背景色为黑色。 3)读入六张构成天空盒的位图作为纹理映射到立方体的可见表面上。 4)按下鼠标左键缩小立方体,按下鼠标右键增大立方体。 5)使用键盘方向旋转纹理立方体。 6)使用动画按钮播放或停止立方体动画。 1.4算法原理(算法思想) 立方体进行纹理映射是纹理对象并不是直接绑定到着色器,而是绑定到一

纹理映射论文

对于纹理映射的学习报告 摘要: 本文主要对于2d纹理图的纹理映射方法展开描述。其中颜色纹理、几何纹理为两大讨论方向,对于颜色纹理的构造,我们通过函数纹理或图像纹理;对于几何纹理,我们可以通过凹凸映射法或位移映射法来实现。 正文: 在计算机图形学中,纹理映射技术的意义是非常重大的,对于纹理映射的定义,我在不同书本上看到了不同的描述,大致表述的内容却是大同小异的,比较容易理解的一种定义是“纹理映射是为三维物体表面添加纹理的技术”,纹理映射的过程可以表述为“将纹理空间的二维坐标(u,v)映射为物体空间的三维坐标(x,y,z),再进一步映射为图像空间的二维坐标(x,y)的过程”。通过纹理映射技术,我们可以改变物体表面的颜色、图案,增强立体感、真实感。原本死气沉沉的图形通过纹理映射处理瞬间像是一个真实的物体展现在你眼前。当然,其中过程处理的技术也是复杂多样的,大致来说,对于2d纹理图(纹理空间坐标是二维的)的纹理映射,主要有颜色纹理、几何纹理等。颜色纹理是通过颜色色彩或明暗度的变化体现出来的物体表面细节,取决于物体表面的光学属性;而几何纹理则是由不规则的细小凹凸构成的,取决于物体表面的微观几何形态。接下来我就对颜色纹理以及几何纹理做以展开。 首先,颜色纹理的出现是在1974年,由Catmull采用二维图像来定义物体表面材质的漫反射率而产生。实现颜色纹理主要有两种方法,一种是直接用纹理的颜色替代物体表面的颜色,另一种是将纹理数据经过光照计算,物体表面的纹理会显示出光照效果。颜色纹理并不 是简单的把图片覆盖住物体表面,这样会导致物体移动的时候,纹理图片没有移动而漂浮在原地,为了避免这种情况,我们还需要将颜色纹理绑定到物体表面,即建立物体空间坐标(x,y,z)与纹理空间坐标(u,v)之间的对应关系。颜色纹理本身难以构造,于是我们又采用函数纹理(连续纹理)或图像纹理(离散纹理)来进行描述。 通过函数纹理映射技术,我们先要计算出物体空间坐标与纹理空间坐标之间的关系函数表达式,例:P(x,y,z)=Au+Bv+C,这样就可以在纹理坐标上的每一点找

立方体纹理映射

立方体纹理映射. 1问题描述与算法思想 1.1纹理映射简介 纹理映射(Texture Mapping)是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。在三维图形中,纹理映射(Texture Mapping)的方法运用得 最广,尤其描述具有真实感的物体。比如绘制一面砖墙,就可以使用一幅具有真实感的图像或者照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。如果不用纹理映射的方法,这墙上的每一块砖都要作为一个独立的多边形来绘制。另外,纹理映射能够保证在变换多边形时,多边形上的纹理也会随之变化。例如,用透视投影模式观察墙面时,离视点远的墙壁的砖块的尺寸就会缩小,而离视点

近的就会大些,这些是符合视觉规律的。此外,纹理映射也被用在其他一些领域。如飞行仿真中常把一大片植被的图像映射到一些大多边形上用以表示地面,或者用大理石、木材等自然物质的图像作为纹理映射到多边形上表示相应的物体。纹理对象通过一个单独的数字来标识。这允许硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从而减少了运算量,提高了速度。纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细节。然而纹理加载的过程可能会影响程序运行速度,当纹理图像非常大时,这种情况尤为明显。如何妥善的管理纹理,减少不必要的开销,是系统优化时必须考虑的一个问题。还好,相关软件提供了纹理对象对象管理技术来解决上述问题。与显示列表一样,纹理对象通过一个单独的数字来标识。 立方体映射(cube-map)纹理是一种特殊类型的纹理,用于环境映射,使用一组图像并把他们作为立方体的面。立方体映射的6个面用正方形并且大小相同的6个子纹理表示。要从立方体纹理中采样的时候,使用的纹理坐标是3维,并且 被看做来自原点的方向。方向指向用来读取纹理的立方体映射表面的位置。立方体纹理映射主要思想是通过观察向量和表面的法向量反射来确定采样的纹理坐标。 1.2实验目的 1) 掌握位图纹理读入方法; 2)掌握立方体纹理映射算法。 1.3功能要求 1)建立三维坐标系Oxyz,远点位于屏幕客户区中心,x轴水平向右为正,y轴垂直向上为正,z轴垂直于屏幕指向观察者。 2)设置屏幕背景色为黑色。 3)读入六张构成天空盒的位图作为纹理映射到立方体的可见表面上。 4)按下鼠标左键缩小立方体,按下鼠标右键增大立方体。 5)使用键盘方向旋转纹理立方体。 6)使用动画按钮播放或停止立方体动画。 1.4算法原理(算法思想)

相关文档