KR20060111362A - 비주얼 및 장면 그래프 인터페이스 - Google Patents

비주얼 및 장면 그래프 인터페이스 Download PDF

Info

Publication number
KR20060111362A
KR20060111362A KR1020057008825A KR20057008825A KR20060111362A KR 20060111362 A KR20060111362 A KR 20060111362A KR 1020057008825 A KR1020057008825 A KR 1020057008825A KR 20057008825 A KR20057008825 A KR 20057008825A KR 20060111362 A KR20060111362 A KR 20060111362A
Authority
KR
South Korea
Prior art keywords
visual
scene graph
data
data structure
causing
Prior art date
Application number
KR1020057008825A
Other languages
English (en)
Other versions
KR101137187B1 (ko
Inventor
조셉 에스. 베다
제라드 에이. 슈네이더
케빈 티. 갈로
아담 엠. 스미쓰
에릭 에스. 밴덴버그
도날드 비. 커티스
Original Assignee
마이크로소프트 코포레이션
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 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20060111362A publication Critical patent/KR20060111362A/ko
Application granted granted Critical
Publication of KR101137187B1 publication Critical patent/KR101137187B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/61Scene description

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Human Computer Interaction (AREA)
  • Geometry (AREA)
  • Mathematical Physics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Processing Or Creating Images (AREA)
  • Image Generation (AREA)

Abstract

애플리케이션 프로그래밍 인터페이스(API) 및 오브젝트 모델에 구현되는 방법 및 시스템은, 프로그램 코드 개발자들로 하여금 일관된 방식으로 장면 그래프 데이터 구조와 인터페이스하여 그래픽을 출력할 수 있도록 한다. 인터페이스를 통하여, 프로그램 코드는, 지오메트리(gemetry) 데이터, 이미지 데이터, 애니메이션 데이터 및 기타 데이터와 같은 드로잉 프리미티브(drawing primitive)를, 검증 비주얼 오브젝트, 드로잉 비주얼 오브젝트 및 표면 비주얼 오브젝트를 포함하는 드로잉 표면을 표현하는 비주얼들에 기록한다. 이 코드는 또한 변환, 클립핑 및 불투명도 속성들을 비주얼에 지정하고, 자식 비주얼(child visual)들을 다른 비주얼들에 부가하여 계층 구조적 장면 그래프를 구축할 수 있다. 비주얼 관리자는 장면 그래프를 트래버스(traverse)하여 풍부한 그래픽 데이터를 하위 레벨의 그래픽 컴포넌트들에 제공한다.
장면 그래프, 비주얼, 지오메트리, 프리미티브, 애니메이션, API, 계층 구조

Description

비주얼 및 장면 그래프 인터페이스 {VISUAL AND SCENE GRAPH INTERFACES}
본 발명은 일반적으로 컴퓨터 시스템에 관한 것으로, 특히, 컴퓨터 시스템 상의 디스플레이를 위한 그래픽 및 기타 비디오 정보의 처리에 관한 것이다.
컴퓨터 시스템 상의 그래픽을 액세스하는 종래의 즉시 모드 모델(immediate mode model)은 한계에 도달했는데, 이는 부분적으로 메모리 및 버스의 속도가 메인 프로세서 및/또는 그래픽 프로세서의 발전을 따라가지 못하기 때문이다. 일반적으로, 프레임을 준비하기 위한 현재의 모델(예를 들어, WM_PAINT)은 너무 많은 데이터 처리를 필요로 하여, 복잡한 그래픽 효과가 요구되는 경우, 하드웨어 리프레시 속도를 따라갈 수 없다. 그 결과, 종래의 그래픽 모델로 복잡한 그래픽 효과를 시도하는 경우, 인지되는 시각적 효과를 초래하는 변화가 후속 프레임에 맞춰 완료되는 대신, 그 변화가 다른 프레임들에 더해져서 시각적으로 두드러지게 바람직하지 못한 결과를 야기하게 된다.
그래픽 출력을 제어하는 새로운 모델은 미국 특허 출원 제10/184,795호, 제10/184,796호, 제10/185,775호, 제10/401,717호, 제10/402,322호 및 제10/402,268호에 설명되어 있으며, 이들 출원은 본 발명의 양수인에게 양도되었고 본 명세서에 참조로서 포함된다. 이러한 새로운 모델은 그래픽 처리 기술에서 수많은 주목할 만한 개선을 이루어낸다. 예를 들면, 미국 특허 출원 제10/184,795호는 일반적으로 다중 레벨 그래픽 처리 시스템과 방법에 관한 것으로서, (예를 들어, 운영 체계의) 상위 레벨 컴포넌트는, 단순화된 데이타 구조 및/또는 그래픽 커맨드를 하위 레벨 컴포넌트로 전달하기 위하여, 비교적 낮은 동작 속도로, 애니메이션 파라미터들을 갱신하고 장면 그래프(scene graph)의 데이타 구조를 트래버스(traverse)하여, 장면 그래픽 구축의 연산 집약적인 측면을 수행한다. 상위 레벨 처리가 데이터를 상당히 단순화시키기 때문에, 하위 레벨 컴포넌트는, 그래픽 서브시스템의 프레임 리프레시 속도에 대응하는 속도와 같이, (상위 레벨 컴포넌트에 대해) 보다 빠른 속도로 동작하여, 데이터를 그래픽 서브시스템을 위한 일정한 출력 데이터로 처리할 수 있다. 애니메이션이 사용되는 경우, 변화에 따라 전체 장면을 다시 그리는 대신, 렌더링(rendered)될 때, 각 프레임에 대해 미세하게 변화된 장면을 제공하는 순간값들을 획득하기 위해, 필요한 경우, 하위 레벨 처리가 파라미터 간격을 보간하여, 매끄러운 애니메이션을 제공한다.
미국 특허 출원 제10/184,796호는, 그래픽을 그리고자 하는 프로그램 코드(예를 들어, 애플리케이션 프로그램 또는 운영 체계 컴포넌트)가 장면 그래프 기술(description)의 소정의 측면들을 선택적으로 변화시키는 반면, 다른 측면들은 변화되지 않은 상태로 유지하도록, 가변(애니메이트된(animated)) 값 및 파라미터화된 그래프 컨테이너를 제공하는 파라미터화된 장면 그래프를 기술하고 있다. 프로그램 코드는, 서로 다른 파라미터를 이용하여, 장면 그래프의 이미 작성된 부분들을 재사용할 수도 있다. 이해될 수 있는 바와 같이, 파라미터화를 통해 표시된 항 목의 외관을 용이하게 변화시키는 능력 및/또는 장면 그래프의 기존 부분의 재사용은 전체적인 그래픽 처리 효율에 있어 실질적인 이득을 제공한다.
미국 특허 출원 제10/185,775호는 일반적으로 장면 그래프 내의 오브젝트(object) 및 데이터를 통해 비주얼 정보를 저장하기 위한 캐싱 데이터 구조(caching data structure) 및 관련 메커니즘을 기술하고 있다. 데이터 구조는 일반적으로 그 내부에 비주얼 정보가 실장(populate)되고 사용되는 방법을 지능적으로 제어하는 메커니즘과 연관된다. 예를 들면, 애플리케이션 프로그램에 의해 구체적으로 요청되지 않는다면, 데이터 구조 내에 저장된 대부분의 정보는, 외부 참조(external reference)를 갖고 있지 않는데, 이는 이러한 정보가 최적화되거나 또는 다르게 처리될 수 있게 한다. 이해될 수 있는 바와 같이, 이는, 효율성과 자원의 보존을 제공하는데, 예를 들면, 캐시 데이터 구조 내의 데이터가 보다 컴팩트한 다른 포맷으로 처리될 수 있거나, 및/또는 비트맵 또는 기타 후처리 결과와 같은, 후속되는 반복적 처리에 대한 필요성을 감소시킨다.
상기 개선점들이 그래픽 처리 기술에서 상당한 이점을 제공하지만, 이러한 개선된 그래픽 모델 및 관련된 기타 개선점들을 프로그램들이 간단한 방식으로 효과적으로 사용하는 방식이 여전히 필요하다. 프로그램들이 개선된 그래픽 모델에 의해 제공되는 많은 특징 및 그래픽 처리 능력을 이용하여, 복잡한 그래픽과 시청각 데이타를 효율적인 방식으로 출력할 수 있게 하는 포괄적이고 간단한 모델이 필요하다.
요약하면, 본 발명은 오브젝트 모델, 및 프로그램 코드 개발자가 장면 그래프 데이터 구조와 일관적으로 인터페이스하여 그래픽을 생성할 수 있도록 하는 방식으로 그 오브젝트 모델을 액세스하기 위한 API(Application Programming Interface)를 제공한다. 모델 내의 기본 오브젝트 및 API 세트는, 사용자에게 가상 표면을 표현하는 비주얼이며, 장면 그래프는 비주얼 오브젝트들로 형성된다. 이러한 비주얼은 컨테이너 비주얼 오브젝트, 보유 비주얼 오브젝트(retained visual object), 드로잉 비주얼 오브젝트 및 기타 비주얼 오브젝트를 포함한다. 비주얼 자체는, 클립 오브젝트, 변환 오브젝트 등과 같은 자원 오브젝트 상에 보유될 수 있고, 일부 타입의 Visuals(예를 들면, DrawingVisual, RetainedVisual)은, 이미지, 브러시 및/또는 계조(gradient)와 같은 자원 오브젝트들을 참조할 수 있는 드로잉 명령어 리스트 상에 보유될 수 있다.
장면 그래프 내의 대부분의 자원 오브젝트는 일단 생성되면 불변적이다. 즉, 일단 생성되면 변경될 수 없다. 개발자가 쉽게 변경하기를 원하는 그러한 오브젝트에 대해서, "Changeable Class and Pattern to Provide Selective Mutability in Computr Programming Environments"라는 제목으로 동시에 출원되어 함께 계류중인 미국 특허 출원(본 발명의 양수자에게 양도되고 본원에 참조로 포함됨)에 기술된 바와 같이, 가변성(mutability)은 변경가능한 패턴(pattern) 및 구현에 의해 제공된다.
API를 통해, 프로그램 코드는 지오메트리 데이타(geometry data), 이미지 데이타, 애니매이션 데이타 및 기타 데이타와 같은 드로잉 프리미티브(drawing primitive)를 비주얼에 기입한다. 예를 들면, 프로그램 코드는 선 그리기 명령어(draw line instruction), 지오메트리 그리기 명령어, 비트맵 그리기 명령어 등과 같은 드로잉 프리미티브를 비주얼에 기입한다. 그러한 드로잉 명령어들은 종종 경로가 그려지는 방법을 설명하는 지오메트리 데이타와 같은 복합 데이타와 결합되고, 또한, 비트맵, 비디오 등과 같은 자원들을 참조할 수 있다.
또한, 코드는 비주얼 상에 클립핑(clipping), 불투명도(opacity) 및 기타 속성들을 지정할 수 있고, 변환, 불투명도 및 히트 테스트 식별(hit test identification)을 푸싱(pushing)하고 팝(popping)하는 방법이 제공된다. 이외에, 비주얼은 히트 테스트에 참여할 수 있다. 또한, 프로그램 코드는 자식 비주얼(child visual)들을 추가하기 위해 비주얼들과 인터페이스하여 계층 구조적 장면 그래프를 생성한다. 비주얼 관리자는 장면 그래프를 처리(예를 들어, 트래버스(traverse) 또는 전송)하여, 하위 레벨 그래픽 컴포넌트에 풍부한 그래픽 데이터를 제공한다.
컨테이너 비주얼은 자식 비주얼의 컬렉션(collection)을 제공하고, 일 구현예에서는, 계층 구조를 정의할 수 있는 유일한 비주얼이다. 컨테이너 비주얼 상의 자식들의 컬렉션은, 자식 비주얼의 임의 삽입, 제거 및 재순서화를 허용한다.
드로잉 비주얼은 드로잉 컨텍스트(예를 들면, 드로잉 컨텍스트 오브젝트에 대한 참조)를 호출자에게 반환시키는 오픈 호출(open call)로 오픈된다. 일반적으로, 드로잉 컨텍스트는 비주얼을 실장(populate)시키는데 이용되는 임시 헬퍼 오브젝트(temporary helper object)이다. 이 후, 프로그램 코드는 드로잉 컨텍스트를 이용하여 드로잉 프리미티브를 비주얼에 추가한다. 오픈 호출은 비주얼의 컨텐츠(자식)를 소거시킬 수 있으며, 또는 해당 현재 비주얼에 첨부하기 위해 추가 호출(append call)이 사용되어 비주얼을 오픈시킬 수 있다. 드로잉 파라미터들로서 정적인 값들을 수신하는 것 이외에, 드로잉 컨텍스트는 애니메이션 오브젝트들로 채워질 수 있다.
보유 비주얼은, 프로그램 코드가 드로잉 텍스트를 채우고자 하는 경우 대신, 도로잉 텍스트가 채워지기를 시스템이 요청하는 경우, 드로잉 컨택스트가 채워진다는 점을 제외하고는, 드로잉 비주얼과 유사한 방식으로 동작한다. 예를 들어, 특정 비주얼의 컨텐트가 장면을 렌더링(rendering)하는데 필요할 것이라면, 시스템은 IRetainedVisual.Render를 호출하여 메모리에 이미 있던 임의의 컨텐트를 대체하고, 비주얼의 컨텐트를 채울 것이다.
따라서, 서로 다른 타입의 프리미티브가 지오메트리, 이미지 데이터 및 비디오 데이터를 포함하는 드로잉 컨텍스트를 이용하여 비주얼에 그려질 수 있다. 지오메트리는 스트로크(stroke) 또는 채움(fill) 없이 벡터 그래픽 골격, 예를 들어 사각형을 정의하는 클래스 유형이다. 각각의 지오메트리 오브젝트는 단순 형상(LineGeometry, EllipseGeometry, RectangleGeometry), 복합 단일 형상(PathGeometry), 또는 지정된 결합 동작(예를 들면, 병합(union), 교차 등)을 갖는 형상의 리스트(GeometryList)에 대응한다. 이러한 오브젝트들은 클래스 계층 구조를 형성한다. 또한, DrawRectangle 메소드와 같은, 자주 이용되는 유형의 지오메트리를 그리기 위한 숏컷(shortcut)도 존재한다.
지오메트리가 그려질때, 브러시(brush) 또는 펜이 지정될 수 있다. 브러시 오브젝트는 평면을 그래픽적으로 채우는 방법을 정의하며, 브러시 오브젝트의 클래스 계층 구조가 존재한다. 또한, 펜은 스트로크된 영역을 채우는 방법을 기술하는 것에 대해 지정된 브러시를 갖는다. 특수 타입의 브러시 오브젝트(VisualBrush)는 해당 브러시가 그려지는 방법을 정의하기 위해 비주얼을 참조할 수 있다. 드로잉 브러시는 형상을 채우거나 또는 기타 형상들과 브러시들의 조합을 제어하는 것을 가능케 한다.
기타 이점 및 효과들은, 도면을 참조하는 경우 이하의 상세한 설명으로부터 명백해질 것이다.
도 1은 본 발명이 포함될 수 있는 예시적인 컴퓨터 시스템을 나타낸 블럭도.
도 2는 본 발명이 포함될 수 있는 그래픽 계층 아키텍쳐를 일반적으로 나타낸 블럭도.
도 3은, 본 발명에 일 측면에 따라 그래픽 커맨드 및 기타 데이타를 제공하기 위해 장면 그래프를 트래버스(traverse)하는 등의 방식으로, 장면 그래프를 처리하기 위한 비주얼 및 관련 컴포넌트의 장면 그래프를 나타낸 도면.
도 4는 본 발명의 일 측면에 따라 구성된, 검증 비주얼(validation visual), 드로잉 비주얼 및 관련 명령어 리스트(Instruction Lists)의 장면 그래프를 나타낸 도면.
도 5는 본 발명의 일 측면에 따른, 오브젝트 모델의 비주얼 클래스를 나타낸 도면.
도 6은 본 발명의 일 측면에 따른, 오브젝트 모델의 다양한 기타 오브젝트들을 나타낸 도면.
도 7은 본 발명의 일 측면에 따른, 변환 클래스 계층 구조(transform class hierarchy)를 나타낸 도면.
도 8 및 도 9는 본 발명의 일 측면에 따른, 지오메트리 스케일(geometry scale) 및 비균일 스케일(non-uniform scale)에서의 비주얼의 데이터의 변환을 각각 나타낸 도면.
도 10은 본 발명의 일 측면에 따른, 오브젝트 모델의 지오메트리 클래스(geometry class)를 나타낸 도면.
도 11은 본 발명의 일 측면에 따른 PathGeometry 구조를 나타낸 도면.
도 12는 본 발명의 일 측면에 따른, 프리미티브에 의해 생성된 예시적인 그래픽을 나타내는 비주얼 및 명령어 리스트의 장면 그래프를 나타낸 도면.
도 13은 본 발명의 일 측면에 따른, 오브젝트 모델의 브러시 클래스를 나타낸 도면.
도 14 및 도 15는 본 발명의 일 측면에 따른, 선형 계조 브러시 오브젝트 내의 데이터로부터 발생된 렌더링된 그래픽을 나타낸 도면.
도 16은 본 발명의 일 측면에 따른, 래디얼(radial) 계조 브러시 오브젝트 내의 데이터로부터 발생된 렌더링된 그래픽을 나타낸 도면.
도 17은 본 발명의 일 측면에 따른, 렌더링된 9 그리드 브러시 오브젝트를 나타낸 도면.
도 18은 본 발명의 일 측면에 따른, 다양한 스트레치(stretch) 값들을 갖는 것으로부터 발생된 렌더링된 그래픽를 나타낸 도면.
도 19는 본 발명의 일 측면에 따른, 다양한 타일(tile) 값을 갖는 것으로부터 발생된 렌더링된 그래픽를 나타낸 도면.
도 20은 본 발명의 일 측면에 따라 비주얼 브러시 오브젝트 내의 데이타로 부터 발생된, 그리드 및 변환 그리드를 나타낸 도면.
도 21은 본 발명의 일 측면에 따른, 비주얼로부터 그려진 그래픽을 렌더링하는 경우, 그리드 및 변환된 그리드를 나타낸 도면.
예시적인 운영 환경
도 1은 본 발명이 구현될 수 있는 적합한 컴퓨팅 시스템 환경(100)의 일례를 도시하고 있다. 컴퓨팅 시스템 환경(100)은 적합한 컴퓨팅 환경의 단지 일례일 뿐이며, 본 발명의 용도 또는 기능의 범위에 대한 어떠한 한계를 제시하기 위한 것은 아니다. 또한, 컴퓨팅 환경(100)은, 예시적인 운영 환경(100) 내에 도시되어 있는 컴포넌트 중 임의의 것 또는 그들의 조합에 관련된 임의의 의존성 또는 필요성을 가지는 것으로 해석되어서도 안된다.
본 발명은 다른 수많은 범용 또는 특수 목적용 컴퓨팅 시스템 환경 또는 구성에서 동작할 수 있다. 본 발명에 이용되기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 및/또는 구성의 예들은, 개인용 컴퓨터, 서버 컴퓨터, 휴대형 또는 랩탑 장치, 태블릿 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그래밍가능한 가전 기기, 네트워크 PC, 미니 컴퓨터, 메인프레임 컴퓨터, 및 상기 시스템 또는 장치들 중 임의의 것을 포함하는 분산 컴퓨팅 환경 등을 포함하지만, 이에 제한되는 것은 아니다.
본 발명은, 컴퓨터에 의해 실행되는, 프로그램 모듈과 같은 컴퓨터 실행 가능 명령어들의 일반적인 문맥에서 기술될 수 있다. 일반적으로, 프로그램 모듈은, 특정 태스크를 수행하거나 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조 등을 포함한다. 본 발명은 통신 네트워크를 통해 연결된 원격 처리 장치들에 의해 태스크들이 수행되는 분산 컴퓨팅 환경에서도 실현될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및 원격 컴퓨터 저장 매체 모두에 위치할 수 있다.
도 1을 참조하면, 본 발명을 구현하기 위한 예시적인 시스템은 컴퓨터(110) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포넌트들은 프로세싱 유닛(120), 시스템 메모리(130), 및 시스템 메모리를 포함한 다양한 시스템 컴포넌트들을 프로세싱 유닛(120)에 결합시키는 시스템 버스(121)를 포함할 수 있지만, 이들에 한정되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 제어기, 주변장치 버스, 및 다양한 버스 아키텍쳐들 중 임의의 것을 이용하는 로컬 버스를 포함하는 몇몇 유형의 버스 구조들 중 임의의 것일 수 있다. 한정이 아닌 예로서, 이러한 아키텍쳐는 ISA(Industry Standard Architecture) 버스, MCA(Micro Channel Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standards Association) 로컬 버스, AGP(Accelerated Graphics Port) 버스, 및 메자닌 버스(Mezzanine bus)로도 알려져 있는 PCI(Peripheral Component Interconnect) 버스를 포함한다.
컴퓨터(110)는 전형적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 판독가능 매체는 컴퓨터(110)에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수 있으며, 휘발성 및 불휘발성 매체, 착탈형 및 비착탈형 매체를 모두 포함한다. 한정이 아닌 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터과 같은 정보의 저장을 위한 임의의 방법이나 기술로 구현된 휘발성 및 불휘발성, 착탈형 및 비착탈형 매체를 모두 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disks)나 기타 광디스크 저장장치, 자기 카세트, 자기 테이프, 자기 디스크 저장장치나 기타 자기 저장장치, 또는 원하는 정보를 저장하는 데에 이용될 수 있고 컴퓨터(110)에 의해 액세스될 수 있는 임의의 다른 매체를 포함한다. 전형적으로, 통신 매체는 반송파 또는 기타 전송 매커니즘과 같은 변조된 데이터 신호에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 기타 데이터를 포함하고, 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호(modulated data signal)"라는 용어는 신호 내의 정보를 인코딩하는 것과 같은 방식으로 설정되거나 변경된 하나 이상의 특성을 갖는 신호를 의미한다. 한정이 아닌 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 접속과 같은 유선 매체, 및 음향, RF, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함한다. 상기한 것 중 임의의 조합도 컴퓨터 판독가능 매체의 범위 내에 포함될 수 있다.
시스템 메모리(130)는 ROM(131) 및 RAM(132)와 같은 휘발성 및/또는 불휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 이를 테면 초기 시동 동안, 컴퓨터(110) 내의 구성요소들 간의 정보 전송을 돕는 기본 루틴을 포함하는 BIOS(basic input/output system)(133)은, 일반적으로 ROM(131)에 저장된다. 전형적으로, RAM(132)은, 프로세싱 유닛(120)에 즉시 액세스될 수 있거나 및/또는 프로세싱 유닛(120)에 의해 현재 동작 중인 데이터 및/또는 프로그램 모듈을 포함한다. 한정이 아닌 예로서, 도 1은 운영 체계(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)를 도시하고 있다.
컴퓨터(110)는 기타 착탈형/비착탈형, 휘발성/불휘발성 컴퓨터 저장 매체를 포함할 수도 있다. 단지 예로서, 도 1은 비착탈형, 불휘발성 자기 매체로부터/로 판독 또는 기입하는 하드 디스크 드라이브(141), 착탈형, 불휘발성 자기 디스크(152)로부터/로 판독 또는 기입하는 자기 디스크 드라이브(151), 및 CD-ROM 또는 기타 광매체와 같은 착탈형, 불휘발성 광디스크(156)로부터/로 판독 또는 기입하는 광디스크 드라이브(155)를 도시한다. 예시적인 운영 환경에서 이용될 수 있는 기타 착탈형/비착탈형, 휘발성/불휘발성 컴퓨터 저장 매체는, 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지탈 비디오 테이프, 고체 RAM(solid state RAM), 고체 ROM(solid state ROM) 등을 포함하나, 이들로 한정되는 것은 아니다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비착탈형 메모리 인터페 이스를 통해 시스템 버스(121)에 접속되며, 자기 디스크 드라이브(151) 및 광디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 착탈형 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
도 1에 도시되고 앞서 논의된 드라이브 및 그와 연관된 컴퓨터 저장 매체는 컴퓨터(110)를 위해 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터의 저장을 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체계(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)를 저장하는 것으로 도시된다. 주의할 점은, 이러한 컴포넌트들은 운영 체계(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)와 동일하거나 또는 상이할 수 있다는 것이다. 운영 체계(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)는, 이들이 최소한 서로 다른 복제본이라는 것을 나타내기 위하여 본 명세서에서는 서로 다른 번호가 주어진다. 사용자는 태블릿(전자 디지타이저)(164), 마이크(163), 키보드(162), 및 일반적으로 마우스, 트랙볼 또는 터치 패드로 칭해지는 포인팅 장치(161)와 같은 입력 장치들을 통해 커맨드 및 정보를 컴퓨터(110)에 입력할 수 있다. 기타 입력 디바이스(도시되지 않음)는 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이러한 입력 디바이스 및 기타 입력 디바이스는 종종 시스템 버스에 결합된 사용자 입력 인터페이스(160)를 통해 프로세싱 유닛에 접속되지만, 병렬 포트, 게임 포트 또는 USB(Univeral Serial Bus)와 같은 기타 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 또한, 모니터(191) 또는 다른 유형 의 표시 장치도 비디오 인터페이스(190)와 같은 인터페이스를 통해 시스템 버스(121)에 접속된다. 또한, 모니터(191)는 터치-스크린 인터페이스(192)와 같은 인터페이스를 통해 수기(handwriting)와 같은 디지털화된 입력을 컴퓨터 시스템(110)에 입력할 수 있는 터치-스크린 패널(193)과 통합될 수도 있다. 주의할 점은, 터치 스크린 패널(193)이 본질적으로 태블릿(164)으로 기능하는 태블릿형 퍼스널 컴퓨터에서와 같이 컴퓨팅 장치(110)가 포함되는 하우징에 모니터 및/또는 터치 스크린 패널이 물리적으로 결합될 수 있다는 것이다. 이외에, 컴퓨팅 장치(110)와 같은 컴퓨터는 출력 주변장치 인터페이스(194) 등을 통해 접속될 수 있는 스피커(195) 및 프린터(196)와 같은 기타 주변장치 출력 장치들을 포함할 수도 있다.
컴퓨터(110)는, 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터들로의 논리 접속을 이용한 네트워크 환경에서 동작할 수 있다. 도 1에는 메모리 저장 장치(181)만이 도시되어 있지만, 원격 컴퓨터(180)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치(peer device), 또는 기타 일반적인 네트워크 노드일 수 있으며, 통상적으로 컴퓨터(110)에 대하여 상술한 다수 또는 모든 구성요소를 포함한다. 도 1에 도시된 논리적 접속은 LAN(Local Area Network)(171) 및 WAN(Wide Area Network)(173)를 포함할 수 있으나, 다른 네트워크를 포함할 수도 있다. 이러한 네트워크 환경은 사무실, 기업형(Enterprise-wide) 컴퓨터 네트워크, 인트라넷 및 인터넷에 일반적이다.
LAN 네트워크 환경에서 사용되는 경우, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워크 환경에서 사용되는 경우, 컴퓨터(110)는 통상적으로 모뎀(172) 또는 인터넷과 같은 WAN(173) 상에서 통신을 설정하기 위한 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는, 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속될 수 있다. 네트워크 환경에서, 컴퓨터(110) 또는 그 일부에 대하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 한정이 아닌 예로서, 도 1은 원격 애플리케이션 프로그램(185)이 메모리 장치(181)에 상주하는 것으로 도시하고 있다. 도시된 네트워크 접속은 예시적이며 컴퓨터들 사이에서 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것이 이해될 것이다.
장면 그래프 데이터 구조(SCENE GRAPH DATA STRUCTURES)에 대한 인터페이스
본 발명의 일 측면은 일반적으로, 시스템 디스플레이 상의 그래픽 출력을 렌더링하기 위하여, 애플리케이션 또는 운영 체계 컴포넌트와 같은 프로그램 코드로 하여금 드로잉 명령어 및 기타 정보(예컨대, 이미지 비트맵)를 그래픽 컴포넌트들과 통신할 수 있도록 하는 것에 관한 것이다. 이를 위해, 본 발명은, 다수의 정의된 함수와 메소드(method)를, 예를 들면 프로그램이 데이타 구조, 드로잉 프리미티브(커맨드), 및 기타 그래픽 관련 데이타로 장면 그래프를 실장(populate)하게 할 수 있도록 하는, 오브젝트 모델에 대한 API(application programming interface)의 형태로 제공한다. 처리되는 경우, 장면 그래프는 스크린 상에 표시되는 그래픽으로 나타난다.
도 2는 본 발명이 구현될 수 있는 일반적인 계층화된 아키텍처(200)를 도시 한다. 도 2에 도시된 바와 같이, 본 발명의 일 측면에 따라, 프로그램 코드(202)(예를 들어, 애플리케이션 프로그램 또는 운영 체계 컴포넌트 등)는, 이미징(imaging)(204), 벡터 그래픽 엘리먼트(206) 및/또는 비주얼 애플리케이션 프로그래밍 인터페이스(API) 계층(212)에 대한 직접적인 함수/메소드(method) 호출을 포함하는 하나 이상의 다양한 방법을 통해 그래픽 데이터를 출력하도록 개발될 수 있다. 일반적으로, 이미징(204)은, 비트맵과 같은 이미지를 로딩, 편집 및 저장하기 위한 메커니즘을 프로그램 코드(202)에 제공한다. 이하에서 설명하는 바와 같이, 이러한 이미지들은 시스템의 다른 부분에 의해 사용될 수 있으며, 이미지를 직접 그리기 위해 프리미티브 드로잉 코드(primitive drawing code)를 사용하는 방법도 있다. 벡터 그래픽 엘리먼트(206)는 그래픽을 그리는 다른 방법을 제공하는데, 이는 (이하에서 기술되는) 나머지 오브젝트 모델과 일치한다. 벡터 그래픽 엘리먼트(206)는, 엘리먼트/속성 시스템(208) 및 레이아웃 시스템(210)이 적절하게 비주얼 API 계층(212)을 호출하기 위해 해석하는 마크업 언어(markup language)를 통해 생성될 수 있다. 엘리먼트/속성 시스템(208) 및 레이아웃 시스템(210)과 함께, 벡터 그래픽 엘리먼트(206)는 미국 특허 출원 제 10/401,717에 기술되어 있다.
일 구현예에서, 그래픽 계층 아키텍처(200)는 상위 레벨 합성(composition) 및 애니메이션 엔진(214)를 포함하며, 이는 캐싱 데이터 구조(caching data structure)(216)를 포함하거나 그렇지 않으면 이와 연관된다. 캐싱 데이터 구조(216)는 이하에서 설명되는 바와 같이, 정의된 오브젝트 모델에 따라 관리되는 계층 구조적으로 배열된 오브젝트를 포함하는 장면 그래프를 포함한다. 일반적으로, 비주얼 API 계층(212)는, 오브젝트를 생성하며 그들에 데이터를 제공하기 위해 오브젝트를 개방(open) 및 폐쇄(close)하는 등의 능력을 포함하여, 캐싱 데이터 구조(216)에 대한 인터페이스를 프로그램 코드(202)(및 레이아웃 시스템(210))에 제공한다. 즉, 상위 레벨 합성 및 애니메이션 엔진(214)은, 개발자가 그래픽 정보를 표시하기 위해 그래픽 및 매체에 관한 의도를 표현할 수 있는 통합 매체 API 계층(212)을 노출시키고, 플랫폼이 프로그램 코드에 대한 하드웨어의 사용을 최적화할 수 있도록 충분한 정보를 하부 플랫폼(underlying platform)에 제공한다. 예를 들어, 하부 플랫폼은 캐싱, 자원 협상(resource negotiation) 및 매체 통합(media integration)을 담당할 것이다.
일 구현예에서, 상위 레벨 합성 및 애니메이션 엔진(214)은 명령어 스트림 및 가능한 다른 데이터(예를 들어, 비트맵에 대한 포인터)를 고속의 하위 레벨 합성 및 애니메이션 엔진(218)에 전달한다. 본 명세서에서 사용되는 용어로서, '상위 레벨(high-level)' 및 '하위 레벨(low-level)'은, 다른 컴퓨팅 시나리오에서 사용되는 용어와 유사한 것으로, 일반적으로 소프트웨어 컴포넌트가 상위 레벨 컴포넌트에 대해 낮을수록, 그 컴포넌트는 하드웨어에 보다 밀접하다는 것을 나타낸다. 따라서, 예를 들어, 상위 레벨 합성 및 애니메이션 엔진(214)으로부터 전송된 그래픽 정보는 하위 레벨 합성 및 애니메이션 엔진(218)에서 수신될 수 있는데, 하위 레벨 합성 및 애니메이션 엔진(218)에서 이 정보는 하드웨어(22)를 포함하는 그래픽 서브시스템(222)에 그래픽 데이터를 전송하기 위해 사용된다.
프로그램 코드(202)와 함께 상위 레벨 합성 및 애니메이션 엔진(214)은 프로 그램 코드(202)에 의해 제공되는 그래픽 장면을 나타내기 위해 장면 그래프를 생성한다. 예를 들어, 그려지는 각각의 아이템은, 시스템이 장면 그래프 데이터 구조(216)에 캐싱하는 드로잉 명령어로 로딩될 수 있다. 이하에서 설명되는 바와 같이, 이러한 데이터 구조(216) 및 그려지는 것을 지정하기 위한 많은 다양한 방법이 있다. 또한, 상위 레벨 합성 및 애니메이션 엔진(214)은 선언(declarative)(또는 기타) 애니메이션 제어(예를 들어, 애니메이션 간격) 및 타이밍 제어를 제공하기 위해 타이밍 및 애니메이션 시스템(220)과 통합된다. 주의할 점은, 애니메이션 시스템은 애니메이트 값들(animate value)이, 예를 들어 엘리먼트 속성 레벨(208), 비주얼 API 계층(212)의 내부, 및 임의의 다른 자원들을 포함하는 시스템 내의 임의의 장소에 본질적으로 전달되게 한다는 점이다. 타이밍 시스템은 엘리먼트 및 비주얼 레벨에서 노출된다.
하위 레벨 합성 및 애니메이션 엔진(218)은 장면의 합성, 애니메이팅 및 렌더링을 관리하며, 이 후, 이는 그래픽 서브시스템(222)에 제공된다. 하위 레벨 엔진(218)은 다수의 애플리케이션의 장면들에 대한 렌더링들을 합성하고, 렌더링 컴포넌트를 사용하여, 스크린에 그래픽의 실질적 렌더링을 구현한다. 그러나, 주의할 점은, 때때로 일부 렌더링이 상위 레벨에서 이루어지는 것이 필요하거나 및/또는 이점이 될 수 있다는 것이다. 예를 들어, 하위 계층들은 다수의 애플리케이션으로부터의 요청을 서비스하지만, 상위 계층은 애플리케이션별로 인스턴트화(instantiate)됨으로써, 이미징 메커니즘(204)을 통해 시간이 걸리거나 애플리케이션에 특유한 렌더링을 상위 레벨에서 수행하고, 비트맵에 대한 참조를 하위 계층으 로 전달하는 것이 가능해진다.
본 발명의 일 측면에 따르면, Visual API는 본 발명의 일 측면에 따라 비주얼 트리를 정의하는 오브젝트 세트를 제공한다. 비주얼 트리는 그래픽 시스템에 의해 매체(스크린, 프린터 또는 표면)에 렌더링될 수 있는 데이타 구조를 나타낸다. 렌더링될 때, 비주얼 트리 내의 데이타는 관찰자가 보는 "장면(scene)"이다. 비주얼 오브젝트들(또는 단순히 비주얼)은 지오메트리, 프리미티브, 브러시, 컬러 계조 및 애니매이션과 같은, 그려진 장면을 구성하는 다른 그래픽 오브젝트를 포함하고 관리한다.
본 발명이 보다 친숙한 오브젝트와 속성 시스템을 이용하여 추상(abstraction)의 상위 레벨에서 드로잉 및 렌더링 서비스에 대한 액세스를 제공하고, 마크업 언어(코드 명칭 "XAML")를 통해 마크업 레벨에서 벡터 그래픽 오브젝트를 제공하더라도, Visual API는, 속성 시스템이나 마크업을 이용하여 용이하게 달성하기 보다, 드로잉 기능에 대한 보다 큰 제어를 원하는 개발자에게 가장 관심이 있을 것이다.
도 3 및 도 4는, 비주얼로 칭해지는 기본 오브젝트(base object)를 포함하는, 예시적인 장면 그래프(300, 400)를 각각 도시한다. 비주얼 오브젝트, 또는 간단히 Visuals는, 선, 텍스트, 및 이미지와 같은 그래픽 컨텐트를 위한 컨테이너(container)이다. 도 5의 비주얼 클래스의 오브젝트 계승에서 나타나는 바와 같이, 그래픽 컨텐트를 직접적으로 포함하지 않으나 자식(child) Drawing Visual 오브젝트를 포함하는 Visual인 ContainerVisual을 포함하여, 몇 개의 상이한 비주얼 오브젝트가 존재한다. 자식 DrawingVisual 오브젝트는 다른 DrawingVisual 오브젝트에 부가되기보다는 ContainerVisual에 부가된다. 이로 인해, 개발자들은 재생성하고 이 후 전체 드로잉 컨텍스트를 렌더링하지 않고 개별적인 비주얼 오브젝트들에 대한 속성을 변경하고 설정할 수 있으며, 또한 컨테이너 오브젝트에 대한 속성을 클립핑 및 변환하기 위해 액세스할 수 있다. ContainerVisual 오브젝트는 중첩될 수 있다(nested).
DrawingVisual은 그래픽 컨텐트를 포함할 수 있는 Visual이다. 이러한 Visual은 많은 드로잉 방법을 나타낸다. DrawingVisual의 자식 오브젝트는 제로-기반(zero-based), 제트차(z-order) 공간에서 조직화된다. RetainedVisual은 드로잉에 사용될 수 있는 "보유 명령어 스트림(retained instruction stream)"을 도입하는 Visual이다. 보다 간단하게, RetainedVisual은 개발자가 비주얼의 컨텐트를 보유하고 단지 필요할때만 그것을 다시 그리게 한다. 드로잉을 위해 RenderOpen을 호출하고 반환된 rawingContext를 이용함으로써, DrawingVisual과 같이, RetainedVisual을 명령적으로 사용하는 것이 가능하다. RetainedVisual은 검증 콜백 기능(validation callback functionality)과 InvalidateVisual 방법을 제공한다. 검증 기능을 사용하기 위해, 사용자는, RetainedVisual 또는 그로부터 유도되는 클래스 상에 IRetainedRender 인터페이스를 구현한다.
도 5로 돌아가서, 또 다른 비주얼은, 장면 그래프의 비주얼 장면 내의 자식 비주얼로서, 레거시 Microsoft
Figure 112005025670481-PCT00001
Win32
Figure 112005025670481-PCT00002
컨트롤 또는 윈도우를 호스트하는데 사용되는 Visual인 HwndVisual(505)이다. 특히, 레거시 프로그램은, 종래의 그래픽 기 술에 기초하여 자식 HWnd(또는 유사한 것)에 그리는 WM_PAINT 방법을 통해 여전히 동작한다. 새 그래픽 프로세싱 모델에서 그러한 프로그램을 지원하기 위해, HwndVisual은, Hwnd가 장면 그래프에 포함되고 부모(parent) 비주얼이 재배치됨에 따라 이동될 수 있다. 2차원과 3차원 세계들 사이를 연결할 수 있는 3차원 (3D) 비주얼과 같은 다른 유형의 비주얼도 실행가능한데, 예를 들면, 카메라와 같은 뷰(view)는 3차원 세계로의 뷰를 갖는 2차원 비주얼을 통해 가능하다.
도 3에 도시된 바와 같이, VisualManager(304)는 비주얼 트리를 매체에 연결하는 오브젝트를 포함한다. VisualManager는 비주얼 데이터 구조(루트 비주얼(302)) 및 그 데이터가 렌더링되는 타겟 간의 유지된 접속을 설정하고, 둘 사이의 차이를 추적할 수 있게 한다. VisualManager(304)는 윈도우 메시지들을 수신하고, 드로잉 좌표 내의 점을 장치 좌표로 변환하거나 그 반대로 변환하기 위한 방법을 제공한다.
통상적인 애플리케이션은 앞서 언급된 미국 특허 출원 제10/401,717에 기술된 바와 같이, "XAML"로 레이아웃를 정의하고 C#로 일부 드로잉 동작들을 지정함으로써 그래픽을 그릴 수 있다. 개발자는 프리미티브를 갖는 Geometry 클래스를 사용하여 Shape 엘리먼트들을 생성하거나 형상을 그릴 수 있다. 다음의 시나리오에서, 코드는 Canvas 밑에 놓여 있는 Visual에 타원을 그리는 것을 나타낸다.
Figure 112005025670481-PCT00003
Figure 112005025670481-PCT00004
Visual API를 사용하면, 개발자는 대신 Visual에 직접 그릴 수 있다(그렇지 않으면 레이아웃 엘리먼트에 의해 액세스됨).
DrawingVisual 오브젝트의 컨텐트를 렌더링하기 위해, 애플리케이션은 통상적으로 DrawingVisual 상의 RenderOpen 메소드를 호출한다. RenderOpen은, 애플리케이션이 드로잉 동작들을 수행할 수 있는 DrawingContext를 반환한다. Visual의 컨텐트를 소거하기 위해, 애플리케이션은 DrawingContext 상의 Close를 호출한다. 애플리케이션이 Close를 호출한 후, DrawingContext는 더 이상 사용될 수 없다.
다음의 코드는, Ellipse 형상보다 Geometry 오브젝트를 사용하여, DrawingVisual에 타원(앞선 예에서와 같은 타원)을 그린다. 이러한 예는 DrawingVisual을 생성하고, DrawingVisual의 DrawingContext를 얻고, 타원을 그리기 위해 DrawingContext의 DrawingGeometry 메소드를 호출한다. 주의할 점은, Visual을 최상위 레벨 오브젝트의 비주얼 트리(이 경우에는 윈도우임)에 추가하여야 한다는 것이다.
Figure 112005025670481-PCT00005
Figure 112005025670481-PCT00006
다음의 예는 또한 앞선 예에 대해 ContainerVisual에 유사한 타원들을 추가함으로써 구축된다; 주의할 점은, 이 예는, 명확성을 위해 장황하게 되었다는 것이다. ContainerVisual의 사용은 장면 오브젝트를 조직화하는데 도움이 될 수 있으며, 개발자로 하여금 그려진 보통의 컨텐트로부터 히트-테스트(hit-test) 또는 검 증을 수행해야 하는 Visual 오브젝트(RetainedVisual 오브젝트들)를 분리할 수 있도록 하고, 불필요하게 컨텐트를 다시 그리는 것을 최소화한다.
Figure 112005025670481-PCT00007
Figure 112005025670481-PCT00008
Figure 112005025670481-PCT00009
RetainedVisual은 DrawingVisual과 유사하나 비주얼 컨텐트를 선택적으로 다시 그릴 수 있게 한다. 그 명칭이 의미하는 바와 같이, RetainedVisual은 매체 상에 다수의 외관에 대한 컨텐트를 보유할 수 있다. 또한, 이는 콜백(callback)과 검증 기능을 제공한다. 이러한 기능은, 컨텐트의 재-렌더링(re-rendering)에 대해 개발자에게 보다 큰 제어를 제공하여 렌더링 수행에 도움을 줄 수 있다.
기본적인 레벨에서, 사용자는 DrawingVisual과 매우 유사한 RetainedVisual을 생성하고 사용할 수 있다; 즉, 사용자는 RenderOpen을 호출하고 DrawingContext를 얻을 수 있다. 대안적으로, 사용자는 RetainedVisual 상에 IRetainedVisual 인터페이스를 구현할 수 있다. 그렇게 함으로써, 사용자는, 그래픽 시스템은 IRetainedVisual.Render 호출에서 렌더링될 컨텐트에 대해, RenderBounds 속성에서 설정된 값을 바운드(bounds)로 사용할 것이라는 것을 보증한다.
장면을 렌더링할 때, 그래픽 시스템은 임의의 자식 비주얼을 검사할 것이다. RenderBounds 속성 값이, 특정 Visual의 컨텐트가 장면을 렌더링하는데 필요할 것이라는 것을 나타내면, 시스템은 IRetainedVisual.Render를 호출하여 Visual의 컨텐트를 채우고, 메모리에 이미 존재하는 임의의 컨텐트를 교체할 것이다. 또한, 애플리케이션이 InvalidateVisual을 직접 호출하여 Visual로부터 컨텐트를 플러싱 (flushing)할 것이다. 애플리케이션이 RetainedVisual 상에 IRetainedRender를 구현하지 않는다면, InvalidateVisual에 대한 임의의 호출은 예외 상황(exception)을 발생시킬 것이다.
다음의 코드는 RetainedVisual 상에 IRetainedRender를 구현하는 클래스를 인스턴스화하고, 그것에 그려 넣는다.
Figure 112005025670481-PCT00010
본 발명의 그래픽 시스템의 그 밖의 것과 같이, Visual API는 관리 API(managed API)이고, 강한 자료형(strong typing)과 가비지 수집(garbage collection)을 포함한 관리 코드(managed code)의 전형적인 특징을 사용한다. 또 한, 렌더링을 위한 하드웨어 가속화 능력도 이용한다. 기존의 비관리 애플리케이션들(unmanaged applications)로 작업하는 개발자들의 편의를 도모하기 위해, Visual API는 본 그래픽 시스템과 Microsoft Windows
Figure 112005025670481-PCT00011
Graphic Device Interface (GDI) 기반 렌더링 서비스들 간의 제한된 상호운용성(interoperability)을 제공한다.
이러한 상호운용성을 통해, 개발자는 HwndVisual 오브젝트를 사용하여 Visual 인식 애플리케이션에서 GDI 기반 윈도우를 호스트하고 본 발명의 드로잉과 렌더링에 기초한 씨밍(theming) 및 컨트롤을 작성하지만, 여전히 레거시 GDI 애플리케이션에서 작동하며, GDI HWND 기반 애플리케이션을 수정하여 하드웨어 가속화 및 컬러 모델을 포함하는 새로운 렌더링 특징을 이용한다.
HwndVisual은 Visual 인식 애플리케이션 내의 Win32 컨텐트의 호스팅을 가능하게 한다. 도 5에서 도시한 바와 같이, HwndVisual은 ContainerVisual로부터 계승한다. 주의할 점은, 동일한 HwndVisual 내에 GDI와 새로운 드로잉 모델을 혼합하는 것은 불가능하다는 것이다. 대신에, 이러한 비주얼은 제한된 범위의 레거시 컨트롤에 대해 더 유용할 수 있다. 다음의 예는 HwndVisual 내에 컨트롤을 생성하고 이를 비주얼 트리에 추가하는 것을 나타낸다.
Figure 112005025670481-PCT00012
Figure 112005025670481-PCT00013
다른 오브젝트에 대해서는, Visual 내에 일단 호스트된 컨트롤에 대해 변환및 다른 속성 변경을 적용할 수 있다.
Figure 112005025670481-PCT00014
도 3에서 도시된 바와 같이, 최상위 레벨(즉 루트)의 Visual(302)은 Visual 관리자 오브젝트(304)에 접속되며, 이것은 또한 윈도우(HWnd)(306), 또는 프로그램 코드에 대해 그래픽 데이터가 출력되는 유사한 유닛과 (예를 들면, 핸들(handle)를 통해) 관계를 갖는다. VisualManager(304)는 그 윈도우(306)에의 최상위 레벨 비주얼 (및 그 Visual의 임의의 자식을)의 드로잉을 관리한다. 도 6은 본 명세서에서 기술되는 그래픽 시스템의 오브젝트 모델에서의 오브젝트 세트(600) 중 하나로서 VisualManager를 나타낸다.
드로잉을 위해, Visual 관리자(304)는 디스패쳐(dispatcher)(308)에 의해 스케줄링된 바 대로 장면 그래프를 처리하고(예를 들어, 트래버스(traverse) 또는 전송함), 앞서 언급한 미국 특허 출원에 일반적으로 기술된 바와 같이, 대응 윈도우(306)에 대한 하위 레벨 컴포넌트(218)(도 2)에 그래픽 명령어 및 다른 데이터를 제공한다. 장면 그래프 처리는 보통 하위 레벨의 컴포넌트(218) 및/또는 그래픽 서브시스템(222)의 리프레시 속도보다 상대적으로 느린 속도로 디스패쳐(308)에 의해 스케줄링될 것이다.
도 3은 최상위 레벨(루트)의 Visual(302) 밑에 계층 구조적으로 배열된 다수의 자식 Visual(310-314)를 나타내며, 그들 중 일부는, 예를 들어 명령어 리스트 및 다른 Visual들을 포함하는 각각의 관련 명령어 리스트들(318,319)과 함께 드로 잉 컨텍스트(316, 317)(그들의 임시 특성을 나타내기 위해 점선 박스로 도시됨)를 통해 실장된 것으로 도시된다. Visual들은 다른 속성 정보를 포함할 수도 있다. 일반적으로, 도 5에서 도시된 바와 같이, 기본 비주얼 클래스에 대한 대부분의 액세스는 IVisual 인터페이스를 통해 발생하고, Visual은 DependencyObject에서 파생된다. 다른 드로잉 프리미티브 중, 명령어 리스트는 ImageData에 대한 참조를 포함할 수 있다. 이 후, 그 ImageData는 드로잉 컨텍스트를 제거하거나 SurfaceVisualRenderer(대안적으로 ImageDataVisualRenderer라고 함)를 가짐으로써 직접 변경되거나 갱신될 수 있다.
Visual들은 클립(clip), 불투명도(opacity) 및 설정될 수 있거나 및/또는 get 메소드를 통해 판독될 수 있는 가능한 다른 속성들을 제공함으로써 서비스를 제공한다. 또한, 비주얼은 히트 테스트에 참여하는 방법을 제어하는 플래그들을 갖는다. Show 속성은 비주얼을 보여주거나/숨기는데 사용되는데, 예를 들면, 거짓(false)일 경우, 비주얼은 보이지 않고, 그렇지 않으면 비주얼은 보일 것이다. 더우기, (Visual API 계층에서의 Visual이든, 엘리먼트 계층에서의 엘리먼트가든) 이들 오브젝트들은 계층 구조적으로 존재한다. 좌표계 시스템은 이러한 계층 구조를 통해 아래로 계승된다. 이러한 방식으로, 부모는 렌더링 패스를 수정하고, 그 부모의 자식들에게 적용되는 좌표 변환을 추진한다.
비주얼에 대한 변환은 그 비주얼과 관련된다. 즉, 부모의 IVisual 인터페이스 상의 [Get|Set]ChildTransform을 통해 설정된다.
주의할 점은, 비트맵에서와 같이, 좌표 변환은 모든 것에 일률적인 방식으로 적용될 수 있다는 것이다. 유의할 점은, 이는 변환들이 비트맵에 항상 적용된다는 것을 의미하는 것은 아니며, 렌더링되는 것이 변환에 의해 동등하게 영향을 받는다는 것을 의미한다는 것이다. 예로서, 사용자가 1인치 넓이의 둥근 팬으로 원을 그린 후 그 원에 대해 X 방향의 스케일 2를 적용하면, 팬은 좌우로 2인치 넓이가 될 것이고 상부와 하부에서는 단지 1인치 넓이가 될 것이다. 이것은 때때로 (형상에만 영향을 끼치는 지오메트리 또는 골격(skeleton) 스케일과는 대조적으로) 합성(compositing) 또는 비트맵 변환이라 부른다. 도 8은, 스케일링 변환을 나타내는 도면으로, 좌측에는 변환되지 않은 이미지(800)가 도시되고, 우측에는 비균일(non-uniform) 스케일로 변환된 이미지(802)가 도시되어 있다. 도 9는 스케일링 변환을 나타내는 도면으로, 좌측에는 변환되지 않은 이미지(800)가 도시되고, 우측에는 지오메트리 스케일링으로 변환된 이미지(904)를 나타내고 있다.
비주얼의 좌표 변환에 대하여, TransformToDescendant는 포인트를 기준 비주얼(reference visual)로부터 후손 비주얼(descendant visual)로 변환한다. 이 포인트는, 기준 비주얼의 후-변환(post-transformation) 좌표 공간으로부터 후손 비주얼의 후-변환 좌표 공간으로 변환된다. TransformFromDescendant는 포인트를 부모 체인 위의 후손 비주얼로부터 기준 비주얼로 변환한다. 이 포인트는 후손 비주얼의 후-변환 좌표 공간으로부터 기준 비주얼의 후-변환 좌표 공간으로 변환된다. 사용자는 후손 및 임의의 자의적인 비주얼 안팎으로 Matrix를 획득할 수 있다. Visual의 컨텐트의 바운딩 박스(bounding box)를 결정하는데 사용될 수 있는 2개의 속성, 즉 후손의 바운딩 박스인 DescendantBounds 및 컨텐트의 바운드인 ContentBounds를 결정하는데 사용될 수 있는 2개의 속성이 이용가능하다. Union을 이들에 적용함으로써 전체 바운드가 제공된다.
클립(clip) 속성은 비주얼의 클립핑(clipping) 영역을 설정(및 획득)한다. 임의의 Geometry(geometry 클래스는 도 10에 나타냄)는 클립핑 영역으로서 사용될 수 있으며, 클립핑 영역은 후-변환 좌표 공간에 적용된다. 일 구현예에서, 클립핑 영역에 대한 디폴트 설정은 널(null), 즉 비클립핑(non-clipping)이며, 이는 (-
Figure 112005025670481-PCT00015
, -
Figure 112005025670481-PCT00016
)으로부터 (+
Figure 112005025670481-PCT00017
, +
Figure 112005025670481-PCT00018
)까지의 무한대의 대형 클립핑 사각형으로 인식될 수 있다.
Opacity 속성은, 비주얼의 불투명도 값을 획득/설정하여, 불투명도 값 및 선택된 블렌딩 모드(blending mode)에 기초하여 비주얼의 컨텐트가 드로잉 표면 상에서 블렌딩된다. BlendMode 속성은 사용되는 블렌딩 모드를 설정(또는 취득)하는데 사용될 수 있다. 예를 들어, 선형 알파 블렌딩이 모드, 예컨대 컬러 = (알파 * 전경 컬러(foreground color) + (1.0 - 알파) * 배경 컬러)로서 설정되면, 불투명도(알파) 값은 0.0 내지 1.0 사이에서 설정될 수 있다. 특별한 효과 속성과 같은 다른 서비스(예컨대, 블러(blur), 단색 등)은 비주얼 내에 포함될 수 있다.
(변환, 불투명도, 및 클립을 포함하는) 다양한 서비스들이 드로잉 컨텍스트에 푸시되고 팝(pop)될 것이고, 각 푸시 호출에 대해 적절한 팝 호출이 있는 한, 푸시/팝 동작들은 중첩될 수 있다.
PushTransform 메소드는 변환을 푸시한다. 후속 드로잉 동작들은 푸시된 변환에 대해 실행된다. 팝 호출은 매칭되는 PushTransform 호출에 의해 푸시된 변환을 팝한다:
void PushTransform(Transform transform);
void PushTransform(Matrix matrix);
void Pop ( );.
마찬가지로, PushOpacity 메소드는 불투명도 값을 푸시한다. 후속 드로잉 동작은 명시된 불투명도 값으로 임시 표면 상에 렌더링된 후에 장면으로 합성된다. Pop( )은 매칭되는 PushOpacity 호출에 의해 푸시된 불투명도를 팝(pop)한다:
void PushOpacity(float opacity);
void PushOpacity(FloatAnimation opacity);
void Pop( );.
PushClip 메소드는 클립핑 지오메트리(clipping geometry)를 푸시한다. 후속 드로잉 동작들은 지오메트리에 대해 클립핑된다. 클립핑은 후-변환 공간에 적용된다. Pop( )은 매칭 PushClip 호출에 의해 푸시된 클립핑 영역을 팝(pop)한다:
void PushClip(Geometry clip);
void Pop();.
주의할 점은, 팝 동작들이 푸시와 매칭되는 한, 푸시 동작들은 임의적으로 중첩될 수 있다. 예를 들어, 다음은 유효하다:
Figure 112005025670481-PCT00019
ProxyVisual은, 예컨대 컨테이너 비주얼 아래의 장면 그래프에 한 번 이상 추가될 수 있는비주얼이다. ProxyVisual에 의해 참조되는 임의의 비주얼이 루트로부터 다중 경로에 의해 도달될 수 있기 때문에, 판독 서비스(TransformToDescendant, TransformFromDescendant 및 HitTest)는 ProxyVisual을 통해 수행되지 않는다. 본질적으로, 임의의 비주얼로부터 비주얼 트리의 루트까지 하나의 정규 경로(canonical path)가 존재하고 그 경로는 임의의 ProxyVisuals을 포함하지 않는다.
도 4는, ContainerVisual 및 DrawingVisual (등등)이 장면 그래프에서 관련되고 (예를 들어, 대응하는 드로잉 컨텍스트들 내에) Instruction Lists의 형태로 관련 데이터를 갖는 예시적인 장면 그래프(400)를 나타낸다. ContainerVisual은 Visuals을 위한 컨테이너이고, ContainerVisuals은 서로 중첩될 수 있다. ContainerVisual의 자식들은 ContainerVisual이 구현하는 IVisual 인터페이스 상의 메소드들을 통해 조작될 수 있다. VisualCollection 내의 Visuals의 순서는 Visuals가 렌더링되는 순서를 결정하는데, Visuals가 뒤에서 앞의 (페인팅 순서로), 최저 인덱스로부터 최고 인덱스로 렌더링된다.
상술한 바와 같이, 비주얼들은 Geometry, ImageSource 및 MediaData를 포함하는, 다양한 드로잉 프리미티브로 그들의 드로잉 컨텍스트들을 실장(populating)함으로써 그려질 수 있다. 더 나아가, 이러한 전체 스택을 통해 공유되는 클래스들과 자원들 세트가 존재한다. 이것은 Pens, Brushes, Geometry, Transforms 및 Effects를 포함한다. DrawingContext 추상 클래스는 DrawingVisual, ValidtionVisual, ImageData 등을 실장하는데 사용될 수 있는 드로잉 동작 세트를 노출시킨다. 바꾸어 말하면, 드로잉 컨텍스트 추상 클래스는 드로잉 동작 세트를 노출시키며, 각 드로잉 동작에 대해서는 두가지 메소드들이 존재하는데, 하나는 인수(argument)로서 상수를 취하는 것이고, 다른 하나는 인수로서 애니메이터(animator)를 취하는 것이다.
Geometry는 스트로크(stroke)나 채움(fill) 없이, 벡터 그래픽 골격을 정의하는 클래스의 한 유형(도 10)이다. 각 지오메트리 오브젝트는 단순 형태(LineGeometry, EllipseGeometry, RectangleGeometry), 복합적인 단일 형태(PathGeometry) 또는 지정된 결합 동작(예를 들어, 통합, 교차 등)을 갖는 GeometryCollection와 같은 형상들의 리스트이다. 이러한 오브젝트들은 도 10에 나타난 바와 같이 클래스 계층 구조를 형성한다.
도 11에 도시된 바와 같이, PathGeometry는 Figure 오브젝트의 컬렉션이다. 또한, Figure 오브젝트의 각각은 실질적으로 그림의 형상을 정의하는 하나 이상의 Segment 오브젝트로 구성된다. Figure는 세그먼트 컬렉션을 정의하는 Geometry의 서브섹션(sub-section)이다. 이러한 세그먼트 컬렉션은 2차원 Segment 오브젝트들 의 단일 연결 시리즈(single connected series)이다. Figure는 정의된 영역을 갖는 폐쇄된 형상 또는 닫힌 영역이 없는 곡선을 정의하는 Segment들의 연결 시리즈일 수 있다.
도 12에 도시된 바와 같이, 지오메트리(예를 들어, 사각형)가 그려지면, 이하에 설명되는 바와 같이 브러시(brush) 또는 펜(pen)이 지정될 수 있다. 또한, 펜 오브젝트는 브러시 오브젝트도 갖는다. 브러시 오브젝트는 평면을 그래픽적으로 채우는 방법을 정의하고, 브러시 오브젝트들의 클래스 계층 구조가 존재한다. 이는, 사각형 및 브러시 명령어들 및 파라미터들을 포함하는 비주얼이 처리될 때 결과로서 생성되는 채워진 사각형(1202)으로 도 12에 도시되어 있다. Pen 오브젝트는 이하에서 설명된 바와 같이, Width, LineJoin, LineCap, MiterLimit, DashArray 및 DashOffset에 대한 속성들과 함께 Brush 상에 유지된다. 또한, 이하에서 설명하는 바와 같이, (계조 및 9 그리드와 같은) 소정 유형의 브러시는 자신의 크기를 조절한다. 사용되는 경우, 이들 브러시들의 크기는 바운딩 박스(bounding box)로부터 얻어지는데, 예를 들어 Brush에 대한 GradientUnit/DestinationUnits이 RelativeToBoundingBox로 설정되는 경우, 그려지는 프리미티브의 바운딩 박스가 사용된다. 그들 속성이 Absolute로 설정되면, 좌표 공간이 사용된다.
본 발명의 그래픽 오브젝트 모델은, 일반적으로 화소들로 평면을 덮는 개념과 관련된 Brush 오브젝트 모델을 포함한다. 브러시의 유형들의 예들은 도 13의 계층 구조에 도시되어 있으며, Brush 기본 클래스 아래에, Gradient Brush, NineGridBrush, SolidColorBrush 및 TileBrush을 포함한다. GradientBrush는 LinearGradient 및 RadialGradient 오브젝트를 포함한다. DrawingBrush 및 ImageBrush는 TileBrush로부터 파생된다. 클래스의 대안적인 배치가 가능한데, 예를 들어 TileBrush에서 파생되는 것이 ImageBrush, VisualBrush, VideoBrush, NineGridBrush 및 Drawing Brush가 될 수 있다. 주의할 점은, Brush 오브젝트는, 사용되는 경우, 자신이 어떻게 좌표 시스템과 관계되며, 그리고/또는 어떻게 자신들이 사용되는 형상의 바운딩 박스와 관계되는지를 인식할 수 있다는 것이다. 일반적으로, 크기 등의 정보는 브러시가 그려지는 오브젝트로부터 유추될 수 있다. 특히, 많은 브러시 유형은 그들의 파라미터 중 일부를 지정하기 위해 좌표계를 사용한다. 이 좌표계는 브러시가 적용되는 형상의 단순한 바운딩 박스에 관한 것으로 정의될 수 있으며, 또는 브러시가 사용되는 때에 활성화되는 좌표 공간에 관한 것일 수 있다. 이들은 각각 RelativeToBoundingBox 모드 및 Absolute 모드로 알려져 있다.
SolidColorBrush 오브젝트는 식별된 평면을 솔리드 컬러(sold color)로 채운다. 컬러의 알파 성분이 존재하면, 그것은 Brush 기본 클래스의 대응하는 불투명도 속성과 승산되는 방식으로 결합된다. 다음은 SolidColorBrush 오브젝트의 예를 나타낸다:
Figure 112005025670481-PCT00020
Figure 112005025670481-PCT00021
GradientBrush 오브젝트, 또는 단순히 계조는 계조 채움(gradient fill)을 제공하고, 소정의 급수(progression)를 따라 컬러들을 지정하는 계조 스톱(gradient stop) 세트를 지정함으로써 그려진다. 계조는 감마 2.2 RGB 컬러 공간의 계조 스톱들 사이에서 선형 보간을 수행함으로써 그려지는데, 다른 감마 또는 다른 컬러 공간(HSB, CMYK 등)을 통한 보간도 가능한 대안이 될 수 있다. 2가지 유형의 계조 오브젝트는 선형 및 래디얼(radial) 계조를 포함한다.
일반적으로, 계조는 계조 스톱의 리스트로 구성된다. 이들 계조 스톱 각각은 (알파값이 포함된) 컬러와 오프셋을 포함한다. 계조 스톱들이 지정되지 않으면, 지정된 브러시가 전혀 없는 것처럼, 브러시는 솔리드 투명 블랙으로 그려진다. 하나의 계조 스톱만이 지정되면, 브러시는 솔리드 컬러로서 지정된 하나의 컬러로 그려진다. 다른 자원 클래스들처럼, 계조 스톱 클래스(이하의 표의 예)는 "Changeable Class and Pattern to Provide Selective Mutability In Computer Programming Environments"라는 제목의 미국 특허 출원에 설명되는 바와 같이, 가변 클래스로부터 파생되어 선택적으로 변경될 수 있다.
계조는 계조 스톱 세트를 지정함으로써 그려진다. 이러한 계조 스톱은 소정의 급수에 따라 컬러를 지정한다. 현재 지원되는 두 가지 유형의 계조, 즉 선형 및 래디얼 계조가 존재한다. 계조는 지정된 컬러 공간의 계조 스톱들 사이에서 보간을 행함으로써 그려진다.
계조는 계조 스톱들의 리스트로 이루어진다. 이러한 계조 스톱 각각은 (알파값을 포함하는) 컬러 및 오프셋을 포함한다. 지정된 계조 스톱이 없다면, 브러시는 (마치 지정된 브러시가 없는 것처럼) 투명하게 그려진다. 단지 하나의 계조 스톱만 지정되면, 브러시는 솔리드 컬러로서 지정된 하나의 컬러로 그려진다. 0에서 1의 범위(0.0...1.0)의 오프셋을 갖는 임의의 계조 스톱은, 범위 (-
Figure 112005025670481-PCT00022
...0.01] 내의 가장 큰 스톱, 범위 [1.0...+
Figure 112005025670481-PCT00023
) 내의 가장 작은 스톱으로 고려된다. 고려된 스톱 세트가 0에서 1까지의 범위 바깥의 스톱을 포함한다면, 이 스톱에서 발생할 보간된 컬러를 나타내는 0 (및/또는 1)에서 묵시적 스톱이 도출된다. 또한, 두개 이상의 스톱이 동일한 오프셋에 설정된다면, 그 오프셋에서 (보간되기 보다는) 하드 천이(hard transition)가 발생한다. 스톱들이 부가되는 순서는 이 오프셋에서의 행위를 결정하는데, 추가되는 첫번째 스톱은 그 오프셋 이전의 유효 컬러이고, 설정되는 마지막 스톱은 이 스톱 이후의 유효 컬러이며, 이 오프셋에서의 추가적인 스톱은 무시된다.
이 클래스는 다른 자원 클래스와 같은 Changeable이다:
Figure 112005025670481-PCT00024
Figure 112005025670481-PCT00025
SolidColorBrush와 같이, 이것은 애니메이션 컬렉션들 내에 내포된 Changeables를 갖는다.
GradientSpreadMethod 열거형(enum)은 계조가 지정된 벡터 또는 공간의 외부에서 어떻게 그려져야 하는지를 명시한다. 종단 컬러(처음과 마지막)가 잔여 공간을 채우는데 사용되는 Pad, 스톱들이 역순으로 반복적으로 재생되어 공간을 채우는 Reflect 및 공간이 채워질 때까지 스톱들이 순서대로 반복되는 Repeat를 포함하여, 세 개의 가능한 값이 존재한다. 이 타입의 속성들에 대한 디폴트 값은 Pad이다:
Figure 112005025670481-PCT00026
도 14 및 도 15는 (컬러가 아닌 그레이스케일(grayscale)에서의) 몇몇 GradientSpreadMethod 예들을 제공한다. 각각의 형상은 백색으로부터 회색으로 진행하는 선형 계조를 갖는다. 솔리드 선은 계조 벡터를 나타낸다.
일반적으로, LinearGradientBrush는 선형 계조로 영역을 채우는데 사용된다. 선형 계조는 선을 따라 계조를 정의한다. 선의 종점은 선형 계조의 StartPoint 및 EndPoint 속성들에 의해 정의된다. 디폴트로, 선형 계조의 StartPoint는 채워지는 영역의 상부 좌측 코너인 (0,0)이고 EndPoint는 채워지는 영역의 하부 우측 코너인 (1,1)이다. 도 15에서 도시되어 있는 바와 같이, 디폴트 값을 사용하여, 결과적인 계조 내의 컬러는 대각선 경로를 따라 보간된다. 계조의 시작점과 끝점으로부터 형성된 검은 선은 계조의 보간 경로를 강조하기 위해 본 명세서에 추가되었다.
ColorInterpolationMode 열거형은 계조 내의 컬러들에 대한 보간 모드를 정의한다. 두 가지 옵션은 PhysicallyLinearGamma10과 PerceptuallyLinearGamma22 이다.
Figure 112005025670481-PCT00027
이것은 추상 기본 클래스이다.
Figure 112005025670481-PCT00028
Figure 112005025670481-PCT00029
앞서 Changeables 섹션에서 기술된 바와 같이, GradientBrush는 Changeables에 대해 복합형이다. 왜냐하면, 그의 GradientStops 속성 자체가 Changeables를 보유하기 때문이다. 이는, GradientBrush는 보호(protected) 메소드들 MakeUnchangeableCore(), 및 PropagateEventHandler() 뿐만 아니라, Changeable 서브클래스들이 구현하는 ColorCore()도 구현할 필요가 있다는 것을 의미한다. 예를 들면, 컬렉션을 구성하는 GradientStops의 무효 조합들이 존재한다면 ValidateObjectState()를 구현하는 것을 선택할 수도 있다.
LinearGradient는 벡터를 따라 선형 계조 브러시를 지정한다. 개별적인 스톱은 해당 벡터를 따라 컬러 스톱들을 지정한다.
Figure 112005025670481-PCT00030
Figure 112005025670481-PCT00031
Figure 112005025670481-PCT00032
LinearGradient에 대한 마크업은, 오프셋 0과 1에서 두 개의 컬러 스톱을 갖는 LinearGradient를 지정할 수 있도록 한다. "LinearGradient" 버전이 사용된다면, 시작점과 종료점이 각각 지정된다. "HorizontalGradient" 가 사용된다면, 시작점은 0,0으로 설정되고 종료점은 1,0로 설정된다. "VerticalGradient"가 사용된다면, 시작점은 0,0으로 설정되고 종료점은 0,1로 설정된다. 이러한 경우들에서, RelativeToBoundingBox인 디폴트 MappingMode가 사용된다.
RadialGradient는 프로그래밍 모델에서의 선형 계조와 유사하다. 그러나, 선형 계조는 계조 벡터를 정의하기 위한 시작점과 끝점을 갖지만, 래디얼 계조는 계조 행위를 정의하기 위한 초점과 함께 원을 갖는다. 원은 계조의 끝점을 정의한다. 즉, 1.0에서의 계조 스톱은 원의 원주의 컬러를 정의한다. 초점은 계조의 중심을 정의한다. 0.0에서의 계조 스톱은 초점에서의 컬러를 정의한다. 도 16은 백색으로부터 회색으로 진행하는 (그레이스케일(grayscale)에서의) RadialGradient를 나타낸다. 바깥 원은 계조 원을 나타내고, 솔리드 점은 초점을 나타낸다. 이러한 계조는 Pad로 설정된 SpreadMethod를 갖는다.
Figure 112005025670481-PCT00033
Figure 112005025670481-PCT00034
RadialGradient에 대한 마크업은, 각각 오프셋 0과 1에서 두 개의 컬러 스톱들을 갖는 RadialGradient를 지정할 수 있도록 한다. 디폴트 반지름은 0.5이며 RelativeToBoundingBox인 디폴트 MappingMode가 사용된다.
Figure 112005025670481-PCT00035
TileBrush는 타일 및 그 타일이 영역을 채워야 하는 수단을 기술한 논리를 포함하는 추상 기본 클래스이다. TileBrush의 서브클래스는 컨텐트를 포함하고, 논리적으로 무한 평면을 채우는 방식을 정의한다.
Stretch 열거형은 ViewBox(소스 좌표 공간)가 ViewPort(목표 좌표 공간)에 매핑되는 방법을 기술하는데 사용된다. 이것은 TileBrush에서 사용된다:
Figure 112005025670481-PCT00036
도 18은 스트레치(stretch) 예들을 제공한다. 이러한 예들에서, 컨텐츠는 상부/좌측에 정렬된다.
TileMode 열거형은 Tiles에 의해 공간이 채워지는지 여부 및 그 방법을 기술 하는데 사용된다. TileBrush는 (ViewPort에 의해 지정되는) 기본 Tile이 존재하는 장소를 정의한다. 나머지 공간은 TileMode 값들에 기초하여 채워진다.
Figure 112005025670481-PCT00037
도 19는 TileMode 예들을 제공한다. 각 예에서 상부 가장 좌측 타일은 기본 타일이다. 이러한 예들은 None, Tile, FlipX, FlipY 및 FlipXY를 나타낸다.
VerticalAlignment 열거형은, 컨텐트가 컨테이너 내부에서 수직으로 배치되는 방법을 기술하는데 사용된다.
Figure 112005025670481-PCT00038
HorizontalAlignment 열거형은 컨텐트가 컨테이너 내에서 수평으로 배치되는 방법을 기술하는데 사용된다.
Figure 112005025670481-PCT00039
TileBrush 속성들은 무한 평면의 사각형 부분을 타일(ViewBox)로 선택하고, 채워지는 영역 내의 기본 Tile이 될 목표 사각형(ViewPort)을 기술한다. 나머지 목표 영역은, 잔여 공간을 채우기 위해 원래 타일이 복제되는지 여부 및 그 방법을 제어하는 TileMode 속성에 기초하여 채워질 것이다.
Figure 112005025670481-PCT00040
Figure 112005025670481-PCT00041
TileBrush의 컨텐트는 고유의 바운드를 가지지 않고, 무한 평면을 효과적으로 기술한다. 이러한 컨텐트는 자신의 좌표 공간 내에 존재하고, TileBrush에 의해 채워지는 공간은, 적용되는 때의 로컬 좌표 공간이다. 컨텐트 공간은 ViewBox, ViewPort, Alignment 및 Stretch 속성들에 기초하여 로컬 공간으로 매핑된다. ViewBox는 컨텐트 공간에서 지정되고, 이 사각형은 ViewPort 사각형으로 매핑된다.
ViewPort는, 이러한 Brush에 대한 기본 타일을 생성하면서, 최종적으로 컨텐츠가 그려질 위치를 정의한다. ViewPortUnits의 값이 Absolute라면, ViewPort의 값은 적용 시의 로컬 공간에 있는 것으로 간주된다. 대신, ViewPortUnits의 값이 RelativeToBoundingBox라면, ViewPort의 값은, 0,0이 페인팅되는 오브젝트의 바운딩 박스의 상부/좌측 코너이고 1,1이 동일한 박스의 하부/우측 코너인 좌표 공간 내에 있는 것으로 간주된다. 예를 들면, 100,100에서 200,200까지 그려지고 채워진 RectangleGeometry를 고려해보자. ViewPortUnits가 Absolute라면, (100,100,100,100)의 ViewPort는 전체 컨텐트 영역을 기술할 것이다. ViewPortUnits가 RelativeToBoundingBox라면, (0,0,1,1)의 ViewPort가 전체 컨텐트 영역을 기술할 것이다. ViewPort의 Size가 비어 있고 Stretch가 None이 아니라면, 이러한 브러시는 아무 것도 렌더링하지 않는다.
ViewBox는 컨텐트 공간 내에 규정된다. 이 사각형은, Alignment 속성과 Stretch 속성에 의해 결정된 대로 ViewPort 내에 맞도록 변환된다. Stretch가 None이면, 어떠한 스케일링도 그 컨텐츠에 적용되지 않는다. Stretch가 Fill이면, ViewBox는 X와 Y에 있어 독립적으로 ViewPort와 동일한 크기로 스케일링된다. Stretch가 Uniform 또는 UniformToFill이면, 논리는 유사하지만 X와 Y차원이 균일하게 스케일링되어, 컨텐츠의 종횡비가 보존된다. Stretch가 Uniform이면, ViewBox는 ViewPort의 크기와 동일한 보다 억제된 크기를 갖도록 스케일링된다. Stretch가 UniformToFill이면, ViewBox는 ViewPort의 크기와 동일한 보다 덜 억제된 크기를 갖도록 스케일링된다. 이에 대한 다른 방식은 Uniform과 UniformToFill 모두 종횡비를 보존한다는 것이지만, Uniform은 (ViewPort 일부를 잠재적으로 ViewBox에 의해 커버되지 않도록 하면서) 전체 ViewBox가 ViewPort 내에 있음을 보장하고, UniformToFill은 (잠재적으로 ViewBox의 일부를 ViewPort 외부에 있도록 하면서) 전체 Viewport가 ViewBox에 의해 채워지는 것을 보장한다. ViewBox의 영역이 비어 있으면, 어떠한 Stretch도 적용되지 않을 것이다. 정렬은 여전히 발생하고, 이것은 "포인트" ViewBox를 배치할 것이다.
일단, (ViewPortUnits에 기초하여) ViewPort가 결정되고 (Stretch에 기초하여) ViewBox의 목표 크기가 결정되면, ViewBox는 Viewport 내에 위치될 필요가 있다. ViewBox가 ViewPort와 같은 크기라면(Stretch가 Fill이거나 또는 나머지 세 개의 Stretch 값들 중 하나라면), ViewBox는 ViewPort와 동일하도록 Origin에 위치된다. 그렇지 않으면, HorizontalAlignment와 VerticalAlignment가 고려된다. 이들 속성들에 기초하여, ViewBox는 X와 Y 차원으로 정렬된다. HorizontalAlignment가 Left이면, ViewBox의 좌측 에지는 ViewPort의 Left 에지에 위치될 것이다. HorizontalAlignment가 Center이면, ViewBox의 중심은 ViewPort의 중심에 위치될 것이고, Right이면, 우측 에지들이 만날 것이다. 이 프로세스는 Y 차원에 대하여 반복된다.
ViewBox가 Empty이면 설정되지 않은 것으로 간주된다. 설정되지 않는다면, ContentUnit가 고려된다. ContentUnits가 Absolute이면, 어떠한 스케일링 또는 오프셋도 발생하지 않으며, 컨텐츠는 아무런 변환없이 ViewPort에 그려진다. ContentUnits가 RelativeToBoudingBox이면, 컨텐트 원점은 ViewPort Origin에 정렬되고, 그 컨텐츠는 오브젝트의 바운딩 박스의 폭과 높이에 의해 스케일링된다.
TileBrush로 공간을 채우는 경우, 컨텐츠는 상기와 같이 ViewPort로 매핑되고 ViewPort에 클립핑된다. 이는 채움을 위한 기본 타일을 형성하며, 공간의 여백은 Brush의 TileMode에 기초하여 채워진다. 설정된 경우, Brush의 변환이 적용되는데, 이것은 다른 매핑, 스케일링, 오프셋 등의 이후에 발생한다.
VisualBrush는 Visual에 의해 지정되는 컨텐츠를 갖는 TileBrush이다. 이 Brush는 복합 패턴을 생성하는데 사용될 수 있으며, 또는 장면의 다른 부분들의 컨텐츠의 추가적인 사본들을 그리는데 사용될 수 있다.
Figure 112005025670481-PCT00042
ImageBrush는 ImageData에 의해 지정된 컨텐츠를 갖는 TileBrush이다. 이 Brush는 Image로 공간을 채우는데 사용될 수 있다.
Figure 112005025670481-PCT00043
VideoBrush는 VideoData에 의해 지정되는 컨텐츠를 갖는 TileBrush이다. 이러한 Brush는 Video로 공간을 채우는데 사용될 수 있다.
Figure 112005025670481-PCT00044
Figure 112005025670481-PCT00045
NineGridBrush는 항상 자신의 컨텐츠 이미지로 오브젝트 바운딩 박스를 채우는 Brush이고, 이미지 스트레치는 순전히 비주얼 스케일을 통해 달성되지는 않는다. Image 소스는 네 개의 경계에 의해 9개의 사각형으로 나누어진다(즉, NineGrid). 이들 9개의 영역 각각의 이미지의 컨텐츠는, 오브젝트 바운딩 박스를 채울 때까지 0, 1 또는 2 크기로 스케일링된다. 각 섹션이 스케일링되는 크기들은 다음의 다이어그램에서 볼 수 있는데, 도 17은, Top, Left, Bottom 및 Right 경계 에 의해 규정된 9개의 그리드를 도시하는 네가지 유형으로 제1 인스턴스(instance)(1702)에서 제2 인스턴스(1704)까지 확대되는 NineGrid의 개념을 나타낸다. 각 그리드 정사각형 내의 화살표들은 그 컨텐츠가 ViewPort 크기를 맞추도록 신장될 크기를 나타낸다.
앞서 그려진 9개의 그리드 영역 이외에, 선택적인 "10번째" 그리드가 존재한다. 이것은, ViewPort 내의 중심에 있고 스케일링되지 않은 추가적인 이미지 형태를 취한다. 이것은 버튼 등의 중심에 형상를 배치시키는데 사용될 수 있다. 이러한 "10번째 그리드"는 그리프(glyph)라 불리고, GlyphImageData 속성에 의해 노출된다.
Figure 112005025670481-PCT00046
Figure 112005025670481-PCT00047
주의할 점은, 경계 멤버들은 이미지 화소들 내의 이미지의 에지로부터 산입 된다는 것이다.
Pen은, Brush 및 공간/Geometry를 스트로크(stroke)하는 방법을 기술하는 다른 파라미터들을 취하는 오브젝트이다. 개념적으로, Pen은 Geometry로부터 스트로크 영역을 어떻게 생성하는지를 기술한다. 새 영역은 Geometry의 에지들, Pen의 Thickness, PenLineJoin, PenLineCap 등에 기초하여 생성된다. 일단 이 영역이 생성되면, 이것은 Brush로 채워진다.
Figure 112005025670481-PCT00048
Figure 112005025670481-PCT00049
PenLineCap은 스트로크된 선의 끝이 그려지는 방법을 결정한다.
Figure 112005025670481-PCT00050
Figure 112005025670481-PCT00051
PenDashCap은 대시(dash)되고 스트로크된 선의 각 대시의 끝부분들이 그려지는 방법을 결정한다.
Figure 112005025670481-PCT00052
PenLineJoin은 선을 스트로킹할때 조인트(joint)가 그려지는 방법을 결정한다.
Figure 112005025670481-PCT00053
Figure 112005025670481-PCT00054
DashArrays 클래스는 일반적이고 잘 알려진 대시 스타일에 대한 액세스를 제공하는 정적 속성들을 포함한다:
Figure 112005025670481-PCT00055
도 13에 도시된 또 하나의 브러시 오브젝트는 VisualBrush 오브젝트이다. VisualBrush는 그 컨텐츠가 Visual에 의해 지정되는 TileBrush이다. 이 Brush는 복합 패턴을 생성하는데 사용될 수 있으며, 또는 장면의 다른 부분들의 컨텐츠의 추가적인 사본들을 그리는데 사용될 수 있다.
Figure 112005025670481-PCT00056
개념적으로, VisualBrush는, 비주얼로 하여금 반복적인 타일(tile) 방식으로 채움으로서 그려지도록 하는 방식을 제공한다. 이것은, 사각형(1222)을 채우는 단일 원 형상(1220)을 지정하는 비주얼(및 임의의 자식 비주얼들)을 참조하는 비주얼 브러시에 의해 도 12에 도시되어 있다. 따라서, VisualBrush 오브젝트는, 해당 브러시가 그려지는 방법을 정의하기 위해 비주얼을 참조하는데, 이는 비주얼들에 대한 다중 용도의 한 유형을 나타낸다. 이러한 방식으로, 프로그램은 임의의 그래픽 "메타파일(metafile)"을 이용하여 브러시 또는 펜을 통해 영역을 채울 수 있다. 이것은 임의의 그래픽을 저장하고 사용하기 위한 압축된 형태이므로, 그래픽 자원의 기능을 한다.
일 구현예에서, VisualBrush의 컨텐츠는 고유(intrinsic) 바운드가 없으며, 무한 평면을 효과적으로 기술한다. 이들 컨텐츠는 자신의 좌표 공간에 존재하며, VisualBrush에 의해 채워지는 공간은 적용 시의 로컬 좌표 공간이다. 컨텐츠 공간 은 ViewBox, ViewPort, Alignment, 및 Stretch 특성에 기초하여 로컬 공간으로 매핑된다. ViewBox는 컨텐츠 공간 내에 지정되며, 이 사각형은 (Origin 및 Size 속성들에 의해 지정되는 바와 같이) ViewPort 사각형으로 매핑된다.
ViewPort는, 이러한 Brush에 대한 기본 타일을 생성하여, 컨텐츠가 최종적으로 그려지는 위치를 정의한다. DestinationUnit의 값이 UserSpaceOnUse이면, Origin 및 Size 속성이 적용 시의 로컬 공간 내에 있는 것으로 간주된다. 반면에, DestinationUnit의 값이 ObjectBoundingBox이면, Origin 및 Size는, 브러시되는 오브젝트의 바운딩 박스의 상부/좌측 코너가 0,0이며, 동일 박스의 하부/우측 코너가 1,1인 좌표 공간 내에 있는 것으로 간주된다. 예를 들면, 100,100에서 200,200까지 그려져 채워지는 RectangleGeometry를 고려하자. 이러한 예에서, DestinationUnit이 UserSpaceOnUse이면, 100,100의 Origin과 100,100의 Size가 전체 컨텐츠 영역을 기술한다. DestinationUnit이 ObjectBoundingBox이면, 0,0의 Origin과 1,1의 Size는 전체 컨텐트 영역을 기술한다. Size가 비어 있으면, 이러한 브러시는 아무 것도 렌더링하지 않는다.
ViewBox는 컨텐츠 공간 내에 규정된다. 이 사각형은 Alignment 속성과 Stretch 속성에 의해 결정된 대로 ViewPort 내에 맞도록 변환된다. 스트레치가 None이면, 어떠한 스케일링도 컨텐츠에 적용되지 않는다. 스트레치가 Fill이면, ViewBox는 X와 Y 모두 독립적으로 스케일되어 ViewPort와 동일한 크기가 된다. 스트레치가 Uniform 또는 UniformToFill이면, 논리는 유사하지만 X와 Y 차원이 균일하게 스케일링되어 컨텐츠의 종횡비가 보존된다. Stretch가 Uniform이면, ViewBox 는 ViewPort의 크기와 동일한 보다 억제된 차원를 갖도록 스케일링된다. Stretch가 UniformToFill이면, ViewBox는 ViewPort의 크기와 동일한 보다 덜 억제된 차원을 갖도록 스케일링된다. 즉, Uniform과 UniformToFill 모두 종횡비를 보존하지만, Uniform은 (ViewPort 일부를 잠재적으로 ViewBox에 의해 커버되지 않도록 하면서) 전체 ViewBox가 ViewPort 내에 있음을 보장하고, UniformToFill은 (잠재적으로 ViewBox의 일부를 ViewPort 외부에 있도록 하면서) 전체 ViewPort가 ViewBox에 의해 채워지는 것을 보장한다. ViewBox가 비어 있으면, 어떠한 스트레치도 적용되지 않는다. 주의할 점은, 정렬은 여전히 행해지며, 이는 "포인트" ViewBox를 배치할 것이라는 점이다.
도 18은, 스트레치가 "none"으로 설정되는 경우 타일(1800)을 포함하여, 다양한 스트레치 설정으로 렌더링된 그래픽의 단일 타일(1800)을 나타낸다. 타일(1802)은 스트레치가 "Uniform"으로 설정되는 경우를 나타내고, 타일(1804)은 스트레치가 "UniformToFill"로 설정되는 경우이며, 타일(1806)은 스트레치가 "Fill"로 설정되는 경우이다.
일단 ViewPort가 (DestinationUnit에 기초하여) 결정되고 ViewBox의 크기가 (스트레치에 기초하여) 결정되면, ViewBox는 ViewPort 내에 위치될 필요가 있다. ViewBox가 ViewPort와 동일한 크기이면(스트레치가 Fill이거나 또는 나머지 3개의 스트레치 값들 중의 하나인 경우), ViewBox는 ViewPort와 동일하도록 Origin에 위치된다. 그렇지 않으면, HorizontalAlignment와 VerticalAlignment가 고려된다. 이들 속성들에 기초하여, ViewBox는 X와 Y차원 모두로 정렬된다. HorizontalAlignment가 Left이면, ViewBox의 좌측 에지는 ViewPort의 Left 에지에 위치될 것이다. HorizontalAlignment가 Center이면, ViewBox의 중심은 ViewPort의 중심에 위치될 것이며, Right이면, 우측 에지들이 만날 것이다. 이 프로세스는 Y차원에 대하여 반복된다.
ViewBox가 (0,0,0,0)이면, 설정되지 않은 것으로 간주되고, 그에 따라 ContentUnits가 고려된다. ContentUnits가 UserSpaceOnUse이면, 어떠한 스케일링 또는 오프셋도 발생하지 않으며, 컨텐츠는 아무런 변환없이 ViewPort에 그려진다. ContentUnit이 ObjectBoudingBox이면, 컨텐츠 원점은 ViewPort Origin에 정렬되고 컨텐츠는 오브젝트의 바운딩 박스의 폭과 높이에 의해 스케일링된다.
VisualBrush로 공간을 채우는 경우, 컨텐츠는 상기와 같이 ViewPort로 매핑되고 ViewPort에 클립핑된다. 이는 채움을 위한 기본 타일을 형성하며, 나머지 공간은 Brush의 TileMode에 기초하여 채워진다. 최종적으로, 설정된 경우, Brush의 변환이 적용되는데, 이는 모든 다른 매핑, 스케일링, 오프셋 등의 이후에 발생한다.
TileMode 열거형은 Brush에 의해 공간이 채워질지의 여부 및 그 방법을 기술하는데 사용된다. 타일화(tiled)될 수 있는 Brush는 타일 사각형을 정의하며, 이 타일은 채워지는 공간 내에 기본 위치를 갖는다. 나머지 공간은 TileMode 값에 기초하여 채워진다. 도 19는 "None"(1900), "Tile"(1902), "FlipX"(1904), "FlipY"(1906) 및 "FlipXY"(1908)를 포함하여, 다양한 TileMode 설정을 갖는 예시적인 그래픽 표현을 제공한다. 다양한 예시적인 그래픽에서의 상부 가장 좌측의 타일은 기본 타일을 포함한다.
도 20은 VisualBrush의 타일들에 대해 정의되는 VisualBrush Grid를 나타낸다. 첫 번째 원은 단순 그리드이고, 두 번째는 x 방향으로 47의 Skew를 갖는 Transform을 갖는다. 도 21은 이것이 이미지로 채워지는 것을 나타낸다.
도 13으로 돌아가서, 이미지 브러시는 타일 브러시로부터 파생되고 따라서 타일화될 수 있다. NineGridBrush는 크기에 기초하여 이미지가 휘어진다는 점을 제외하고 ImageBrush와 유사하다. 본질적으로, NineGridBrush는 Stretch의 커스텀(custom) 형태로 간주될 수 있는데, 이미지의 소정의 부분은 스트레치되는 반면, 다른 부분(예를 들어, 경계)은 그렇지 않다. 따라서, ImageBrush에서의 이미지의 Size가 단순 스케일을 야기할 것인 반면, NineGridBrush는 원하는 크기까지의 비균일 스케일을 생성할 것이다. 스케일링되지 않은 영역들에 대한 유닛들은, 브러시가 적용되는 때의 사용자 유닛들이며, 이는 ContentUnit(NineGridBrush에 대해 존재하면)은 UserUnitOnUse로 설정되는 것을 의미한다. Brush의 Transform 속성은 효과적으로 사용될 수 있다. 유의할 점은, 경계 멤버는 이미지의 에지로부터 산입된다는 것이다.
앞서 일반적으로 설명한 바와 같이, 본 발명의 그래픽 오브젝트 모델은 Transform 오브젝트 모델을 포함하며, Transform 오브젝트 모델은 Transform 기본 클래스 하에서 도 7의 계층 구조에서 표현된 변환 유형들을 포함한다. 변환을 구성하는 이들 상이한 유형들의 컴포넌트들은 TransformList, TranslateTransform, RotateTransform, ScaleTransform, SkewTransform, 및 MatrixTransform을 포함할 수 있다. 개별적인 속성은 애니매이트될 수 있는데, 예를 들어, 프로그램 개발자는 RotateTransform의 Angle 속성을 애니메이트할 수 있다.
2D 계산을 위한 행렬들은 3X3 행렬로 표현된다. 필요한 변환을 위해서는, 완전한 3X3 행렬 대신에 단지 6개 값만이 필요하다. 이들은 다음과 같이 명명되고 정의된다.
Figure 112005025670481-PCT00057
행렬과 포인트를 승산하면, 해당 포인트를 새로운 좌표계에서 종전의 좌표계로 변환한다.
Figure 112005025670481-PCT00058
변환은 임의의 레벨로 중첩될 수 있다. 새 변환이 적용될 때마다 이는 현재의 변환 행렬에 대해 후 승산(post-multiplying)한 것과 동일하다.
Figure 112005025670481-PCT00059
API 내의 대부분의 장소는 Matrix를 직접적으로 취하지 않으나, 대신에 애니메이션을 지원하는 Transform 클래스를 사용한다.
Figure 112005025670481-PCT00060
Figure 112005025670481-PCT00061
Figure 112005025670481-PCT00062
결론
앞선 상세한 설명에서 알 수 있듯이, 장면 그래프와 인터페이스할 수 있는 능력을 프로그램 코드에 제공하는 시스템, 방법 및 오브젝트 모델이 제공된다. 이러한 시스템, 방법, 오브젝트 모델은 이용하기에 수월하면서도, 여전히 강력하고 유연성이 있으며, 확장가능성을 갖는다.
본 발명에 다양한 변형 및 대안적 구성이 이루어질 수 있으며, 소정의 설명된 실시예들은 도면에 도시되고 앞서 상세히 설명되었다. 그러나, 본 발명을 개시된 특정 형태들로 한정하려는 의도는 없으며, 반대로, 모든 변형, 대안적 구성, 및 본 발명의 사상 및 범주 내에 있는 등가물을 포함하고자 함을 이해하여야 한다.

