CN1119047A - 面向目标的阴影信息技术 - Google Patents

面向目标的阴影信息技术 Download PDF

Info

Publication number
CN1119047A
CN1119047A CN 94191366 CN94191366A CN1119047A CN 1119047 A CN1119047 A CN 1119047A CN 94191366 CN94191366 CN 94191366 CN 94191366 A CN94191366 A CN 94191366A CN 1119047 A CN1119047 A CN 1119047A
Authority
CN
China
Prior art keywords
shade
project
map
add
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 94191366
Other languages
English (en)
Inventor
胡孙诚
玛丽·A·哈佛得
唐纳德·M·马修
约翰·彼得逊
罗伯特·塞得
渡边露地
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Taligent Inc
Original Assignee
Taligent Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Taligent Inc filed Critical Taligent Inc
Publication of CN1119047A publication Critical patent/CN1119047A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/506Illumination models

Abstract

计算和提供用于面向目标的结构的阴影信息的方法和装置,该结构包括具有一组与阴影相关的目标和选择以指导阴影计算的再现程序,加阴影程序作为计算代表多个表面特性的图像值的灵活用户定义模块。本发明的方法包括显示项目的图像,建立多个用户定义的加阴影程序。

Description

面向目标的阴影信息技术
本发明通常涉及在面向目标的环境中计算和生成三维目标的改进,尤其涉及在再现(rendering),在三维图形中,在一个模型从一给定摄象位置转换到基于屏幕的视图的处理过程中确定一个三维表面的阴影的方法、装置以及结构(framework,是指一组提供预制结构以解决一组相关问题的相关类别),其中提供了一个再现程序,它包括有阴影的目标及对加阴影进行计算的引导。本发明使应用程序开发者得以在驻留在面向目标的操作系统(该系统有一再现程序)中的加阴影程序结构中有选择地使用任意加阴影程序,而基本无需修改再现程序。替换之,应用程序开发者亦可开发定制的阴影程序,以置换操作系统中的加阴影程序结构。
在常规的三维硬件图形系统中,用于色彩(或加阴影)的计算公式是不变的。结果,若用户想要不同的阴影质量,就必须购买不同的特定硬件图形系统。类似地,大部分软件包只允许有限的阴影效果变化。因此,用户必须在不同的软件包之间来回变换以获取不同的阴影质量。这类操作导致低效率和不方便的软件开发和使用。进而,阴影质量不能被定制以满足客户的特殊需求且软件在新开发和需要发生时不能便利地扩展。
因此,本发明的一个目的是在面向目标的操作系统中提供一个加阴影程序(Shader,指在三维图形中,根据照明,结构,空间取向和三维效果的色彩信息计算一个显示色彩的目标)结构,它可被调用且包括多个结合了大范围的表面特性的加阴影程序,而且可被有选择地与一个再现程序在最小的界面软件开发范围内使用。
在本发明的一个方面中,在操作系统中提供一个阴影程序结构以便根据不同特性被调用以计算阴影,该加阴影程序结构包括多个阴影程序类别和预置阴影程序类别,它们可被调用且包括在加阴影的模型中生成结构映象,扰动映象,以及反射映象以使其看起来更为真实的程序。此外,可以由过程定义实现加阴影以便生成图象,就象目标是由木头或大理石之类的真实材料制成的一样。应用程序开发者可权衡速度和图象质量之间的关系而在加阴影程序结构中任意选择适当的加阴影程序。替换之,开发者可以生成多个定制阴影程序,它们置换在阴影程序结构中的部分或所有阴影程序的特性。根据本发明,所需的一切也就是要建立该加阴影程序,然后由再现程序调用该加阴影程序。
根据本发明,图形系统在再现程序和加阴影程序之间提供了一个清晰的界面。其中,在使用不同的加阴影程序时几乎无需对再现程序做任何改动,如此,该加阴影程序是极易使用和实施。进而,在使用不同再现程序时对加阴影程序的改动要减至最少。
最佳操作系统提供了最有效的方式以取得基本展示的模型。最佳面向目标的操作系统还提供了许多用于建立程序块以构成复杂的加阴影程序的加阴影实用程序。某些复杂的阴影效果可通过以流水线方式设置的多个加阴影程序实施,或按阴影程序树方式实施。
因此,根据本发明的面向目标的结构用于计算三维阴影,该结构提供了多个系统预置再现程序和加阴影目标。作为目标,最佳操作系统包括一个系统预置的三维再现流水线,它把在三维空间中定义的几何图形转换成输出设备上的图象。流水线部件包括象表面镶花纹程序(它把一个三维表面变换成较小的部分)之类的目标以及一个再现程序(它根据可视性和计算的色彩显示表面)。在加阴影程序结构中的加阴影程序可进行如上所述的图象结构映象,凸缘映象,环境映象,以及过程结构映象。加阴影程序结构中的每个加阴影程序都有一个系统预置反射加阴影程序,它实现本地光照阴影模型。用于生成各种映象的实用程序也在此提供。用户在不改变再现程序的情况下可选择适当的加阴影程序。类似地,在使用不同再现程序的情况下可无需修改加阴影程序而选择再现程序。
本发明的目的,方面及优点将结合以下附图和最佳实施侧予以说明。
图1示出了能支持高分辨率图形显示设备的通用计算机系统以及光标指示设备(如鼠标器),本发明即可于其上实施。
图2是图1所示计算机系统的详细示图;
图3示出了根据本发明的一个最佳实施例在再现过程中确定一个三维表面的色彩的三维属性组目标;
图4示出了根据本发明一个最佳实施例的开口园柱体的内外表面;
图5示出了根据本发明一个最佳实施例的色空间的示例;
图6示出了根据本发明的一个最佳实施例的再现程序和加阴影程序之间的关系;
图7是加阴影目标和系统预置加阴影层级的示意图,示出了根据本发明的一个最佳实施例的加阴影程序的实施;
图8示出了根据本发明的一个最佳实施例示例的加阴影变量;
图9示出了根据本发明一个最佳实施例在加阴影等式中采用的符号;
图10示出了根据本发明一个最佳实施例的最佳操作系统采用的光目标;
图11示出了根据本发明一个最佳实施例由TRe-fiectanceShader类别采用的系统预置加阴影等式;
图12示出了根据本发明一个最佳实施例从TShad-ingSample的fBaseColor中选择一个ObjectColor;
图13示出了从屏幕象素映象到一个表面,然后到结构映象的示例;
图14示出了根据本发明一个最佳实施例在屏幕象素,几何形状以及结构映象之间的关系;
图15示出了根据本发明的最佳实施例的结构区域近似法;
图16示出了根据本发明一个最佳实施例的凸缘映象的例子;
图17示出了根据本发明一个最佳实施例在一个扰动映象中的新旧法线;
图18是一个三维反射映象,示出了根据本发明的一个最佳实施例从二维到三维扩展的映象;
图19是根据本发明一个最佳实施例的立体环境映象;
图20示出了根据本发明一个最佳实施例的最佳操作系统的示例过程映象;
图21示出了用于噪声加阴影的彩色花键,它根据本发明的最佳实施例把一个值映象成一个色彩;
图22是根据本发明一个最佳实施例用于扰动映象的结构图象;
图23示出了根据本发明一个最佳实施例由TBumpMapShader类别构成的图象;
图24示出了根据本发明一个最佳实施例具有大理石和折皱映象的TSurfaceShader;
图25示出了根据本发明一个最佳实施例具有图象和扰动映象的TSurfaceShader;以及
图26示出了另一个根据本发明一个最佳实施例具有图象和扰动映象的TSurfaceShader。
参见图1,本发明最好使用驻留在通用计算机10中的操作系统。计算机10具有一系统单元12,一高分辨率显示设备14(例如阴极射线管CRT或液晶显示LCD)。显示器类型通常无关紧要,除非它是图形用户界面(GUI)的视窗系统所需要的高分率显示器。对计算机的用户输入由键盘16和光标指示设备(例如鼠标器18)进行。鼠标器18与键盘16相连,并依次与系统单元12相连。替换之,鼠标器18亦可与系统单元12中的指定或串行端口相连。图1所示通用计算机的例子包括Apple MncintoshR和IBMPS/2。其他种类包括各种工作站,例如IBM RISC System/6000和Sun Mi-crosystems计算机。
图2详细示出了图1所示通用计算机的主要部件。系统单元12包括中央处理器(CPU)21,RAM22,与总线24相连的ROM23。CPU21可以是任何商用的微处理器,例如通常用于Apple Macintosh计算机中的motorola 68030和68040,以及用于IBMPS/2计算机中的Intel 80386和80486。其他微处理器,例如用于工作站的RISC(用于减少指令集计算机)处理器亦可使用。ROM24存储基本微码,包括用于CPU21的基本输入/输出系统(BIOS)。用于计算机系统10的操作系统亦可存于ROM24中,或将其作为部分初始程序装入(IPL)存在RAM22中。RAM22还用来存储部分应用程序以及在执行程序过程中生成的临时数据。总线24可以是Apple NuBusR,IBMMicroChannelR或任意工业标准(例如工业标准适配器ISA或扩展的工业标准适配顺EISA)总线之一。
还与总线24相连的是I/O适配器,包括用户接口适配器25和I/O适配器26。键盘16与用户接口适配器25相连,且I/O适配器26与软盘驱动器27和硬盘驱动器28相连。软盘驱动器27允许对可移动媒介进行数据和程序读写,而硬盘驱动器28通常存储页进和页出RAM22的数据和程序。显示设备14通过显示适配器29与总线24相连。通信适配器30为网络提供接口。其他支持电路(未示出)以集成电路的形式连到总线24和/或CPU21。这些将包括例如控制总线24上的通信量的总线主芯片。在某些计算机中,总线24可以是双总线;一个数据总线和一个显示总线,以允许在图形用户界面中有高速的显示操作。
一种加阴影的体系模型(将参照图7详述)基于面向目标的编程原理。面向目标的编程(OOP)是建立友善用户界面和智能计算机软件的最佳环境。OPP的关键元素是数据封装,继承和多形性。这些元素可用于生成图形用户界面(GUI),它通常由具有图符,鼠标器光标和选项屏的视窗环境所表征。虽然这些元素对OOP语言而言是普通的,但大部分OOP语言不同地实现这三种关键元素。
OOP语言的例子包括Smalltalk,Object Pascal以及C++.Smalltalk实际上不止一种语言;准确而言,它被表征为一种编程环境。Smalltalk由Xerox的Palo Alto研究中心(PARC)的学习研究小组在1970年代早期开发出来。在Smalltalk中,消息被送到一个目标以对该目标本身进行评价。消息执行任务的方式与常规编程语言中的功能调用很类似。程序员无需关心数据类型,只需关心生成一个消息的正确顺序以及使用正确的消息。Object Pascal则是用于Apple的MacintoshR计算机的语言。Apple由尼古拉斯(NiklausWirth)(Pascal的设计人)合作而开发了object Pascal。C++则是由AT&T贝尔实验室的Bjarne Stroustrup在1983将C语言扩展而开发出来的。C++的关键概念是类别,类别是用户定义型的。类别提供面向目标的编程特性。C++模块与C模块相兼容并且可随意连接,以致现有的C库可由C++程序所用。最广泛使用的基于目标和面向目标的编程语句溯源于由挪威的O—J.Dahl,B.Myhrhaug和K.Nygard在60年代开发的Simlua。有关OOP的进一步信息可参见由Grady Booch所著,Benjimin/Cummings出版公司在1991年出版的题为“Object Oriented Design with Ap-plications”一书。
面向目标编程的主要概念已在前文中做了简要叙述,这对本领域的技术人员而言已为可知且在此不再释述。更广义而言,借助于表示或包括了通过改变数据格式而非改变整体体示结构来表征的加阴影信息的目标而对数据进行抽象和封装。对目标的界面保持不变,而目标本身是抽象且独立的。
在面向目标的编程设计中的类别或目标封装结构(例如数据)和操作在结构上的行为(即所谓“方法功能”)。在面向目标的设计中,界面是类别或目标的外视图,类别或目标的结构(Structure)和行为被隐藏起来。此外,所有从主类别衍生的目标都继承主类别的特性,因此将有与之相同的特性,并且相对主类别操作而呈现多形性。因此,从主类别衍生的目标可用于代表主类别的示例并可在调用主类别时被替换。
因此,通过加阴影体系结构模型可以使用无限量的加阴影可能性,而且该加阴影体系结构模型允许加阴影被表示而无需程序员或用户了解数据内容是如何表示的。根据各种参数,即,照明,结构,空间取向及色彩信息计算一个显示色彩的加阴影程序可以根据各种参数(即时间,图象质量等)而随意选择并保持对再现程序的修改最少(若有修改的话)。如此,加阴影可能性可以很方便地随新模型和模式的开发而扩展,与之比较,先有技术的系统采用的则是不变的(或有有限阴影效果集)加阴影计算模式。
图7示出了本发明的基本结构而且可将其视为一个Booch图。目标的类别和子类别根据箭头方向构成了层级;每条线段指向层级的下一更高级别并因此代表了一个“is a”关系。一个“has”或包含关系示于选择的类别和子类别之间。一个“uses”关系指示使用发生的方式。可参见由GradyBooch所著的″Object Oriented Design with Applications”一书中对Booch图的详细解释。
本发明最好以目标技术实现,该目标技术是从所谓面向目标的编程发展而来。面向目标的编程随着数据处理技术对许多不同任务的并行处理所提供的更多支持而日益重要起来。在目标技术中,最好由已编程的通用计算机模拟组可被认为或实际上是由特定数据处理器实施的目标被提供来形成所需的多种功能。可由每个目标执行的相当少量的方法或过程需要的数据与目标密切相关。相对于可以调用目标执行的特定方法的其他目标而言,方法被封装或隐藏起来。
进而,可将具有类似特性的目标组成类别或子类别,而且一个类别(数据或方法)的特性可由子类别继承且无需专门指定。此外,继承的特性可由在子类别中的目标所置换,从而导致称为多形性的特性(有时亦称为运行时间配联,因为该置换是由被执行的方法调用的)。
因此,根据本发明最佳实施例的实施,其中的目标和类别是整个系统的必要功能元素。在这些元素之间的功能关系由响应性(即包括但不限于生成其他目标的方法和操作),以及与目标和目标的类别关联的层级化属性的定义的限定。定义目标的继承和层级的行为通常称为“子分类”。因此,在此将根据本发明技术领域一般技术人员所理解的类别和子类别的组成的响应性和从属性而对本发明进行叙述。实际上,任意数据处理系统将包括至少一个显示设备或显示设备驱动器。当引导系统时,内码将访问包含(即连接到)在系统中的各种设备,包括显示设备或驱动器,并在内部系统总线上为每个设备和中央处理器提供通信。泛言之,根据本发明的视频结构在此时被激励并响应至少一个配置访问管理程序对总线的速续或周期遍历或“漫步”,以便示例或删除显示设备和驱动器以及在必要时修改显示表达控制以反映系统的表示状态。
为理解本发明的性质,应首先理解“结构(framework)”的概念以及结构对于“目标(object)”和“面向目标的编程(object oriented progrmming)”的关系。由Kurt ASchmucker所著题为“MACAPP:An Application Frame-work”并由Byte杂志1986年8月版刊登的文章是最早描述结构及其基本概念的文章。该文引用于此以为参照。目标的重要特性是其封装目标要响应的方法和数据的能力,即可以颁布一个通用命令给一个目标而无需任何其他目标知道该目标是如何执行该命令的内部细节。
类似地,无需命令、数据、文件名等的全局兼容性,因此,目标可以任意与另一目标相关联。实际上,结构是一个通用应用程序,它包括相关的目标类别,它们可与其他目标关联以形成更专门的应用。由于目标的类别与定义的目标类别之间的功能关系关联,结构可提供任意所需的通用或特定功能性级别而且将提供可与该结构关联的其他目标的正确功能性。
结构因此可被看作是一个系统,它提供目标之间的隐含的响应性网络,在目标类别之间的继承性(即在目标类别的较高层级处的主类别的数据和方法),以及响应于事件的库调用。形成结构的系统亦可通过加入执行更具体功能且要可置换结构提供的功能的目标的方式而定制。在结构的各种类别和子类别中的特定机器和特定设备的目标允许结构本身是机器和设备独立并具有通用的应用性。进而,一个特定结构由内部关系所表征,该内部关系是根据其所获取的功能性,继承性和响应性的分工而在目标和目标的类别之间建立起来的。结构本身亦可用作样板以开发特定的应用程序,其中,定制和功能置换可被提供为特定的目标。
参见图3,一个最佳操作系统的属性目标(即所谓“TGrafBundle3D”目标,在本申请中不予详述)的三维位置被示出,它确定了再现过程中一个三维表面的色彩并提供一具有一组与加阴影相关的目标和选择的再现程序,这些选择根据某些环境变量(即光源,摄象机)来引导加阴影计算。该三维再现程序把加阴影信息提供给加阴影程序,它计算色彩或加阴影并将计算的色彩返回到再现程序以输出到一个显示设备。为全面理解本发明,将对某些加阴影目标进行简要描述。以下是对每个元素的详细说明。
操作系统允许一个表面按其取向而加上不同的阴影,若一个表面由右手定则(图4)定义,则其为“外部表面”,在这种情况下,一个三维流水线采用“外部”表面色彩和“外部”加阴影程序进行加阴影计算以确定该表面的色彩。
加阴影分辨率选择指在再现期间从再现程序中调用内部或外部加阴影程序的频率而且它控制图象质量。加阴影插值选择控制如何“填入”用于加阴影示例之间的象素的色彩。向后采集选择(backface culling option)确定在再现过程中是否跳过朝后的表面。在TGrafBundle3D中的结构映象矩阵建立在三维几何图形和二维结构之间的映象关系。对定向表面数据库(即TSurface3D)而言,矩阵表达了在(u,V)参数和一个映象之间的映象关系。以下将逐个讨论TGraf-Bundle3D的目标和选择。
内部和外部色彩
TGrafBundle3D::AdoptInsideColor(TColor*Color);
TGrafBundle3D::AdoptOutsideColor(TColor*Color);这两个伪码程序把基色分配给内部和外部表面。表面色彩将由加阴影程序修改以提供供显示的色彩。
该内部或外部色彩用于整个内部或外部表面。在一个三维流水线中的再现程序选择该两种色彩之一(即考虑到摄影机的位置,由表面取向确定)并总是将色彩留在TShad-ingSample中的fBaseColor之中,如以下所述。对色彩的任何进一步修改都将由加阴影程序确定。该功能采用了TCol-or目标,用户可以选择任何方便的色空间进行色分配,如图5所示。TColor允许用户把色彩定义为空间示例,它可衍生高级的加阴影模型。
若加阴影被初始化为一种类型的颜色(即RGB)而且加阴影程序采用不同的色模型(即空间分布),则色彩转换在加阴影计算过程中可能需要进行至少一次。该转换由TColor子类别自动完成,但在要求对每个象素都加阴影时相当昂贵。因此,对目标色,加阴影程序色和光源色应选择同样的色模型。初始化色彩的伪码如下:
系统预置设定
The inside color is initialized to TRGBColor(1.,0.,0.).//Red
The outside color is initialized to TRGB Color(1.,1.,1.).//White示例
aGraf Bundle.AdoptlnsideColor(new TRGBColor(.3,.3,.9));//bright blue
aGraf Bundle.AdoptOutsideColor(new THSVColor(0,0,1));//white
内部和外部加阴影程序
仔细观察内部和外部加阴影程序,设置内部和外部加阴影程序的伪码如下:
TGrafBundle3D::AdoptInsideShader(TShader*aShader);
TGrafBundle3D::AdoptOutsideShader(TShader*aShader);
上述两个例所示程序把加阴影程序分配给内部和外部表面。根据表面的取向,再现程序选择内部加阴影程序或外部加阴影程序进行加阴影计算。
系统预置设定:
系统预置内部加阴影程序是TReflectanceShader的一个示例。
系统预置外部加阴影程序是TRefiectanceShader的一个示例。
(TReflectanceShader将详述如下)
一个加阴影目标对一个表面的三维属性进行仿真,它计算在三维流水线中用于再现程序并与色彩或加阴影相关的变量。如图6所示,一个再现程序(即一个Z缓冲器)首先确定是否在一个表面上的一点相对于一个事件中所有其他目标而言是可见的。若是,则再现程序将目标TShadingSample初始化并将其送至一个加阴影程序目标以供与某些光源目标和在本发明中不详述的另一目标(即TScene Bundle)中的摄象机目标一起进行加阴影评价。TShading Sample描述了当地表面的特性,例如在加阴影处的表面的位置和取向。该信息是由再现程序提供的。成员功能Compute Shade()执行所有加阴影信息并将结果色彩存在TShading Sample中以供CRT之类的显示器进行显示。该处理反复进行直到所有基色被再现为止。
以流水线方式可以容易地安排多个加阴影程序目标。在流水线的每一“阶段”,加阴影程序的功能Compute Shade()修改TShadingSample并将其送至流水线中的下一阶段,显然,一个加阴影程序可包括流水线的加阴影程序。一个再现程序执行功能my CompoundShade∷ComputeShade()以返回最终色。
该三维加阴影设计的关键元素是把加阴影程序与再现程序隔离开来。加阴影程序无需知晓再现程序如何生成信息。加阴影程序和再现程序之间的关系,TShadingSample的内容,以及使用TShadingSample的详细例子讨论如下,再现程序和加阴影程序交织在一起。加阴影程序依赖于再现程序以提供加阴影计算所需的信息,再现程序依赖于加阴影程序以生成最终显示的色彩。
除要求再现程序重新计算必要的信息之外,加阴影程序通知再现程序在加阴影评价时所需什么,通过利用相邻象素之间的信息相关性,再现程序可用标准扫描传统方法通过在加阴影信息之间的线性插入法来生成信息。在实际实施中,加阴影目标维护在加阴影程序中所引用的变量的信息,并因此避完由再现程序进行不必要的计算。
加阴影程序目标根据包括以下元素的TshadingSauple目标计算色彩相关信息:
加阴影法线(Shading Norma)—用于加阴影计算的矢量。
几何法线(Geometric Norma)—与表面垂直的矢量(即在U和V方向的切线矢量的叉积)。
全球位置(World Position)—在全球坐标系统中定义的一个三维点。
结构坐标(Texture Coordinate)—表面结构坐标。
滤波器基本矢量(Filter Basis Vectovs)—用于生成去阶梯结构的滤波器(即需要两个矢量以形成滤波器边界)。
U,V—表面参数(0到1)
切线U,切线V(TangentU,TangentV)—相对于U和V的特定表面位置的导数(它们有时由dPdU和PdV表示)。
dU,dV—穿过一个表面区域的参数U和V的改变。
基本色(Base Color)—由光源修改的表面色。
结果色(Resultant Color)—计算的色彩。
TShadingSample的伪码的例子列出如下:class TShadingSample{
   public:
          TGPoint3D       fWorldPosition;
          TGPoint3D       fShadingNormal;
          TGPoint3D       fGeometricNormal;
          TGPoint         tUV;
          TGPoint3D       fTangentU;
          TGPoint3D       fTangentV;
          TGPoint         fTextureCoordinate;
          TGPoint         fTextureFilterLength;
          TGPoint3D       fdU;
          TGPoint3D       fdV;
          TRGBColor       fBaseColor;
          TRGBColor       fResultantColor;};