Claims (64)

  1. 컴퓨팅 환경에서,
    오브젝트의 인터페이스를 통해 함수 호출(function call)을 수신하는 단계 - 오브젝트 모델의 상기 오브젝트는 장면 그래프(scene graph)와 연관됨 - ; 및
    상기 장면 그래프 내의 데이터가 수정되도록 함으로써 상기 함수 호출에 응답하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 장면 그래프 내의 데이터가 수정되도록 하는 상기 단계는, 비주얼 클래스(visual class)의 새로운 인스턴스(instance)를 초기화시키는 단계를 포함하는 방법.
  3. 제2항에 있어서,
    상기 장면 그래프 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 내의 비주얼 오브젝트와 변환(transform)을 연관시키는 코드를 호출하는 단계를 포함하는 방법.
  4. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 드로잉 비주얼(drawing visual)을 상기 장면 그래프에 배치하는 코드를 호출하는 단계를 포함하는 방법.
  5. 제4항에 있어서,
    드로잉 컨텍스트(drawing context)가 반환되도록 하는 단계를 더 포함하고,
    상기 드로잉 컨텍스트는 상기 드로잉 비주얼로 렌더링(rendering)하기 위한 메커니즘을 제공하는 방법.
  6. 제2항에 있어서,
    상기 장면 그래프 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 내의 비주얼 오브젝트와 브러시 데이터(brush data)를 연관시키는 코드를 호출하는 단계를 포함하는 방법.
  7. 제6항에 있어서,
    상기 브러시 데이터는 솔리드 컬러(solid color)에 대응하는 데이터를 수신하는 단계를 포함하는 방법.
  8. 제6항에 있어서,
    브러시 데이터를 수신하는 상기 단계는, 선형 계조 브러시(linear gradient brush)에 대응하는 데이터를 수신하는 단계를 포함하고,
    스톱 컬렉션(stop collection)은 적어도 하나의 스톱을 포함하는 방법.
  9. 제6항에 있어서,
    브러시 데이터를 수신하는 상기 단계는, 래디얼 계조 브러시(radial gradient brush)에 대응하는 데이터를 수신하는 단계를 포함하는 방법.
  10. 제6항에 있어서,
    브러시 데이터를 수신하는 상기 단계는, 이미지에 대응하는 데이터를 수신하는 단계를 포함하는 방법.
  11. 제10항에 있어서,
    상기 이미지에 적용할 이미지 효과(image effect)에 대응하는 인터페이스를 통해 함수 호출을 수신하는 단계를 더 포함하는 방법.
  12. 제1항에 있어서,
    상기 함수 호출과 연관된 펜 데이터(pen data)를 수신하는 단계를 더 포함하고,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는 형상의 외곽을 규정하는 펜 함수를 호출하는 단계를 포함하는 방법.
  13. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내에서 타원을 표현하는 코드를 호출하는 단계를 포함하는 방법.
  14. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내에서 사각형을 표현하는 코드를 호출하는 단계를 포함하는 방법.
  15. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내에서 경로를 표현하는 코드를 호출하는 단계를 포함하는 방법.
  16. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내에서 선을 표현하는 코드를 호출하는 단계를 포함하는 방법.
  17. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내의 비주얼의 히트 테스팅(hit-testing)과 관련된 코드를 호출하는 단계를 포함하는 방법.
  18. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내의 비주얼의 좌표를 변환하는 코드를 호출하는 단계를 포함하는 방법.
  19. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내의 비주얼의 바운딩 박스(bounding box)를 계산하는 코드를 호출하는 단계를 포함하는 방법.
  20. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조에 비주얼 오브젝트를 배치하는 코드를 호출하는 단계를 포함하는 방법.
  21. 제1항에 있어서,
    적어도 하나의 비주얼 오브젝트의 트리를 렌더링 타겟(rendering target)으로 렌더링하기 위한 비주얼 관리자(visual manager)를 호출하는 단계를 더 포함하는 방법.
  22. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내에 컨테이너 오브젝트(container object)를 배치하는 코드를 호출하는 단계를 포함하고, 상기 컨테이너 오브젝트는 적어도 하나의 비주얼 오브젝트를 포함하도록 구성되는 방법.
  23. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 이미지 데이터를 상기 장면 그래프 데이터 구조 내에 배치하는 코드를 호출하는 단계를 포함하는 방법.
  24. 제23항에 있어서
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 이미지 효과 오브젝트(image effect object)를 상기 이미지 데이터와 연관된 상기 장면 그래프 데이터 구조 내에 배치하는 코드를 호출하는 단계를 포함하는 방법.
  25. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 텍스트에 대응하는 데이터를 상기 장면 그래프 데이터 구조 내에 배치하는 코드를 호출하는 단계를 포함하는 방법.
  26. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 함수 호출에 응답하여 드로잉 컨텍스트를 제공하는 코드를 호출하는 단계를 포함하는 방법.
  27. 제26항에 있어서,
    상기 함수 호출은 보유 비주얼(retained visual)에 대응하고,
    상기 보유 비주얼의 상기 드로잉 컨텍스트가 상기 장면 그래프 데이터 구조에 반환되도록 재호출하는 단계를 더 포함하는 방법.
  28. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 3차원 비주얼을 상기 장면 그래프 데이터 구조 내에 배치하는 코드를 호출하는 단계를 포함하는 방법.
  29. 제28항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 2차원 표면을 상기 3차원 비주얼로 매핑하는 코드를 호출하는 단계를 포함하는 방법.
  30. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 애니메이션 데이터(animation data)를 상기 장면 그래프 데이터 구조 내에 배치하는 코드를 호출하는 단계를 포함하는 방법.
  31. 제30항에 있어서,
    상기 애니메이션 데이터에 대응하는 타임라인(timeline) 정보를 합성 엔진(composition engine)에 전달하는 단계를 더 포함하는 방법.
  32. 제31항에 있어서,
    상기 합성 엔진은 상기 타임라인에 기초하여 그래픽 데이터를 보간하여, 상기 장면 그래프 데이터 구조 내의 오브젝트에 대응하는 출력을 애니메이트하는 방법.
  33. 제1항에 있어서,
    인터페이스를 통해 함수 호출을 수신하는 상기 단계는, 마크업(markup)을 수신하는 단계를 포함하고,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 단계는 상기 마크업을 오브젝트의 인터페이스에 대한 호출로 파싱(parsing)하는 단계를 포함하는 방법.
  34. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 오디오 및/또는 비디오 데이터에 대응하는 오브젝트를 상기 장면 그래프 데이터 구조 내에 배치하는 코드를 호출하는 단계를 포함하는 방법.
  35. 제1항에 있어서,
    장면 그래프 데이터 구조 내의 데이터가 수정되도록 하는 상기 단계는, 상기 장면 그래프 데이터 구조 내의 오브젝트의 가변 값(mutable value)을 변경시키는 코드를 호출하는 단계를 포함하는 방법.
  36. 컴퓨팅 환경에서,
    관찰 가능한 통합된 출력으로 렌더링될 수 있는 데이터를 포함하는 장면 그래프 데이터 구조; 및
    상기 장면 그래프 데이터 구조 내에 포함될 수 있는 비주얼 오브젝트들 및 그 밖의 데이터를 포함하는 오브젝트 모델(object model)
    을 포함하는 시스템.
  37. 제36항에 있어서,
    비주얼 오브젝트들의 트리를 상기 장면 그래프 데이터 구조에 배치하기 위해, 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  38. 제37항에 있어서,
    호출되는 경우, 상기 비주얼 오브젝트 트리를 렌더링 타겟으로 렌더링하는 비주얼 관리자를 더 포함하는 시스템.
  39. 제37항에 있어서,
    상기 비주얼 오브젝트 트리는 비주얼 컬렉션 오브젝트(visual collection object)에 포함되는 시스템.
  40. 제36항에 있어서,
    상기 비주얼 오브젝트를 상기 장면 그래프 데이터 구조 내에 배치하기 위해, 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  41. 제40항에 있어서,
    브러시를 상기 비주얼 오브젝트와 연관시키기 위해, 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  42. 제40항에 있어서,
    지오메트리(geometry)를 상기 비주얼 오브젝트와 연관시키기 위해, 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  43. 제42항에 있어서,
    상기 지오메트리는 타원 지오메트리, 사각형 지오메트리, 선 지오메트리, 및 경로 지오메트리를 포함하는 세트 중 적어도 하나를 포함하는 시스템.
  44. 제40항에 있어서,
    변환을 상기 비주얼 오브젝트와 연관시키기 위해, 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  45. 제44항에 있어서,
    상기 변환은 상기 비주얼 오브젝트의 인지된 각도를 변경하기 위한 회전 변환을 포함하는 시스템.
  46. 제44항에 있어서,
    상기 변환은 상기 비주얼 오브젝트의 인지된 크기를 변경하기 위한 스케일 변환을 포함하는 시스템.
  47. 제44항에 있어서,
    상기 변환은 상기 비주얼 오브젝트의 인지된 위치를 변경하기 위한 이동 변환(translate transform)을 포함하는 시스템.
  48. 제44항에 있어서,
    상기 변환은 상기 비주얼 오브젝트의 인지된 경사(skew)를 변경시키기 위한 경사 변환을 포함하는 시스템.
  49. 제44항에 있어서,
    상기 변환과 연관된 애니메이션 정보를 더 포함하고,
    상기 애니메이션 정보는 상기 변환과 연관된 변환 데이터가 시간에 따라 변경되도록 함으로써, 시간에 따라 상기 비주얼 오브젝트의 상기 변환을 애니메이트하는 시스템.
  50. 제40항에 있어서,
    컬러를 상기 비주얼 오브젝트와 연관시키기 위해, 상기 오브젝트 모델의 오 브젝트의 적어도 하나의 함수가 호출되는 시스템.
  51. 제40항에 있어서,
    계조 데이터를 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  52. 제40항에 있어서,
    타일 브러시(tile brush)를 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  53. 제40항에 있어서,
    이미지를 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  54. 제40항에 있어서,
    3차원 데이터를 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  55. 제40항에 있어서,
    드로잉 프리미티브(drawing primitive)들을 포함하는 드로잉을 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  56. 제40항에 있어서,
    오디오 및/또는 비디오 매체 데이터를 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  57. 제40항에 있어서,
    이미지 효과를 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  58. 제40항에 있어서,
    형상의 윤곽이 그려지는 방법을 기술하기 위해, 펜을 상기 비주얼 오브젝트와 연관시키도록 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  59. 제40항에 있어서,
    상기 비주얼 오브젝트와 연관된 드로잉 컨텍스트를 얻기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  60. 제40항에 있어서,
    히트 테스팅 데이터를 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  61. 제40항에 있어서,
    사각형을 상기 비주얼 오브젝트와 연관시키기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  62. 제61항에 있어서,
    상기 비주얼 오브젝트에 대응하는 목표 사각형(destination rectangle)에 맞추기 위해서 소스 사각형이 어떻게 신장되어야 하는지를 기술하기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  63. 제61항에 있어서,
    상기 비주얼 오브젝트에 대응하는 컨테이너 내에 컨텐트가 어떻게 수직으로 배치되는지 기술하기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
  64. 제61항에 있어서,
    상기 비주얼 오브젝트에 대응하는 컨테이너 내에 컨텐트가 어떻게 수평으로 배치되는지 기술하기 위해 상기 오브젝트 모델의 오브젝트의 적어도 하나의 함수가 호출되는 시스템.
KR1020057008825A 2003-10-23 2004-07-28 비주얼 및 장면 그래프 인터페이스 KR101137187B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/693,673 2003-10-13
US10/693,673 US7466315B2 (en) 2003-03-27 2003-10-23 Visual and scene graph interfaces
PCT/US2004/024454 WO2005040965A2 (en) 2003-10-23 2004-07-28 Visual and scene graph interfaces

Publications (2)

Publication Number Publication Date
KR20060111362A true KR20060111362A (ko) 2006-10-27
KR101137187B1 KR101137187B1 (ko) 2012-04-20

Family

ID=34522455

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057008825A KR101137187B1 (ko) 2003-10-23 2004-07-28 비주얼 및 장면 그래프 인터페이스

Country Status (10)

Country Link
US (1) US7466315B2 (ko)
EP (1) EP1676187A4 (ko)
JP (1) JP4796499B2 (ko)
KR (1) KR101137187B1 (ko)
CN (1) CN101421761B (ko)
BR (1) BRPI0406384A (ko)
CA (1) CA2501516C (ko)
MX (1) MXPA05006641A (ko)
RU (1) RU2363984C2 (ko)
WO (1) WO2005040965A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130133830A (ko) * 2011-01-05 2013-12-09 디브이엑스, 엘엘씨 하이퍼텍스트 전송 프로토콜을 사용한 마트로스카 컨테이너 파일들에 저장된 미디어의 적응적 비트레이트 스트리밍

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7619633B2 (en) 2002-06-27 2009-11-17 Microsoft Corporation Intelligent caching data structure for immediate mode graphics
US7466315B2 (en) * 2003-03-27 2008-12-16 Microsoft Corporation Visual and scene graph interfaces
US7417645B2 (en) * 2003-03-27 2008-08-26 Microsoft Corporation Markup language and object model for vector graphics
US7486294B2 (en) * 2003-03-27 2009-02-03 Microsoft Corporation Vector graphics element-based model, application programming interface, and markup language
US7088374B2 (en) * 2003-03-27 2006-08-08 Microsoft Corporation System and method for managing visual structure, timing, and animation in a graphics processing system
US7126606B2 (en) 2003-03-27 2006-10-24 Microsoft Corporation Visual and scene graph interfaces
US20050088449A1 (en) * 2003-10-23 2005-04-28 Blanco Leonardo E. Child window redirection
US7511718B2 (en) * 2003-10-23 2009-03-31 Microsoft Corporation Media integration layer
US7219340B2 (en) * 2003-10-23 2007-05-15 Microsoft Corporation Changeable class and pattern to provide selective mutability in computer programming environments
US7603624B2 (en) * 2004-10-21 2009-10-13 Microsoft Corporation System and method for styling content in a graphical user interface control
US7716685B2 (en) * 2005-08-30 2010-05-11 Microsoft Corporation Pluggable window manager architecture using a scene graph system
US7737996B2 (en) * 2005-12-01 2010-06-15 Microsoft Corporation Techniques for automated animation
US20080084416A1 (en) * 2006-10-06 2008-04-10 Microsoft Corporation User-pluggable rendering engine
US20080158254A1 (en) * 2006-12-29 2008-07-03 Hong Jiang Using supplementary information of bounding boxes in multi-layer video composition
US9519997B1 (en) * 2007-03-09 2016-12-13 Pixar Perfect bounding for optimized evaluation of procedurally-generated scene data
US20080266288A1 (en) * 2007-04-27 2008-10-30 Identitymine Inc. ElementSnapshot Control
GB2458488C (en) 2008-03-19 2018-09-12 Imagination Tech Ltd Untransformed display lists in a tile based rendering system
US8760472B2 (en) * 2008-04-01 2014-06-24 Apple Inc. Pixel transforms
US20090328080A1 (en) * 2008-06-25 2009-12-31 Microsoft Corporation Window Redirection Using Interception of Drawing APIS
US8477136B2 (en) * 2009-02-13 2013-07-02 Mobitv, Inc. Functional presentation layer in a lightweight client architecture
US10789761B2 (en) * 2010-01-07 2020-09-29 Suzhou Superengine Graphics Software Co., Ltd. Method and device for processing spatial data
US8957920B2 (en) * 2010-06-25 2015-02-17 Microsoft Corporation Alternative semantics for zoom operations in a zoomable scene
CN102289835A (zh) * 2011-08-30 2011-12-21 北京瑞信在线系统技术有限公司 微动画效果查看方法及装置
US8890886B2 (en) 2011-09-02 2014-11-18 Microsoft Corporation User interface with color themes based on input image data
US9563971B2 (en) 2011-09-09 2017-02-07 Microsoft Technology Licensing, Llc Composition system thread
WO2013058678A1 (ru) 2011-10-19 2013-04-25 Ikonomov Artashes Valer Evich Устройство для управления данными пользователя сети
CN102541563A (zh) * 2011-12-31 2012-07-04 山东中创软件商用中间件股份有限公司 一种监控界面生成方法及系统
US10382287B2 (en) * 2012-02-23 2019-08-13 Ajay JADHAV Persistent node framework
WO2014011088A2 (ru) * 2012-07-13 2014-01-16 Ikonomov Artashes Valeryevich Система проведения конкурсов для удаленных пользователей
WO2014058835A1 (en) * 2012-10-08 2014-04-17 Stc.Unm System and methods for simulating real-time multisensory output
US10115084B2 (en) 2012-10-10 2018-10-30 Artashes Valeryevich Ikonomov Electronic payment system
US9075618B2 (en) 2012-11-02 2015-07-07 Microsoft Technology Licensing, Llc Cross-platform data visualizations using common descriptions
RU2540786C2 (ru) * 2013-01-11 2015-02-10 Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." Способ и система динамической генерации трехмерных анимационных эффектов
CN103412700B (zh) * 2013-07-24 2016-05-11 天脉聚源(北京)传媒科技有限公司 一种分场景展示多媒体资源的方法及装置
CN103713725B (zh) * 2013-12-30 2017-01-18 广州爱九游信息技术有限公司 图形处理方法和装置
CN104063241B (zh) * 2014-06-05 2017-07-18 广东威创视讯科技股份有限公司 宿主程序与com组件的图像同步显示的方法与系统
US10290128B2 (en) * 2015-11-10 2019-05-14 Adobe Inc. Interactive scene graph manipulation for visualization authoring
WO2018097378A1 (ko) * 2016-11-22 2018-05-31 (주)씨앤피에스 드로잉 애니메이션 생성 장치 및 방법
CN107015792B (zh) * 2016-12-09 2020-10-30 创新先进技术有限公司 一种图表统一动画的实现方法以及设备
US10565802B2 (en) * 2017-08-31 2020-02-18 Disney Enterprises, Inc. Collaborative multi-modal mixed-reality system and methods leveraging reconfigurable tangible user interfaces for the production of immersive, cinematic, and interactive content
US10540811B2 (en) * 2018-06-05 2020-01-21 Kyocera Document Solutions Inc. Radial gradient module
US11074053B2 (en) * 2018-09-07 2021-07-27 Boyd Cannon Multerer User interface generation system
CN109976749B (zh) * 2019-03-28 2024-01-16 深圳市创联时代科技有限公司 一种绘图过程的继承方法
US11335037B2 (en) * 2020-02-04 2022-05-17 Adobe Inc. Smart painting tools
US20220134222A1 (en) * 2020-11-03 2022-05-05 Nvidia Corporation Delta propagation in cloud-centric platforms for collaboration and connectivity