通常,修改TShadingSample的加阴影程序负责保存和恢复原始输入值。在流水线的加阴影程序和共属性加阴影程序之间有清楚的界限,通过保存和恢复变量,共属性加阴影程序可以总是接收未修改过的TShadingSample。
进而,在加阴影程序GetShadingUsage Variables()中的虚似功能用于变量请求。例如,若一再现程序想要知道一个加阴影流水线需要什么变量,它只能调用一个加阴影程序的GetShadingUsageVariables()。这一例行程序对加阴影程序流水线中的加阴影程序的所有加阴影变量进行检索并反回一正确值。一个再现程序只需为一个表面调用该例行程序一次。
另一使用TShading Sample的导向图包括只是在终止节点把计算的色彩返回给fResultant Color。第一个加阴影程序被允许执行修改fResultant Color的后处理。这确保了在一个中间加阴影程序在流水线中间的fBaseColor和fRe-sultantColor之间选择色彩的时候不会有误会。
此外,为了在加阴影程序流水线中设计安全例外的加阴影程序,一个位于Compute Shade()的实现中的本地目标可被构成,其工作是交换要修改的变量。该例外的处理程序保证在软件异常发生时调用破坏程序,因此,在TShadingSample中的数据仍将有效。例如,用于调用TSwapVari-ables的本地目标的伪码表示如下:
Class TSwap Variables
{
TSwap Variables(TShadingSample&shadingSample)
               {//Save Varlables}
               ~TSwap Variables()
               {//restore variables}
};
该加阴影程序设计最好满足广泛的加阴影要求—从很简单的平表面阴影(即快速浏览)到高质量的图象再现(即打印)。该设计和实施复盖了Gouraud和Phong加阴影,具有多种滤波技术的结构图象映象,凸缘映象,以及反射映象。
发明的加阴影程序设计和实施出包括全局照明的光线跟踪和射频方法。由于目标之间的内相关性质,全局照明依赖于特定目的再现程序以实现与加阴影相关的操作,例如光线跟踪用的光线相交计算以及用于射频的波形因数计算。上述技术的目的在于本地照明,其中,加阴影可被确定而无需考虑环绕的目标。由于全局照明中的许多技术涉及全局照明的递归积分。因此将集中于本地照明,全局照明相信是易于集成为下述系统。
加阴影程序实施
图7示出了加阴影程序目标及其系统预置的加阴影程序层级,该抽象主类别TShader具有下述主要成员功能:
仔细看一下TShade主类别和加阴影层级,再现程序询问加阴影程序需要何种变量。该再现程序(即Z—buffer)生成TShadingSample以使TShade计算加阴影并确定最终色彩。
TShader的子类别TReflectanceShader根据一个简单的光照明加阴影模型计算表面的色彩。TRefiectanceShader是TImageMapShader,TBumpMapShader,TProce-dureMapShader,TSurfaceShader和TEnvironmentMapShader(它们将在下面分别参照图7予以叙述)的系统预置加阴影程序。TRefiectanceShader可由SetChildShader()在实用程序中很容易地设置。TImageMapShader,TBumpMapShader,TProcedureMapShader,TSurface-Shader和TEnvironmentMapShader询问其实用程序有关表面色彩/加阴影的情况并执行其各自的计算。
图8示出了由一再现程序初始化的加阴影变量。一个三维流水线通过调用加阴影程序的GetShadin-gUsageVariables()例行程序若干次未检测加阴影程序中所需的所有变量,例如图8所示,在流水线中的再现程序通过把某些有效信息(在本例中为阴影法线和结构坐标)存在TShading Sample中而响应需要。最终,一个再现程序将激发一个加阴影程序的Compute Shade()以确定显示的颜色。再现程序只需对一个表面进行一次变量询问,而并非在再现期间询问每个象素。这对节省时间提高效率是一大改进。进而,再现程序只需要提供最少量信息。一个三维流水线可把几个项目在TShading Sauple中成组,并在再现过程中在每一组中生成必要信息。
关于导出的加阴影程序,若加阴影程序可根据TShad-ingSample本身的内容生成彩色,则其可直接由基本TShader中导出。由于直接导出的加阴影程序很简单,所以最适用于再现速度要求很高的图象观看。这些简单的加阴影程序生成足够的阴影信息以展现目标的三维性。
为把一个光照明模型结合到一个加阴影程序中,则需检查另一衍生类别TReflectanceShader,该类别模仿目标反射光的方式。它将照明与表面反射特性的交互成型以计算表面的适当色彩。从一个简单的平面加阴影到某些高级的加阴影模型(例如光线跟踪等),反射模型可以总是分成三个主要部分:环境反射、漫反射、和定向反射。对于不同照明模型的实施有相当大区别。
TReflectance Shader根据上述的基本反射模型实施三个关键功能:Ambient(),Diffuse(),和Specular()
TReflectanceShader的系统预置实施假设表面的颜色是从Ambient(),Diffuse(),和Specular()计算得到的光强的加权和,为理解流水线中加阴影程序,TShadingSample摄象机和光源之间的关系,这三个功能检查如下,其始于定义如图9所示的某些符号,它们将出现于其后的许多阴影等式中。此外,图10示出了操作系统提供的光类别。相关符号定义如下:
Ka=环境反射系数
Kd=漫反射系数
Ks=定向反射系数
Sexp=定向聚焦指数
OC=目标色彩
LC=光色彩
Lexp=光聚焦指数(主要用于聚光灯光源)
Latt=根据光和点之间的距离的光衰减因子
N=表面法线
L=光矢量
LO=从光到目标的矢量
V=从摄象机到表面点的摄象机矢量
所有衍生的光目标必须实现环境,漫射,和镜面光强的分布,成员功能Compute Intensity()在相关位置(通常是加阴影的表面点)处返回光的色彩。TLight的功能Computelnlensity也使用户生成特定光源,例如,设想在再现过程中的“窗口光”,要再现的点的位置视窗口光确定该点的光强是什么(从窗口边界插入的彩色或黑色)。
有关系数设定,目标对环境、漫射和镜面反射的反应不同,例如,暗淡表面展现强的漫反射,但几乎没有镜面反射,反之,一个光泽表面展示强烈的镜面反射。TReflectaneeShader类别允许用户把值分配给一组模拟材料特性的系数(Ka是环境反射系数,Kd是漫反射系数,Ks是镜面反射系数)。这些系数呈现了表面的材料的特性。
最佳操作系统最好用Phong的照明模型来计算漫反射并假设最大光亮处发生于V和R矢量之间的角度为零时,且其当角度增加时急剧衰减。该衰减由Cosn(angle)近似,其中,n是材料的镜面反射指数。一个小值提供了大范围的衰减,而一个较高值模拟一个急剧的镜面最亮处。系统预置实施将把过量的光强调整回到允许范围。
TReflectanceShader具有下列主要成员方法:
virtual void            ComputeShade(
       TShadingSample&      shadingSample,
       const TSceneState&   sceneState);
//returns the total diffuse contribution from all    //light sources.
virtual void Diffuse(
        const TShadingSample&       shadingSample,
        const TSceneState&          sceneState,
        TColor&                     retumColor);
//returns the total specular contribution from all   //light sources.
virtual void Specular(
       const TShadingSample&        shadingSample,
       const TSceneState&           sceneState,
     double                       specularExponent,
     TColor&                      retumColor);virtual void       SetAmbientCoefficient(
     double      ambientCoefficient);
virtual void       SetDiffuseCoefficient( 
     double      diffuseCoefficient);
virtual void       SetSpecularCoefficient(
     double      specularCoefficient);
virtual void       SetSpecularExponent(
     double      specularExponent);
系统预置设定
Ambient Coefficient=.3;
Diffuse Coefficient=.7;
Specular Coefficient=O.;//no specular highlight
Specular exponent=20.;
示例
aReflectanceShader.SetAmbientCoefficient(.15);
转向TReflectanceShader的成员功能ComputeShade,它使用下列等式进行加阴影评估(加阴影树矢量示于图11中);
ObjectColor*(Ka *Ambient()+Kd *Diffuse())+K3 *Specular()
上述等式中的变量ObjectColor总是使用TSad-ingSample的fBaseColor,它是由图12所示再现程序设置的内部色或外部色。为得到较好图象质量,在具有某些仔细调整的反射系数和表面色的情况下,TReflectanceShader中使用的简单公式可生成具备一定质量的图象。但是,由于缺乏表面细节,具有TReflectanceShader的目标有时过于平滑或均匀。增加表面细节的一个方式是由三维几何原函数对细节成型。例如,表面补片可用于叙述地板的木质图案。
但是,由于细节很细微,由几何原函数成型以摸拟表面细节几乎不可能。最佳操作系绕提供了另一方案以例通过把图象从实际的数字图象或过程定义的“虚拟”图象映射到三维原函数的方式以增加表面细节。
使用图象和过程结构库的实用类别也由加阴影结构所采用。例如,一个映象可代表一个表面的基色,它可用于法线矢量扰动(“扰动映象”),或其可代表模拟三维目标周围环境的简单反射。本发明的操作系统提供了一组可用于映象相关的加阴影程序中的映象实用子程序。
最佳操作系统的结构映象实用程序提供了生成三维几何图形的映象参数(U,V)的功能。该操作系统结构映象方式提供了两个途径来解决结构映象中的阶梯效应。一个途径是采用空间变量滤波,通过它重新为每个象素计算滤波器的尺寸。由于屏幕上每个象素都有不同的对应结构边界,一个空间变量滤波器对解决阶梯效应便很重要。根据系统预置,四边形结构区域由正方形或长方形所近似,如图14和15所示。用户可请求再现程序为优质结构映象提供一个椭圆滤波器的两个主矢量。
第二个途径是用信息输入处理映象(mip—map)技术。该技术需要三个指标(结构,位置和滤波直径)以确定在一个映象中的值。最佳操作系统的系统预置再现程序产生信息以使空间变量滤波可用于信息输入处理存取。一旦收到信息,信息输入处理便从适当的子映象中抽取值。
最佳操作系统提供了多个映象实用程序类别,即TIm-ageMap,TBumdMap TProcedureMap,以及TEnviron-mentMap等等,它们可由不同加阴影程序使用。每个映象类别包括一个构成于其中的信息输入处理用于去阶梯效应。
TImageMap是另一种映象实用程序,它是用于色彩修改的结构映象。TImageMap可用于加阴影程序中而把一个映象中的内容解释成表面色彩修改。从一个映象中抽取的值可用作直接色彩置换,对另一色映象的指标,或乘法器。解释的方式完全由加阴影程序确定。TImageMap结构只在再现过程中用到几何原函数的表面(即与加到墙壁表面的墙纸类似)。该TImageMap类别具备以下方法:
Virtual void GetV alue(
       const TShadingsample & info,
       TColor & returnColor)
const=0;
以下叙述TBumpMap。它是一个用于法线扰动的结构映象功能,如图16和图17如示,扰动映象是一有用的技术,因为它模仿了凸凹不平的表面而非修改表面几何形状(有时它是不可能的)或改变平表面的色彩。该类别的伪码示例如下:
virtual TGPoint 3D GetV alue(
const TShadingSample&     ShadingSample)
const=0;
本发明操作系统包括的另一映象实用程序是TEnvi-ronmentMap,它是用于反射的结构映象,如图18和19所示。其伪码如下:
virtual void GetV alue(
const TShadingSample&      info,
const GPoint3D&eyeVector,TColor& retVal)
const=0;
亦可过程地定义表面的色彩。其方式是根据目标的位置,法线,和其他几何信息在浮飞上生成彩色。例如,通过评价结构坐标可在再现过程中显示具有检验板式样的表面,在这种情况下,无需生成用作结构的大的二维检验板图象。
第一个概念是过程结构。图象结构和过程结构的主要不同在于后者是定义在一个三维区域,因此它使结构被应用而与目标的形状无关。此外,过程结构通常有很低的存储器要求。这一唯一特性使一复杂图象有由许多不同材料组成的三维目标。进而,它们可在可控的细节层级生成,其带宽被限制以避免阶梯问题,而且它们通常需要极少参数来定义映象。
过程加阴影程序的重要元素是噪音生成和如何利用噪音。最佳操作系统提供了主类别TGrafNoise和系统预置的衍生类别TLatticeNoise,以及最好使用TLafficeNoise的全部系统预置过程结构(在需要时可由一个用户的噪音目标替换),TNoise类别的伪码如下:
class TGrafNoise
{
       public:
       virtual double
            Noise(   double point)const=0;
     virtual double
           Noise(   const TGPoint& point)const=0;
     virtual     double
           Noise(   const TGPoint3D& point)const=0;
     virtual     TGPoint3D
           DNoise(  const TGPoint3D& point)const=0;
     virtual     double
           Turbulence(    double point,
                                               double
pixetSize=0.1)const=0;
     virtual     double
          Turbulence(     const.TGPoint& point,
                                               double
pixelSize=0.1)const=0;
     virtual     double
          Turbulence(     const TGPoint3D& point,
                                               double
pixelSize=0.1)const=0;
     virtual   TGPoint3D
          DTurbulence(   const TGPoint3D& point,
                                               double
pixelSize=0.1)const=0;
}
最佳的操作系统最好提供若干内部过程映象,它们模仿诸如大理石,木头和花岗岩之类的材料。包括这些映象的加阴影程序产生图象,就象三维目标是由真实材料制成的一样。过程结构映象亦可无需TBumpMap主类别中的结构图面模拟法线扰动。
主类别TProcedure提供了所有变量询问例行子程序,例如GetRequiredShadingVariables(),以致包括这一过程映象的加阴影程序可通知再现程序提供必要信息。该最佳操作系统的示例过程映象示于图20之中。
作为例子,一个完整的示例映象TMarbleProce-dureMap将被审视以展示TNoise和过程映象之间的关系。图21示出了把彩色分配给过程加阴影程序的类别图。通过该例子类别的顺序,用户可以毫无困难地书写具有不同材料属性的其他加阴影程序。该伪码的示例列示如下:
class TProcedureMap
{
     public:
     virtual void      GetValue(
            TShadingSample&                  shadingSample,
            const TSceneState&               sceneState)            const=0;
     //Indicate which field is required in   //TShadingSample.
     //Shader needs this information to tell a    //renderer what variables
to feed.
     virtual void GetRequiredShadingVanables(
            TShadingUsageVariables& variables) const=0;

     //Indicate which field is modified in  //TShadingSample.
     //Shader needs this information to save and store       //variables in
TShadingSample
     virtual void GetModifiedShadingVariables(
            TShadingUsageVariables& variables) const=0;
}
class TNoise ProcedureMap: public TProcedureMap
     public:
              //Allow to set a user-defined noise object   virtual void
     SetGrafNoise(
                 const TGrafNoise&      noise)=0;
      virtual void     GetValue(
                 TShadingSample&           shadingSample,
                 const TSceneState&        scene State)
      const=0;
           //Indicate which field is required in
      //TShadingSample.
           //default to WorldPosition orly,              //subclases
override them
      virtual void GetRequiredShadingVariables(
          TShadingUsageVariables& variables) const;
            //inndicate which field is modified in
        //TShadingSample.
				
				<dp n="d31"/>
             //Shader needs this information to save and           //store
variables in TShadingSample
       virtual void GetModifiedShadingVariables(
           TShadingUsageVariables&amp; variables)const=0;
}
class TMarbleProcedureMap: public TNoiseProcedureMap
{
    Public:
    virtual void SetGrafNoise(
          const TGrafNoise&amp; noise);
    //determine the color
    virtual void SetColorSpline(
          const TShaderColorSpline&amp; spline);
      virtual void GetValue( 
          TShadingSample&amp; info, const
    TSceneState&amp;)const;
    //Indicate which field is modified in //TShadingSampte.
    //Shader needs this indormation to save and store     //vmiables in
TShadingSample
    virtual void GetModifiedShadingVariables(
          TShadingUsageVariables&amp; variables) const;
}
过程映象亦可改变预置的TWrinkle ProcedureMap提供的射线
以前讨论的某些实用类别产生表面色彩或影响加阴影法线。TImage Map Shader有一指向TlmageMap(由用户初始化为NIL)的指针。
TImage Map Shader也有预置TRfiectanceShader。一旦从TImage Map中抽取出彩色,该彩色将由光源通过预置TRefiectanceShader修改。该预置TRefiectanceShader可由任意加阴影程序通过Setchildshader()很容易地替换。其伪码的例子示于下:
class TImageMapShader:public TShader{
     TImageMapShader();
     TImageMapShader(const TImageMap&amp; map);
     TImaseMapShader(
          const TImageMap&amp; map,
          const TShader&amp; childShader);
     TImageMapShader(const TImageMapShader&amp; source);
     virtual ~TImageMapShader();
     virtual void SetImageMap(
           const TImageMap&amp; imageMap);
     virtual const TImageMap<superscript>*</superscript>    GetImageMap()const;
     virtual void ComputeShade(
           TShadingSample&amp; shadingSample,
           const TSceneState&amp; sceneState);
     virtual void SetChildShader(
         const TShader&amp; aShader);
     virtual TShader<superscript>*</superscript>  GetChildShader() const;
     virtual void GetShadingUsageVariables(
                                        TShadingUsageVariables&amp;
     variables)const;
}
TImageMap Shader的伪码的示例如下:
GrafBundle=new TGrafBundle3D();
GrafBundle—>AdoptOutsideShader(new
TImageMapShader(TImageMap(aTImage)));
TBumpMapShader有一个指向TBumpMap的指针(由用户设定初始化为NIL)且还有一个预置的TRe-fiectance Shader.一旦TBumpMap修改了原来的法线,目标的色彩将由光源基于新法线进行修改,预置的TRe-flectance Shader可容易地由任意加阴影程序通过SetChildShader()进行替代。该伪码的示例如下:
class TBumpMapShader:public TShader{
     TBumpMapShader();
     TBumpMapShader(
         const TBumpMap&amp; map);
     TBumpMapShader(const TBumpMap&amp; map,
     const TShader&amp; childShader);
TBumpMapShader(
     const TBumpMapShader&amp; source);
virtual      ~TBumpMapShader();
virtual void      SetBumpMap(
     const TBumpMap&amp; bumpMap);
virtual const     TBumpMap<superscript>*</superscript> GetBumpMap()const;
virtual void      ComputeShade(
      TShadingSample&amp;      shadingSample,
    const TSceneState&amp;   sceneState);
virtual void      SetChildShader(
    const TShader&amp; aShader);
virtual TShader<superscript>*</superscript>  GetChildShader() const;
virtual void GetShadingUsageVariables(
TShadingUsageVariables&amp;     variables) const;
};
TProcedure Map Shader有一指向TProcedureMapShader的指针(由用户设定被初始化为NIL)。它可修改TShadingSample的许多区段。TProcedureMap Shader也有预置的T RefiectanceShader,它根据光源和修改的TShadingSample计算彩色。该伪码的示例如下:
class TProcedureMapShader:public TShader{
       TProcedureMapShader();
     TProcedureMapShader(const TProcedureMap&amp; map);
     TProcedureMapShader(
           const TProcedureMap&amp; map,
           const TShader&amp; childShader);
     TProcedureMapShader(
           const     TProcedureMapShader&amp; source);
     virtual     ~TProcedureMapShader();
     virtual void      SetProcedureMap(
           const       TProcedureMap&amp; procedureMap);
     virtual const           TProcedureMap<superscript>*</superscript>
       GetProcedureMap()const;
     virtual void      ComputeShade(
           TShadingSample&amp; shadingSample,
           const TSceneState&amp; sceneState);
     virtual void      SetChildShader(
           const TShader&amp; aShader);

     virtual TShader<superscript>*</superscript>  GetChildShader() const;
     virtual void GetShadingUsageVariables(
           TShadingUsageVariables&amp;     variables) const;
     //transform fWorldPosition by this matrix
     //if this routine is never called,ComputeShade()  //just uses
fWorldPosition without any    //transformation
     virtual void      SetMatrix(
           const TGrafMatrix3D&amp; matrix);
     virtual const TGrafMatrix3D* GetMatrix () const;

   }
用于TProcedureMapShader的伪码的一个例子如下:
aGrafBundle=new T GrafBundle3D();
aGrafBundle—>AdoptOutsideShader(new
TProcedureMapShader(TMarbleProcedureMap()));
除TImageM apShader,T BumpM apShader以及TPro-cedureMapShader之外,最佳操作系统还提供了方便的加阴影程序,叫做TSurface Shader,它包括许多指向操作系统提供的映象实用程序类别的指针(由用户设定初始化为NIL)。大部分应用程序只须使用这一加阴影程序。
由于映象存取的顺序响应计算结果,所以TSurfaceShader在修改加阴影法线的映象之后存取首先修改表面色的映象。该TSurface Shader类别的伪码示例如下:
class TSurfaceShader:public TShader
{
     TSurfaceShader(); 
     TSurfaceShader(corst TSurfaceShader&amp; source);
     TSurfaceShader(const TShader&amp; childShader);          virtual
~TSurfaceShader();
     virtual void SetlmageMap(
            coast TImageMap&amp; imageMap);
     //set a procedure map,also tells if the map  //modifys the normal
     virtual void             Set ProcedureMap(
            const TProcedureMap&amp; procedureMap,
            Boolean forNormal=FALSE);
     virtual void       SetBumpMap(
            const TBumpMap&amp; bumpMap);
     virtual coast TImageMap<superscript>*</superscript> GetImageMap() const;
     virtual corst      TProcedureMap<superscript>*</superscript> GetProcedureMap( 
     Boolean forNormal = FALSE) const;
     virtual corst     TBumpMap<superscript>*</superscript> GetBumpMap() coast;        virtual
void          RemoveImageMap();
     virtual void            RemoveProcedureMap (
            Boolean forNormal=FALSE);
     virtuai void            RemoveBumpMap();
     virtual void            ComputeShade(
            TShadingSample&amp; shadirgSample,
             const TSceneState&amp; sceneState);
        virtual void SetChildShader(
             const TShader&amp; aShader);
      virtual TShader<superscript>*</superscript>  GetChildShader() const;
      virtual void GetShadingUsageVariables(
      TShadingUsageVariables&amp;     variables) const;
图22至26是根据最佳实施例的各种加阴影程序。虽然上面已讨论了直接从光源计算阴影的加阴影程序设计,但这些阴影模型通常称为本地照明模型。通过仔细调整加阴影参数,光设定和结构映射,本地照明可产生用于许多应用的图象。由于相邻表面不是本地照明中的阴影计算部分。所以可忽略表面导致的阴影。但是,上述系统可用于实际环境。其中,光照和反射较之本地照明更为复杂。特别是,每个表面都从光源直接接收光或接收相邻表面的间接反射,即全局照明。全局照明模型可结合到上述系统中并应被考虑为上述加阴影程序的扩展。
总而言之,以上讨论了用于面向目标的结构的方法和系统,它们用于确定再现过程中的三维表面的阴影,其中为再现程序提供了指导加阴影计算的选择和与加阴影关联的目标。在本发明的一个方面,提供了根据光源和表面取向进行阴影计算的加阴影程序。色彩是环境漫射和镜面反射的加权和。该加阴影程序可包括在加阴影模型中生成结构映象,扰动映象和反射映象以增加真实性的手段。此外,加阴影可由过程定义实现以便生成看起来象是由木质或大理石材料制成的目标的图象。
采用本发明,用户可根据速度和图象质量之间的权衡随意选择适当的加阴影程序。根据本发明,加阴影程序被建立并然后由再现程序激励该加阴影程序,从而产生一有效系统,它可很容易地被扩展为多个加阴影程序而只对再现程序有极小修改。如此,本发明大大优于提供固定或有限组加阴影效果的常规系统。进而,在再现程序和加阴影程序之间的界而被提供,其中,在不同加阴影程序被使用时几乎没有对再现程序的修改。如此,加阴影程序极易使用和实施。进而,在使用不同再现程序时对加阴影程序的修改极少。因此,根据本发明的面向目标的结构,很易于提供无限量的加阴影模型扩展。
虽然本发明是根据最佳实施例叙述的。但本技术经域一般技术人员可在本发明权利要求的范围内对其进行变型和修改。

Claims (26)

1.利用面向目标的结构在具有显示器和存储器的处理器中显示信息的方法,其特征在于包括以下步骤:
(a)显示一个项目;
(b)建立多个用户定义的部件以处理代表被显示的项目的数据,该用户定义部件包括预定的属性;
(c)对被显示的项目的多个特性的至少一个特性进行检测;
(d)根据至少一个特性和至少一个用于该项目的用户定义部件生成一个用于该项目至少一部分的加阴影计算;以及
(e)根据加阴影计算修改项目的显示,其中,多个用户定义的部件有选择地在相互间进行变换以便分别修改项目的多个特性之一。
2.权利要求1所述方法,其中的特性检测步骤包括确定项目的几何形状,来自至少一个光源的照明量,来自至少一个光源的项目的方向,在预定坐标系统中项目的位置,加阴影法线,项目的表面的结构,项目的表面的反射特性,以及表面的基色的步骤。
3.权利要求1所述方法,其中的修改步骤包括调整被显示的项目的色彩的步骤。
4.权利要求1所述方法,其中自动生成加阴影计算的步骤包括确定用于显示的项目的表面的色彩的步骤。
5.权利要求1所述方法,其中自动生成加阴影计算的步骤包括确定加阴影计算信息量以代表项目的维数的步骤。
6.权利要求2所述方法,其中确定项目的表面的反射特性的步骤包括确定项目表面的多个反射部件之一的步骤,该反射部件包括环境反射部件,漫反射部件和镜面反射部件。
7.权利要求2所述方法,其中确定照明量的步骤包括确定至少一个光源的光的类别的步骤。
8.权利要求2所述方法,其中确定表面的反射部件的步骤包括根据项目的表面的材料交互地选择一个反射系数的步骤。
9.权利要求1所述方法,其中生成阴影计算的步骤包括根据预定映象参数生成项目的表面的结构映象的步骤。
10.权利要求9所述方法,其中生成结构映象的步骤包括生成至少一个图象映象,一个扰动映象,一个环境映象和一个过程映象的步骤。
11.权利要求1所述方法,其中自动加阴影计算的步骤采用了面向目标的操作系统。
12.利用面向目标的结构显示信息装置,其特征在于包括:
(a)显示一个项目的装置;
(b)多个用户定义的部件,每个部件用于处理代表被显示的项目的数据,该用户定义部件包括预定的属性;
(c)对被显示的项目的表面的多个特性的至少一个特性进行检测的装置;
(d)根据至少一个特性和至少一个用于该项目的用户定义部件生成一个用于该项目的表面的加阴影计算的装置;其中,检测装置包括根据加阴形计算修改项目的显示的装置,多个用户定义的部件包括多个加阴影程序,它们有选择地在相互间进行变换以便分别修改项目的多个特性之一,并与修改装置是完全兼容的。
13.权利要求12所述装置包括至少一个光源,其中的特性检测装置包括用于确定表面的几何形状之一,来自至少一个光源的照明量,来自至少一个光源的项目的方向,在预定坐标系统中项目的位置,加阴影法线,表面的结构,项目的表面的反射特性,以及表面的基色的装置。
14.权利要求12所述装置,其中的修改装置包括调整被显示的项目的色彩的装置。
15.权利要求12所述装置,其中自动生成加阴影计算的装置包括确定用于显示的项目的表面的色彩装置。
16.权利要求12所述装置,其中自动生成加阴影计算的装置包括确定加阴影计算信息量以代表项目的维数装置。
17.权利要求13所述装置,其中确定项目的表面的反射特性的装置包括确定项目表面的多个反射部件之一的装置,该反射部件包括环境反射部件,漫反射部件和镜面反射部件。
18.权利要求17所述装置,其中确定表面的反射部件的装置包括根据项目的表面材料交互地确定和选择一个反射系数的装置。
19.权利要求12所述装置,其中自动生成阴影计算的装置包括根据映象参数生成项目的表面的结构映象的装置。
20.权利要求19所述装置,其中生成结构映象的装置包括生成至少一个图象映象,一个扰动映象,一个环境映象和一个过程映象装置。
21.权利要求12所述装置,其中生成加阴影计算的装置,采用了面向目标的操作系统。
22.一种面向目标的显示系统,其特征在于包括:
(a)显示一个项目的图象的装置;
(b)确定与该项目的图象关联的加阴影信息的装置;以及
(c)多个用户定义的加阴影部件,每个包括将被选择性地和交互性地耦合到加阴影信息确定装置的预定属性,以便进行加阴影计算。
23.权利要求22所述系统,其中的多个加阴影部件是积木式的而且可以相互随意变换。
24.权利要求22所述的系统,其中的多个加阴影部件包括至少一个计算表面的反射的装置和一个生成图象映象的装置,该映象生成装置包括至少一个对项目表面图象映象的装置,对项目表面的图象进行结构映象的装置,对表面的图象进行扰动映象的装置,对表面图象进行过程映象的装置,以及生成表面的图象的环境映象的装置。
25.权利要求24所述系统,其中的加阴影信息确定装置包括一个用户接收加阴影计算并把计算的最终阴影提供给显示设备以修改被显示的目标的图象的再现部件。
26.权利要求22所述系统,包括在预定时间内未选中部件时设置预置的用户定义部件的装置。
CN 94191366 1993-08-24 1994-04-11 面向目标的阴影信息技术 Pending CN1119047A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11124193A 1993-08-24 1993-08-24
US08/111,241 1993-08-24

Publications (1)

Publication Number Publication Date
CN1119047A true CN1119047A (zh) 1996-03-20

Family

ID=22337351

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 94191366 Pending CN1119047A (zh) 1993-08-24 1994-04-11 面向目标的阴影信息技术

Country Status (7)

Country Link
EP (1) EP0698259B1 (zh)
JP (1) JPH09501786A (zh)
CN (1) CN1119047A (zh)
AU (1) AU6665194A (zh)
CA (1) CA2147846A1 (zh)
DE (1) DE69400878T2 (zh)
WO (1) WO1995006298A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102568027A (zh) * 2011-12-28 2012-07-11 浙江工业大学 一种像素化的虚拟树木光照影响区域获取方法

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5660176A (en) 1993-12-29 1997-08-26 First Opinion Corporation Computerized medical diagnostic and treatment advice system
US6206829B1 (en) 1996-07-12 2001-03-27 First Opinion Corporation Computerized medical diagnostic and treatment advice system including network access
USRE43433E1 (en) 1993-12-29 2012-05-29 Clinical Decision Support, Llc Computerized medical diagnostic and treatment advice system
GB2334869B (en) * 1994-12-22 1999-11-03 Apple Computer Three-dimensional graphics rendering system
US7548238B2 (en) 1997-07-02 2009-06-16 Nvidia Corporation Computer graphics shader systems and methods
US9007393B2 (en) 1997-07-02 2015-04-14 Mental Images Gmbh Accurate transparency and local volume rendering
US6496190B1 (en) * 1997-07-02 2002-12-17 Mental Images Gmbh & Co Kg. System and method for generating and using systems of cooperating and encapsulated shaders and shader DAGs for use in a computer graphics system
US6570578B1 (en) * 1998-04-03 2003-05-27 Avid Technology, Inc. System for automatic generation of selective partial renderings of complex scenes
US6509902B1 (en) * 2000-02-28 2003-01-21 Mitsubishi Electric Research Laboratories, Inc. Texture filtering for surface elements
US6825851B1 (en) * 2000-08-23 2004-11-30 Nintendo Co., Ltd. Method and apparatus for environment-mapped bump-mapping in a graphics system
GB2367471B (en) * 2000-09-29 2002-08-14 Pixelfusion Ltd Graphics system
US20060082593A1 (en) * 2004-10-19 2006-04-20 Microsoft Corporation Method for hardware accelerated anti-aliasing in 3D
US9081879B2 (en) 2004-10-22 2015-07-14 Clinical Decision Support, Llc Matrix interface for medical diagnostic and treatment advice system and method
US8345045B2 (en) * 2008-03-04 2013-01-01 Microsoft Corporation Shader-based extensions for a declarative presentation framework
US8451270B2 (en) 2008-06-25 2013-05-28 Microsoft Corporation Real-time radiosity system in a video game environment
US8970588B1 (en) * 2009-07-31 2015-03-03 Pixar System and methods for implementing object oriented structures in a shading language
US9804900B2 (en) 2014-05-30 2017-10-31 Apple Inc. Manipulating shaders with object-oriented programming

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4866637A (en) * 1987-10-30 1989-09-12 International Business Machines Corporation Pipelined lighting model processing system for a graphics workstation's shading function

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102568027A (zh) * 2011-12-28 2012-07-11 浙江工业大学 一种像素化的虚拟树木光照影响区域获取方法
CN102568027B (zh) * 2011-12-28 2014-07-02 浙江工业大学 一种像素化的虚拟树木光照影响区域获取方法

Also Published As

Publication number Publication date
EP0698259B1 (en) 1996-11-06
DE69400878D1 (de) 1996-12-12
AU6665194A (en) 1995-03-21
EP0698259A1 (en) 1996-02-28
CA2147846A1 (en) 1995-03-02
WO1995006298A1 (en) 1995-03-02
JPH09501786A (ja) 1997-02-18
DE69400878T2 (de) 1997-05-22

Similar Documents

Publication Publication Date Title
CN1119047A (zh) 面向目标的阴影信息技术
CN1252648C (zh) 三维图象绘制方法
CN109448089B (zh) 一种渲染方法及装置
CN1534476A (zh) 矢量图形的标记语言和对象模型
CN1147822C (zh) 图象处理的方法和系统
JP4809359B2 (ja) ダイナミック・シェーダ生成用システム、方法、およびコンピュータ・プログラム製品
CN1276393C (zh) Web 3D图像显示系统
CN1293519C (zh) 用于处理信息的设备、方法和程序
CN1711568A (zh) 视觉化处理系统、视觉化处理方法和视觉化处理程序
CN1249632C (zh) 处理图像的方法和设备
CA2267440C (en) A system for automatic generation of selective partial renderings of complex scenes
US6606092B2 (en) System and method for generating and using systems of cooperating and encapsulated shaders and shader DAGs for use in a computer graphics system
CN1026928C (zh) 彩色图象增强的系统与方法
CN1691069A (zh) 采用多图形处理器加速方格片元过滤的实时体绘制方法
CN1249045A (zh) 实现层次状态图的装置和对其有用的方法及设备
CN1119046A (zh) 面向目标的结构区域系统
CN1916968A (zh) 三维虚拟现实用矩阵实现模拟环境光照射的设置方法
US7542033B2 (en) Method and program for generating a two-dimensional cartoonish picturization of a three-dimensional object
CN1445650A (zh) 面向像素子分量的图像的硬件加强图形加速
US20150042654A1 (en) Point and click lighting for image based lighting surfaces
CN1271424A (zh) 用于三维成像和记录的设备
Driemeyer Rendering with mental ray®
CN1384427A (zh) 大视图分块缓冲显示方法
CN1206612C (zh) 用于重现具有畸变的反射性组构表面的方法和设备
Kamada et al. An enhanced treatment of hidden lines

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C01 Deemed withdrawal of patent application (patent law 1993)
WD01 Invention patent application deemed withdrawn after publication