Family Cites Families (88)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4209852A (en) * 1974-11-11 1980-06-24 Hyatt Gilbert P Signal processing and memory arrangement
EP0513206B1 (en) 1990-01-30 1995-04-12 Johnson Service Company Networked facilities management system
US5509115A (en) 1990-08-08 1996-04-16 Peerless Systems Corporation Method and apparatus for displaying a page with graphics information on a continuous synchronous raster output device
US5261041A (en) * 1990-12-28 1993-11-09 Apple Computer, Inc. Computer controlled animation system based on definitional animated objects and methods of manipulating same
US5852449A (en) * 1992-01-27 1998-12-22 Scientific And Engineering Software Apparatus for and method of displaying running of modeled system designs
WO1993021636A1 (en) 1992-04-10 1993-10-28 Avid Technology, Inc. A method and apparatus for representing and editing multimedia compositions
US5987627A (en) 1992-05-13 1999-11-16 Rawlings, Iii; Joseph H. Methods and apparatus for high-speed mass storage access in a computer system
US5500933A (en) * 1993-04-28 1996-03-19 Canon Information Systems, Inc. Display system which displays motion video objects combined with other visual objects
WO1994027234A1 (en) * 1993-05-10 1994-11-24 Taligent, Inc. Multimedia synchronization system
US5555368A (en) * 1993-12-30 1996-09-10 Taligent Object-oriented multi-tasking view framework
US5912666A (en) * 1994-08-23 1999-06-15 Object Technology Licensing Corp. Object-oriented global cursor tool
US5745761A (en) 1994-12-15 1998-04-28 International Business Machines Corporation Advanced graphics driver architecture with extension capability
WO1996019780A1 (en) 1994-12-22 1996-06-27 Apple Computer, Inc. Three-dimensional graphics rendering system
US5561752A (en) * 1994-12-22 1996-10-01 Apple Computer, Inc. Multipass graphics rendering method and apparatus with re-traverse flag
US5986667A (en) * 1994-12-22 1999-11-16 Apple Computer, Inc. Mechanism for rendering scenes using an object drawing subsystem
US5732198A (en) 1995-02-09 1998-03-24 Oki America, Inc. Host based printing system for printing a document having at least one page
US5727141A (en) 1995-05-05 1998-03-10 Apple Computer, Inc. Method and apparatus for identifying user-selectable regions within multiple display frames
US5790130A (en) 1995-06-08 1998-08-04 Hewlett-Packard Company Texel cache interrupt daemon for virtual memory management of texture maps
US5930810A (en) * 1995-08-09 1999-07-27 Taylor Corporation Printing system with pre-defined user modifiable forms and local and remote printing
US5986675A (en) * 1996-05-24 1999-11-16 Microsoft Corporation System and method for animating an object in three-dimensional space using a two-dimensional input device
US5936632A (en) 1996-07-26 1999-08-10 Hewlett-Packard Co. Method for fast downloading of textures to accelerated graphics hardware and the elimination of extra software copies of texels
US6275857B1 (en) * 1996-10-30 2001-08-14 Microsoft Corporation System and method for freeing shared resources in a computer system
US5920325A (en) * 1996-11-20 1999-07-06 International Business Machines Corporation Prioritization of background display during animation
US6137499A (en) * 1997-03-07 2000-10-24 Silicon Graphics, Inc. Method, system, and computer program product for visualizing data using partial hierarchies
US6195694B1 (en) * 1997-03-13 2001-02-27 International Business Machines Corporation Server for reconfiguring control of a subset of devices on one or more kiosks
US6160907A (en) * 1997-04-07 2000-12-12 Synapix, Inc. Iterative three-dimensional process for creating finished media content
EP0922360A4 (en) * 1997-04-07 1999-12-29 At & T Corp ADAPTIVE CONTROL ENABLING SYSTEM AND METHOD FOR INTERFACING WITH MPEG-CODED AUDIOVISUAL OBJECTS
US6215495B1 (en) * 1997-05-30 2001-04-10 Silicon Graphics, Inc. Platform independent application program interface for interactive 3D scene management
US5924098A (en) 1997-06-30 1999-07-13 Sun Microsystems, Inc. Method and apparatus for managing a linked-list data structure
US6377263B1 (en) * 1997-07-07 2002-04-23 Aesthetic Solutions Intelligent software components for virtual worlds
US6314470B1 (en) * 1997-07-25 2001-11-06 Hewlett Packard Company System and method for asynchronously accessing a graphics system for graphics application evaluation and control
US6154215A (en) * 1997-08-01 2000-11-28 Silicon Graphics, Inc. Method and apparatus for maintaining multiple representations of a same scene in computer generated graphics
US6654931B1 (en) * 1998-01-27 2003-11-25 At&T Corp. Systems and methods for playing, browsing and interacting with MPEG-4 coded audio-visual objects
US6272650B1 (en) * 1998-02-03 2001-08-07 Amazing Media, Inc. System and method for disambiguating scene graph loads
US6243856B1 (en) * 1998-02-03 2001-06-05 Amazing Media, Inc. System and method for encoding a scene graph
US6075532A (en) * 1998-03-23 2000-06-13 Microsoft Corporation Efficient redrawing of animated windows
US6570578B1 (en) 1998-04-03 2003-05-27 Avid Technology, Inc. System for automatic generation of selective partial renderings of complex scenes
US6266053B1 (en) * 1998-04-03 2001-07-24 Synapix, Inc. Time inheritance scene graph for representation of media content
US6237092B1 (en) * 1998-05-05 2001-05-22 International Business Machines Corp. Client-server system with central application management allowing an administrator to configure user and group contexts during application configuration without relaunching the application
US6631403B1 (en) * 1998-05-11 2003-10-07 At&T Corp. Architecture and application programming interfaces for Java-enabled MPEG-4 (MPEG-J) systems
KR20010034920A (ko) * 1998-06-26 2001-04-25 매클린토크 샤운 엘 엠펙-4 비디오 프로그램을 작성하고 표현하기 위한 단말기
US6731314B1 (en) * 1998-08-17 2004-05-04 Muse Corporation Network-based three-dimensional multiple-user shared environment apparatus and method
US6263339B1 (en) 1998-08-25 2001-07-17 Informix Software, Inc. Dynamic object visualization and code generation
US6487565B1 (en) * 1998-12-29 2002-11-26 Microsoft Corporation Updating animated images represented by scene graphs
US6411297B1 (en) * 1999-03-03 2002-06-25 Discreet Logic Inc. Generating image data
US6714201B1 (en) * 1999-04-14 2004-03-30 3D Open Motion, Llc Apparatuses, methods, computer programming, and propagated signals for modeling motion in computer applications
US6986101B2 (en) * 1999-05-06 2006-01-10 International Business Machines Corporation Method and apparatus for converting programs and source code files written in a programming language to equivalent markup language files
US6707456B1 (en) * 1999-08-03 2004-03-16 Sony Corporation Declarative markup for scoring multiple time-based assets and events within a scene composition system
US7184038B2 (en) * 1999-09-24 2007-02-27 Sun Microsystems, Inc. Using render bin parallelism for rendering scene graph based graphics data
US6765571B2 (en) * 1999-09-24 2004-07-20 Sun Microsystems, Inc. Using a master controller to manage threads and resources for scene-based rendering
US6538656B1 (en) * 1999-11-09 2003-03-25 Broadcom Corporation Video and graphics system with a data transport processor
AU1948201A (en) * 1999-12-06 2001-06-12 Axiomatic Design Software, Inc. Method and apparatus for producing software
US7102651B1 (en) 1999-12-22 2006-09-05 Adobe Systems Incorporated Hierarchical 2-D color compositing with blending mode and opacity controls at all levels
US7103581B1 (en) 2000-01-13 2006-09-05 Hewlett-Packard Development Company, L.P. System and method for pricing print jobs
US6833840B2 (en) * 2000-02-14 2004-12-21 Optibase Ltd PROTO implementation in MPEG-4
JP2001273520A (ja) * 2000-03-23 2001-10-05 Famotik Ltd マルチメディアドキュメント統合表示システム
US6751655B1 (en) * 2000-04-18 2004-06-15 Sun Microsystems, Inc. Method and apparatus for transport of scenegraph information across a network
US6717599B1 (en) * 2000-06-29 2004-04-06 Microsoft Corporation Method, system, and computer program product for implementing derivative operators with graphics hardware
US20020019844A1 (en) 2000-07-06 2002-02-14 Kurowski Scott J. Method and system for network-distributed computing
JP2004506262A (ja) * 2000-08-04 2004-02-26 イントリンジック グラフィックス, インコーポレイテッド グラフィックハードウェアおよびソフトウェアの開発
US6675230B1 (en) * 2000-08-22 2004-01-06 International Business Machines Corporation Method, system, and program for embedding a user interface object in another user interface object
US6910044B2 (en) * 2000-09-20 2005-06-21 Sap Aktiengesellschaft Method and apparatus for structuring, maintaining, and using families of data
US6636211B2 (en) 2000-12-15 2003-10-21 Dassault Systemes CAD/CAM feature tree with manipulatable 3D miniatures
US6732109B2 (en) * 2001-01-31 2004-05-04 The Eon Company Method and system for transferring information between a user interface and a database over a global information network
FR2823942A1 (fr) * 2001-04-24 2002-10-25 Koninkl Philips Electronics Nv Dispositif pour une conversion d'un format bifs textuel vers un format bifs binaire
US7069503B2 (en) * 2001-06-04 2006-06-27 Murata Kikai Kabushiki Kaisha Device and program for structured document generation data structure of structural document
US7305011B2 (en) * 2001-06-14 2007-12-04 International Business Machines Corporation Periodic broadcast and location of evolving media content with application to seminar and stroke media
US7161599B2 (en) * 2001-10-18 2007-01-09 Microsoft Corporation Multiple-level graphics processing system and method
US6919891B2 (en) * 2001-10-18 2005-07-19 Microsoft Corporation Generic parameterization for a scene graph
US7064766B2 (en) * 2001-10-18 2006-06-20 Microsoft Corporation Intelligent caching data structure for immediate mode graphics
EP1454226A4 (en) * 2001-10-23 2004-12-29 Samsung Electronics Co Ltd INFORMATION STORAGE MEDIUM WITH A MARKUP DOCUMENT AND AV DATA, RECORDING METHOD, PLAYBACK METHOD AND PLAYBACK APPARATUS THEREFOR
US7055092B2 (en) * 2001-12-05 2006-05-30 Canon Kabushiki Kaisha Directory for multi-page SVG document
US20030110297A1 (en) * 2001-12-12 2003-06-12 Tabatabai Ali J. Transforming multimedia data for delivery to multiple heterogeneous devices
US20040110490A1 (en) * 2001-12-20 2004-06-10 Steele Jay D. Method and apparatus for providing content to media devices
KR100453225B1 (ko) * 2001-12-26 2004-10-15 한국전자통신연구원 3차원 가상 현실 구현을 위한 클라이언트 시스템과 이를이용한 가상 현실 구현 방법
US7076332B2 (en) * 2002-01-18 2006-07-11 National Instruments Corporation System and method for invoking execution of a sequence of operations that includes motion control, machine vision, and data acquisition (DAQ) functionality
EP1472620A2 (en) * 2002-02-04 2004-11-03 Mobileaware Technologies Limited Document transformation
US20030210267A1 (en) 2002-05-13 2003-11-13 Kylberg Robert Lee Systems and methods for providing asynchronous client rendering in a graphical user interface (GUI) environment
AU2003249168A1 (en) * 2002-07-11 2004-02-02 Raytheon Company System and method for asynchronous storage and playback of a system state
WO2004008303A2 (en) * 2002-07-12 2004-01-22 Raytheon Company Scene graph based display for desktop applications
US20040216139A1 (en) * 2002-08-21 2004-10-28 Rhoda Merlin A. System controlling test/measurement devices on a network using markup language documents and methods thereof
US7240346B2 (en) * 2002-11-13 2007-07-03 Microsoft Corporation Method and system for accessing drawing resources
US7088374B2 (en) * 2003-03-27 2006-08-08 Microsoft Corporation System and method for managing visual structure, timing, and animation in a graphics processing system
US7126606B2 (en) 2003-03-27 2006-10-24 Microsoft Corporation Visual and scene graph interfaces
US7466315B2 (en) * 2003-03-27 2008-12-16 Microsoft Corporation Visual and scene graph interfaces
US7412455B2 (en) * 2003-04-30 2008-08-12 Dillon David M Software framework that facilitates design and implementation of database applications
US8051389B2 (en) * 2003-08-26 2011-11-01 Hewlett-Packard Development Company, L.P. Methods of displaying resources of overlapping but separate hierarchies
US7012606B2 (en) * 2003-10-23 2006-03-14 Microsoft Corporation System and method for a unified composition engine in a graphics processing system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130133830A (ko) * 2011-01-05 2013-12-09 디브이엑스, 엘엘씨 하이퍼텍스트 전송 프로토콜을 사용한 마트로스카 컨테이너 파일들에 저장된 미디어의 적응적 비트레이트 스트리밍

Also Published As

Publication number Publication date
BRPI0406384A (pt) 2005-08-09
EP1676187A4 (en) 2009-11-04
MXPA05006641A (es) 2005-08-16
WO2005040965A2 (en) 2005-05-06
JP4796499B2 (ja) 2011-10-19
CN101421761B (zh) 2012-08-15
CN101421761A (zh) 2009-04-29
WO2005040965A3 (en) 2006-09-14
US7466315B2 (en) 2008-12-16
US20040189645A1 (en) 2004-09-30
RU2363984C2 (ru) 2009-08-10
EP1676187A2 (en) 2006-07-05
RU2005115971A (ru) 2006-01-20
JP2007509420A (ja) 2007-04-12
CA2501516A1 (en) 2005-04-13
KR101137187B1 (ko) 2012-04-20
CA2501516C (en) 2013-10-08

Similar Documents

Publication Publication Date Title
KR101137187B1 (ko) 비주얼 및 장면 그래프 인터페이스
KR100962920B1 (ko) 비주얼 및 장면 그래프 인터페이스
KR101109395B1 (ko) 벡터 그래픽을 위한 마크업 언어 및 객체 모델
EP1462998B1 (en) Markup language and object model for vector graphics
AU2004279179B8 (en) Visual and scene graph interfaces

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160318

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170317

Year of fee payment: 6