KR101660134B1 - 애플리케이션들 간의 객체들의 드래그 앤 드롭 - Google Patents

애플리케이션들 간의 객체들의 드래그 앤 드롭 Download PDF

Info

Publication number
KR101660134B1
KR101660134B1 KR1020147004443A KR20147004443A KR101660134B1 KR 101660134 B1 KR101660134 B1 KR 101660134B1 KR 1020147004443 A KR1020147004443 A KR 1020147004443A KR 20147004443 A KR20147004443 A KR 20147004443A KR 101660134 B1 KR101660134 B1 KR 101660134B1
Authority
KR
South Korea
Prior art keywords
processor
window
application
selection
rendering
Prior art date
Application number
KR1020147004443A
Other languages
English (en)
Other versions
KR20140051335A (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 KR20140051335A publication Critical patent/KR20140051335A/ko
Application granted granted Critical
Publication of KR101660134B1 publication Critical patent/KR101660134B1/ko

Links

Images

Classifications

    • 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]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/04842Selection of displayed objects or displayed text elements
    • 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]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/0486Drag-and-drop
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)
  • Processing Or Creating Images (AREA)
  • Digital Computer Display Output (AREA)
  • Image Generation (AREA)

Abstract

제1 프로그램에 의해 디스플레이의 제1 윈도에 렌더링된 객체를 캡처하고, 객체를 추출하고, 사용자가 제2 프로그램을 포함하는 디스플레이의 제2 윈도로 디스플레이를 가로질러 객체를 드래그할 수 있게 하며, 거의 실시간으로 제2 프로그램으로 객체를 가져오는 것에 관한 방법들, 장치들, 및 시스템들이 기술된다. 드래그 앤 드롭 프로세스는 사용자에게 매끄럽게 발생하며, 사용자가 한 애플리케이션에서 복수의 객체들 중 하나 또는 그 이상의 객체를 선택하여, 변경을 위해 제2 애플리케이션으로 객체를 드래그하며, 변경된 객체를 실시간 프리뷰를 위해 다시 제1 애플리케이션으로 드래그할 수 있게 한다.

Description

애플리케이션들 간의 객체들의 드래그 앤 드롭{DRAG AND DROP OF OBJECTS BETWEEN APPLICATIONS}
<관련 출원 상호 참조>
본 출원은, "애플리케이션들 간의 객체들의 드래그 앤 드롭(DRAG AND DROP OF OBJECTS BETWEEN APPLICATIONS)"이라는 발명의 명칭으로, 2011년 8월 12일에 출원된, 미국 임시 출원 번호 제61/523,142호, 및 "애플리케이션들 간의 객체들의 드래그 앤 드롭(DRAG AND DROP OF OBJECTS BETWEEN APPLICATIONS)"이라는 발명의 명칭으로, 2012년 8월 9일에 출원된, 미국 정식 출원 제13/571,182호의 정식 출원이며, 이 출원들 전체가 본 명세서에서 참조용으로 인용된다.
본 발명은 일반적으로 실시간으로 제1 애플리케이션으로부터 제2 애플리케이션으로 3차원 그래픽 객체를 내보내기(exporting)와 가져오기(importing)에 관한 것으로, 특히, 제1 및 제2 애플리케이션들을 렌더링하는 윈도우들 간의 내보내기/가져오기 프로세스의 사용자의 디스플레이에서의 그래픽 표현에 관한 것이다.
그래픽 프로그램들은, 일반적으로, 2D 또는 3D 객체들을, 나중에 OpenGL 또는 Direct3D 등의 그래픽 API에 제공되는, 드로우 커맨드들(draw commands)들로 변환함으로써 해당 객체들을 렌더링한다. API 렌더링 파이프라인 내에서, 드로우 커맨드들은 애플리케이션 사용자의 디스플레이에서 2D 이미지로서 출력되기 전에 숨겨진 표면 제거, Z-버퍼링, 래스터화, 및 클리핑 등의 각종 프로세스들을 겪는다. 일반적으로, 그래픽 프로그램으로부터 특정 3D 객체의 내보내기는, 가능하다면, OBJ 파일 또는 다른 판독 가능 3D 포맷을 검색하기 위해 프로그램 데이터의 역컴파일링(decompiling)을 요구하는, 몹시 힘든 프로세스이다. 유사하게, 3D 그래픽 프로그램으로 파일의 가져오기는 그래픽 프로그램의 요구된 포맷으로 3D 객체를 컴파일링할 것을 요구하며, 성공적인 객체 가져오기를 위해 전체 3D 객체 라이브러리를 다시 패키징할 것을 종종 요구한다.
본 발명은 일반적으로 실시간으로 제2 3D 프로그램에서의 렌더링을 위해 제1 3D 프로그램으로부터 객체를 내보내는 것에 관한 것이다. 일 실시예에서, 컴퓨터 시스템은 복수의 애플리케이션 인스턴스들을 호스팅하며, 각각의 애플리케이션 인스턴스는 로컬 클라이언트 애플리케이션에 대응한다. 컴퓨터 시스템은, 컴퓨터 시스템의 그래픽 처리 장치의 리소스들을 사용해서, 컴퓨터 시스템 디스플레이의 개별 윈도우들에서 로컬 클라이언트 애플리케이션들 중 적어도 2개에 대응하는 애플리케이션 인스턴스들의 그래픽 출력을 동시에 렌더링한다. 제1 애플리케이션으로부터 3D 객체를 내보내고자 하는 사용자는 제1 윈도우로부터 객체를 선택하여, 객체를 제2 윈도우로 드래그한다. 사용자가 객체를 드래그함에 따라, 그 객체는 사용자의 드래그 커맨드들에 따라 컴퓨터 디스플레이에 렌더링된다. 그 후, 사용자는 제2 윈도우에 렌더링된 제2 애플리케이션에 객체를 드롭하며, 객체를 실시간으로 제2 애플리케이션으로 가져온다.
일 실시예에서, 제1 컴퓨터 시스템은 제1 애플리케이션을 로컬로 호스팅하고, 제2 애플리케이션은 애플리케이션 서버에서 호스팅된다. 컴퓨터 시스템은 컴퓨터 시스템 디스플레이의 2개의 별개의 윈도우들에서 그의 로컬 하드웨어 및 렌더링 API를 통해 로컬 애플리케이션 및 원격 애플리케이션을 둘 다 렌더링한다. 제1 애플리케이션으로부터 3D 객체를 내보내고자 하는 사용자는 제1 윈도우로부터 객체를 선택하여, 객체를 제2 윈도우로 드래그한다. 사용자가 객체를 드래그함에 따라, 그 객체는 사용자의 드래그 커맨드들에 따라 컴퓨터 디스플레이에 렌더링된다. 그 후, 사용자는 제2 윈도우에 렌더링된 제2 애플리케이션에 객체를 드롭하며, 객체를 실시간으로 제2 애플리케이션으로 가져온다.
일 실시예에서, 제1 컴퓨터 시스템은 제1 애플리케이션을 로컬로 호스팅하고, 제2 애플리케이션은 서버측 렌더링을 가진 애플리케이션 서버에서 호스팅된다. 컴퓨터 시스템은 자신의 그래픽 프로세서 및 그래픽 API를 사용해서 로컬 애플리케이션을 렌더링하며, 원격 애플리케이션은 서버측 그래픽 API에 의해 렌더링된다. 제1 애플리케이션으로부터 3D 객체를 내보내고자 하는 사용자는 제1 윈도우로부터 객체를 선택하여, 객체를 제2 윈도우로 드래그한다. 사용자가 객체를 드래그함에 따라, 그 객체는 사용자의 드래그 커맨드들에 따라 컴퓨터 디스플레이에 렌더링된다. 그 후, 사용자는 제2 윈도우에 렌더링된 제2 애플리케이션에 객체를 드롭하며, 객체를 실시간으로 제2 애플리케이션으로 가져온다.
일 실시예에서, 제2 애플리케이션으로 객체를 가져오는 방법이 기술된다. 본 방법은, 프로세서에 의해, 제1 사용자 입력을 수신하는 단계, 및 제1 사용자 입력에 응답해서, 프로세서에 의해, 제1 애플리케이션 및 렌더링 API에 의해 디스플레이의 제1 윈도우에 렌더링된 객체를 선택하는 단계를 포함한다. 본 방법은, 프로세서에 의해, 엔진을 통해 제1 애플리케이션으로부터 객체를 추출하는 단계 및 제2 사용자 입력을 수신하는 단계를 더 포함한다. 제2 사용자 입력에 응답해서, 본 방법은, 프로세서에 의해, 디스플레이의 객체를 제1 윈도우로부터 제2 윈도우에 렌더링된 제2 애플리케이션으로 드래그하는 단계, 및 프로세서에 의해, 드래그 중에 제1 윈도우와 제2 윈도우 사이의 중간 공간에 객체를 디스플레이하는 단계를 포함한다. 객체가 제2 윈도우의 포커스 경계를 가로지르는 것에 응답해서, 본 방법은 객체를 제2 애플리케이션으로 가져오는 단계를 포함한다.
일 실시예에서, 본 방법에 따라 객체를 선택하는 단계는, 프로세서에 의해, 제1 사용자 입력을 엔진으로 우회하는 단계, 프로세서에 의해, 제1 애플리케이션으로부터 렌더링 API로 드로우 커맨드들을 인터셉트하는 단계, 및 프로세서에 의해, 제1 애플리케이션의 드로우 커맨드들로부터 객체를 결정하는 단계를 포함한다. 본 방법은, 프로세서에 의해, 선택 알고리즘에 따라 객체 및 다른 객체들을 선택하는 단계를 더 포함한다. 일 실시예에서, 선택 알고리즘은 광선이 닿는 제1 객체에 연결된 모든 객체들을 선택하도록 구성된다. 일 실시예에서, 선택 알고리즘은 광선이 닿는 제1 객체와 동일한 객체 식별자를 가진 모든 객체들을 선택하도록 구성된다. 일 실시예에서, 선택 알고리즘은 광선이 닿는 제1 객체와 동일한 움직임 벡터를 가진 모든 객체들을 선택하도록 구성된다. 일 실시예에서, 선택 알고리즘은 광선이 닿는 제1 객체와 동일한 텍스처를 가진 모든 객체들을 선택하도록 구성된다.
일 실시예에서, 객체를 선택하는 제1 사용자 입력은 포인팅 디바이스로부터의 커서 선택이다. 일 실시예에서, 객체를 선택하는 제1 사용자 입력은 사용자가 객체 주위에 경계를 그리는 것을 포함한다. 일 실시예에서, 객체를 선택하는 제1 사용자 입력은 미리 정해진 특징 집합의 모든 인접 픽셀들을 선택하는 선택 도구를 포함한다. 일 실시예에서, 객체를 선택하는 제1 사용자 입력은 터치 인터페이스 상의 탭이다. 일 실시예에서, 객체를 선택하는 제1 사용자 입력은 터치 인터페이스 상의 제스처이다.
일 실시예에서, 프로세서에 의해, 드로우 커맨드들로부터 객체를 결정하는 방법은, 프로세서에 의해, 제1 사용자 입력의 좌표들에서 장면의 근거리 면에 카메라를 할당하는 단계, 및 프로세서에 의해, 카메라로부터 원거리 면으로 광선 투사하고, 광선이 닿는 제1 객체를 선택하는 단계를 더 포함한다. 본 방법은 또한, 프로세서에 의해, 선택을 확장 또는 필터링하는 추가 사용자 입력을 수신하는 단계를 포함하며, 선택을 확장 또는 필터링하는 단계는, 프로세서에 의해, 선택된 객체 또는 객체들에 연결된 장면의 다른 객체들을 선택 또는 선택 해제하는 단계를 포함한다.
일 실시예에서, 선택을 확장 또는 필터링하는 단계는, 프로세서에 의해, 선택된 객체 또는 객체들과 동일한 객체 식별자를 가진 장면의 다른 객체들을 선택 또는 선택 해제하는 단계를 포함한다. 일 실시예에서, 선택을 확장 또는 필터링하는 단계는, 프로세서에 의해, 선택된 객체 또는 객체들과 동일한 움직임 벡터를 가진 장면의 다른 객체들을 선택 또는 선택 해제하는 단계를 포함한다. 일 실시예에서, 선택을 확장 또는 필터링하는 단계는, 프로세서에 의해, 선택된 객체 또는 객체들과 동일한 텍스처를 가진 장면의 다른 객체들을 선택 또는 선택 해제하는 단계를 포함한다. 일 실시예에서, 선택을 확장 또는 필터링하는 단계는, 프로세서에 의해, 추가 사용자 입력에 의해 지정된 장면의 다른 객체들을 선택 또는 선택 해제하는 단계를 포함한다. 일 실시예에서, 지정 프로세스는, 프로세서에 의해, 사용자 입력을 수신하는 단계, 프로세서에 의해, 사용자 입력의 좌표들에서 장면의 근거리 면에 카메라를 할당하는 단계, 및 프로세서에 의해, 카메라로부터 원거리 면으로 광선 투사하고, 광선이 닿는 제1 객체를 지정하는 단계를 포함한다.
일 실시예에서, 프로세서에 의해 디스플레이에서 객체를 드래그하는 단계는, 프로세서에 의해, 경계 없는 윈도우 및 경계 없는 윈도우에서의 선택을 렌더링하는 단계를 포함하고, 선택은 사용자에 의해 선택된 객체 또는 객체들을 포함한다. 일 실시예에서, 경계 없는 윈도우를 제1 윈도우로부터 제2 윈도우로 드래그하는 사용자 입력의 수신에 응답해서, 본 방법은, 프로세서에 의해, 사용자 입력들에 따라 경계 없는 윈도우를 디스플레이에 가로질러 이동시키는 것을 포함한다.
일 실시예에서, 프로세서에 의해, 경계 없는 윈도우에서의 선택을 렌더링하기 위한 본 방법은, 프로세서에 의해, 제1 애플리케이션으로부터의 선택과 연관된 드로우 커맨드들을 복사하는 단계, 프로세서에 의해, 제1 애플리케이션으로부터의 드로우 커맨드들을 렌더링 API의 파이프라인에 삽입하는 단계, 프로세서에 의해, 렌더링 API를 통해 드로우 커맨드들을 렌더링하는 단계를 포함한다.
일 실시예에서, 선택을 제2 애플리케이션으로 가져오는 방법은, 프로세서에 의해, 제2 애플리케이션으로의 구현을 위해 선택을 변환하는 단계, 및 프로세서에 의해, 변환 중에 제2 윈도우에서 엔진을 통해 선택을 렌더링하는 단계를 포함한다. 일 실시예에서, 선택을 변환하는 단계는, 프로세서에 의해, 드로우 커맨드들을 제2 애플리케이션에 의해 사용되는 파일 포맷으로 변경하는 단계를 포함한다. 일 실시예에서, 파일 포맷은 OBJ 파일이다.
변환의 완료 시에, 본 방법은, 프로세서에 의해, 선택을 제2 애플리케이션으로 가져오는 단계를 포함한다. 객체를 제2 애플리케이션으로 가져옴과 동시에, 본 방법은, 프로세서에 의해, 엔진 렌더링 프로세스를 중단하고, 프로세서에 의해, 제2 애플리케이션 내로부터 객체를 렌더링하는 단계를 더 포함한다.
일 실시예에서, 엔진을 통해 선택을 렌더링하는 단계는, 프로세서에 의해, 렌더링 API에게 제2 윈도우로 선택을 렌더링하라고 명령하도록 동작하는 드로우 커맨드들을 렌더링 API 파이프라인에 삽입하는 단계를 포함한다. 일 실시예에서, 제2 애플리케이션은 자신의 렌더링 API를 가지고, 제2 애플리케이션 내로부터 선택을 렌더링하는 단계는, 프로세서에 의해, 제2 애플리케이션의 렌더링 API를 사용해서 제2 윈도우에 선택을 렌더링하는 단계를 포함한다.
일 실시예에서, 경계 없는 윈도우에 선택을 렌더링하는 방법은, 프로세서에 의해, 제1 애플리케이션으로부터 조명 및 환경 효과들을 포함하는 제1 조건들, 및 제2 애플리케이션으로부터 조명 및 환경 효과들을 포함하는 제2 조건들을 획득하는 단계를 포함한다. 본 방법은 또한, 프로세서에 의해, 제1 및 제2 윈도우들로부터의 경계 없는 윈도우의 거리에 따라 제1 및 제2 조건들을 점차로 적용하는 단계를 또한 포함한다.
일 실시예에서, 제1 애플리케이션으로부터 제2 애플리케이션으로 객체를 내보내고 가져오기 위한 시스템이 기술된다. 일 실시예에서, 객체는 3차원 객체이다. 시스템은 그래픽 처리 장치, 프로세서, 및 프로세서에 의해 실행되는 프로그램 로직을 유형적으로 저장하기 위한 저장 매체를 포함한다. 일 실시예에서, 저장 매체는 제1 및 제2 애플리케이션들 중 하나 또는 그 이상을 추가로 포함할 수 있다. 프로그램 로직은, 제1 사용자 입력을 수신하도록, 프로세서에 의해 실행되는, 제1 사용자 입력 수신 로직을 포함한다. 저장 매체에 포함되고 프로세서에 의해 실행되는 선택 로직은 제1 사용자 입력의 수신에 응답해서 제1 애플리케이션 및 렌더링 API에 의해 디스플레이의 제1 윈도우에 렌더링된 객체를 선택한다. 객체는 저장 매체에 포함된 추출 로직에 의해 제1 애플리케이션으로부터 추출된다. 또한, 프로세서는, 제2 사용자 입력을 수신하기 위한 제2 사용자 입력 수신 로직, 제2 사용자 입력의 수신에 응답해서 제1 윈도우로부터 제2 윈도우에 렌더링된 제2 애플리케이션으로 디스플레이의 객체를 드래그하기 위한 드래그 로직, 및 객체가 제2 윈도우의 포커스 경계를 가로지르는 것에 응답해서, 제2 애플리케이션으로 객체를 가져오기 위한, 저장 매체에 포함되고 프로세서에 의해 실행되는, 가져오기 로직을 실행한다.
일 실시예에서, 객체를 선택하도록, 프로세서에 의해 실행되는 선택 로직은, 제1 애플리케이션으로부터 제1 사용자 입력들을 우회하도록, 프로세서에 의해 또한 실행되는 우회 로직을 더 포함한다. 또한, 선택 로직은, 제1 애플리케이션으로부터 렌더링 API로 드로우 커맨드들을 인터셉트하도록, 프로세서에 의해 실행되는 인터셉트 로직, 제1 사용자 입력과 연관된 드로우 커맨드들로부터 객체를 결정하도록, 프로세서에 의해 실행되는 결정 로직, 및 선택 알고리즘에 따라 3차원 객체 및 다른 객체들을 선택하도록, 프로세서에 의해 실행되는, 선택 로직을 포함한다.
일 실시예에서, 결정 로직은, 제1 사용자 입력의 좌표들에서 장면의 근거리 면에 카메라를 할당하도록, 프로세서에 의해 실행되는, 할당 로직을 더 포함한다. 프로세서에 의해 실행되는 결정 로직은 또한 카메라로부터 원거리 면으로 광선 투사하고 광선이 닿는 제1 객체를 선택하기 위한 광선 투사 로직을 포함한다.
일 실시예에서, 프로세서에 의해 실행되는 드래그 로직은, 경계 없는 윈도우를 렌더링하기 위한 윈도우 렌더링 로직, 경계 없는 윈도우에 선택을 렌더링하기 위한 선택 렌더링 로직 - 선택은 사용자에 의해 선택된 객체 또는 객체들을 포함함 - , 및 경계 없는 윈도우를 제1 윈도우로부터 제2 윈도우로 드래그하는 사용자 입력들의 수신에 응답해서 사용자 입력들에 따라 경계 없는 윈도우를 디스플레이를 가로질러 이동시키기 위한 이동 로직을 포함한다.
일 실시예에서, 프로세서에 의해 실행되는 선택 렌더링 로직은 선택과 연관된 드로우 커맨드들을 복사하기 위한 복사 로직, 드로우 커맨드들을 렌더링 API 파이프라인에 삽입하기 위한 삽입 로직, 및 렌더링 API를 통해 드로우 커맨드들을 렌더링하기 위한 드로우 커맨드 렌더링 로직을 더 포함한다. 일 실시예에서, 선택 렌더링 로직은, 제1 애플리케이션으로부터 조명 및 환경 효과들을 포함하는 제1 조건들 및 제2 애플리케이션으로부터 조명 및 환경 효과들을 포함하는 제2 조건들을 획득하도록, 프로세서에 의해 실행되는, 제1 조건 획득 로직 및 제2 조건 획득 로직을 더 포함한다. 또한, 프로세서에 의해 실행되는 선택 렌더링 로직은, 제1 및 제2 윈도우들로부터의 윈도우 없는 경계의 거리에 따라 제1 및 제2 조건들을 점차로 적용하기 위한 조건 적용 로직을 포함한다.
일 실시예에서, 프로세서에 의해 실행되는 가져오기 로직은, 변환 프로세스의 완료시에 선택을 제2 애플리케이션으로 가져오도록, 제2 애플리케이션으로의 구현을 위해 선택을 변환하기 위한 변환 로직, 변환 프로세스 중에 제2 윈도우에 선택을 렌더링하기 위한 렌더링 로직, 및 객체를 제2 애플리케이션으로 가져옴과 동시에 엔진 렌더링 프로세스를 중단하고 제2 애플리케이션 내로부터 객체를 렌더링하기 위한 중단 로직을 더 포함한다. 일 실시예에서, 변환 프로세서를 위해 프로세서에 의해 실행되는 변환 로직은 제2 애플리케이션에 의해 사용된 파일 포맷으로 드로우 커맨드들을 변경하기 위한 변경 로직을 더 포함한다. 일 실시예에서, 파일 포맷은 OBJ 파일이다. 일 실시예에서, 렌더링 로직은, 렌더링 API에게 제2 윈도우로 선택을 렌더링하라고 명령하도록 동작하는 드로우 커맨드들을 렌더링 API 파이프라인에 삽입하도록, 프로세서에 의해 실행되는, 삽입 로직을 더 포함한다. 일 실시예에서, 제2 애플리케이션 렌더링 API는 제2 애플리케이션으로 객체를 가져옴과 동시에 제2 윈도우에 선택을 렌더링한다.
프로세서에 의해 실행될 때, 프로세서가 제1 사용자 입력을 수신하고, 제1 사용자 입력에 응답해서, 제1 애플리케이션 및 렌더링 API에 의해 디스플레이의 제1 윈도우에 렌더링된 객체를 선택하게 야기하는 명령들이 저장되어 있는 컴퓨터 판독 가능 저장 매체가 기술된다. 상기 명령들은 추가로 프로세서가 엔진을 통해 제1 애플리케이션으로부터 객체를 추출하게 야기한다. 또한, 저장 매체는 제2 사용자 입력을 수신하고, 제2 사용자 입력에 응답해서, 제1 윈도우로부터 제2 윈도우에 렌더링된 제2 애플리케이션으로 디스플레이의 객체를 드래그하는 명령들을 포함한다. 저장 매체는 객체가 제2 윈도우의 포커스 경계를 가로지르는 것에 응답해서, 제2 애플리케이션으로 객체를 가져오는 명령들을 더 포함한다.
그 특징들이 조합될 수 있는 이들 및 기타 실시예들이 이하의 상세한 설명 및 첨부 도면들을 참조할 때 당업자에게 명백할 것이다.
일정한 비율로 그려지지 않은 도면들에서, 유사한 참조 부호들은 몇몇 도면들에 걸쳐 유사한 요소들을 나타낸다.
도 1은 2개의 로컬 애플리케이션들을 호스팅하고 제2 애플리케이션으로 가져오기 위해 3D 객체를 제1 애플리케이션으로부터 내보내는 컴퓨터 시스템의 일례를 도시한다.
도 2는 제1 애플리케이션으로부터 객체를 그랩(grab)하고, 객체를 제1 애플리케이션으로부터 제2 애플리케이션으로 드래그하고, 렌더링을 위해 객체를 제2 애플리케이션에 드롭하는 것으로 이루어진, 내보내기 및 가져오기 프로세스의 전체 흐름을 도시한다.
도 3은 그랩 프로세스의 흐름을 도시한다.
도 4는 드래그 프로세스의 흐름을 도시한다.
도 5는 드롭 프로세스의 흐름을 도시한다.
도 6은 재진입 프로세스의 프로세스 흐름을 도시한다.
도 7은 환경 효과 렌더링을 통합한 프로세스를 실행하는 컴퓨터 시스템 디스플레이의 표현을 도시한다.
도 8은 로컬 애플리케이션을 호스팅하는 컴퓨터 시스템 및 원격 제2 애플리케이션을 호스팅하는 애플리케이션 서버의 일례를 도시한다.
도 9는 로컬 애플리케이션을 호스팅하는 컴퓨터 시스템 및 원격 제2 애플리케이션을 호스팅하는 서버측 렌더링을 가진 애플리케이션 서버의 일례를 도시한다.
도 10은 특정 실시예들의 하나 또는 그 이상의 부분들을 구현하기에 적합한 예시적인 컴퓨터 시스템(1000)을 도시한다.
이제 본 명세서의 일부를 구성하고 실례로서 특정 예시의 실시예들을 도시하는 첨부 도면들을 참조해서 주제가 더 자세히 후술될 것이다. 그러나, 주제는 각종 상이한 형태들로 구현될 수 있으며, 따라서, 포함된 또는 청구된 주제는 본 명세서에 기술된 임의의 예시의 실시예들로 제한되지 않는 것으로 해석되도록 의도된 것이다; 예시의 실시예들은 단지 예시적인 것으로 제공된 것이다. 유사하게, 청구된 또는 포함된 주제의 상당히 폭넓은 범위가 의도된다. 특히, 예를 들어, 주제는 방법들, 장치들, 컴포넌트들, 또는 시스템들로서 구현될 수 있다. 따라서, 실시예들은, 예를 들어, 하드웨어, 소프트웨어, 펌웨어 또는 (그 자체로서 소프트웨어가 아닌) 이들의 임의의 조합의 형태를 취할 수 있다. 따라서, 이하의 상세한 설명은 제한적인 의미로 이해되도록 의도된 것이 아니다.
첨부 도면들에서, 일부 특징들은 특정 컴포넌트들의 세부 사항들을 보여주기 위해 과장될 수 있다(또한, 도면들에 도시된 임의의 크기, 재료 및 유사한 세부 사항들은 제한이 아니라 예시적인 것으로 의도된 것이다). 따라서, 본 명세서에 개시된 특정 구조적 및 기능적 세부 사항들은 제한적인 것으로 해석되어서는 안 될 것이며, 단지 개시된 실시예들을 다양하게 이용하도록 당업자에게 교시하기 위한 대표적인 기준으로서 해석되어야 할 것이다.
본 발명은 특정 주제와 관련된 매체를 선택 및 제시하기 위해 방법들 및 장치들의 블록도들 및 동작 삽화들을 참조해서 후술된다. 블록도들 또는 동작 삽화들의 각각의 블록, 및 블록도들 또는 동작 삽화들의 블록들의 조합들은 아날로그 또는 디지털 하드웨어 및 컴퓨터 프로그램 명령들에 의해 구현될 수 있음을 알 것이다. 이 컴퓨터 프로그램 명령들은 범용 컴퓨터, 특별 목적 컴퓨터, ASIC, 또는 다른 프로그래밍 가능 데이터 처리 장치의 프로세서에 제공될 수 있으며, 따라서 컴퓨터 또는 다른 프로그래밍 가능 데이터 처리 장치의 프로세서를 통해 실행하는 명령들은 블록도들 또는 동작 블록 또는 블록들에 명시된 기능들/동작들을 구현한다. 각종 양상들 또는 특징들은 다수의 장치들, 컴포넌트들, 모듈들 등을 포함할 수 있는 시스템들에 관하여 제시될 것이다. 각종 시스템들은 추가 장치들, 컴포넌트들, 모듈들 등을 포함할 수 있고/있거나, 도면들과 관련해서 기술된 장치들, 컴포넌트들, 모듈들 등을 모두 포함하지는 않을 수 있음을 알고 이해할 것이다. 이 방식들의 조합이 또한 사용될 수 있다.
일부 대안의 구현들에서, 블록들에 언급된 기능들/동작들은 동작 삽화들에 언급된 순서와 다르게 발생할 수 있다. 예를 들어, 수반된 기능들/동작들에 따라, 연속해서 도시된 2개의 블록들은 실제로는 거의 동시에 실행될 수 있거나, 또는 블록들은 때로는 역순으로 실행될 수 있다. 게다가, 본 발명의 흐름도들로서 제시 및 기술된 방법들의 실시예들은 기술의 더 완전한 이해를 제공하기 위해 예로서 제공된다. 개시된 방법들은 본 명세서에 제시된 동작들 및 논리 흐름으로 제한되지 않는다. 각종 동작들의 순서가 변경되고 더 큰 동작의 일부로서 기술된 서브-동작들이 독립적으로 실행되는 대안의 실시예들이 고려된다.
본 발명을 위해, 용어 "서버(server)"는 프로세싱, 데이터베이스, 및 통신 설비들을 제공하는 서비스 포인트를 나타내는 것으로 이해해야 한다. 제한이 아니라, 예로서, 용어 "서버"는 연관된 통신 및 데이터 저장 장치 및 데이터베이스 설비들을 가진 단일 물리적 프로세서를 나타내거나, 프로세서들 및 연관된 네트워크 및 저장 장치들의 네트워킹된 또는 클러스터링된 복합체뿐만 아니라, 서버에 의해 제공된 서비스들을 지원하는 운영 소프트웨어 및 하나 또는 그 이상의 데이터베이스 시스템들 및 애플리케이션 소프트웨어를 나타낼 수 있다.
컴퓨팅 장치는, 예를 들어, 유선 또는 무선 네트워크를 통해, 신호들을 송신 또는 수신할 수 있거나, 또는 신호들을 처리하거나, 예를 들어, 메모리에 물리 메모리 상태들로서 저장할 수 있으며, 따라서, 서버로서 동작할 수 있다. 따라서, 서버로서 동작할 수 있는 장치들은, 예로서, 전용 랙-장착 서버들, 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 셋톱박스들, 상술된 장치들의 2개의 또는 그 이상의 특징들 등의 각종 특징들을 조합한 통합 장치들 등을 포함할 수 있다. 서버들은 구성 또는 기능 면에서 폭넓게 변할 수 있지만, 일반적으로 서버는 하나 또는 그 이상의 중앙 처리 장치들 및 메모리를 포함할 수 있다. 또한, 서버는 하나 또는 그 이상의 저장 장치들, 하나 또는 그 이상의 전원들, 하나 또는 그 이상의 유선 또는 무선 네트워크 인터페이스들, 하나 또는 그 이상의 입력/출력 인터페이스들, 또는 Windows Server, Mac OS X, Unix, Linux, FreeBSD 등의 하나 또는 그 이상의 운영 체제들을 포함할 수 있다.
명세서 및 청구항들에서, 용어들은 명확히 기술된 의미를 넘어선 문맥에서 제안된 또는 함축된 미묘한 의미들을 가질 수 있다. 유사하게, 본 명세서에서 사용된 구절 "일 실시예에서"는 반드시 동일한 실시예를 말하는 것이 아니며, 본 명세서에서 사용된 구절 "다른 실시예에서"는 반드시 상이한 실시예를 말하는 것이 아니다. 예를 들어, 청구된 주제는 예시의 실시예들의 조합들을 전체적으로 또는 부분적으로 포함하는 것으로 의도된다. 일반적으로, 용어는 문맥에서의 용도로부터 적어도 부분적으로 이해될 수 있다. 예를 들어, 본 명세서에서 사용된 용어들, 예를 들어, "및", "또는", 또는 "및/또는" 등의 용어들은 이러한 용어들이 사용되는 문맥에 적어도 부분적으로 좌우될 수 있는 각종 의미들을 포함할 수 있다. 통상, "또는"은, A, B 또는 C와 같이, 리스트를 연상하는데 사용되면, 배타적인 의미로 사용되는 A, B 또는 C뿐만 아니라, 포괄적인 의미로 사용되는 A, B, 및 C를 의미하도록 의도된 것이다. 또한, 본 명세서에서 사용된 용어 "하나 또는 그 이상의"는, 적어도 부분적으로 문맥에 좌우되어, 단수의 의미로 임의의 특징, 구조, 또는 특성을 기술하는데 사용될 수 있거나, 또는 복수의 의미로 임의의 특징들, 구조들 또는 특성들의 조합들을 기술하는데 사용될 수 있다. 유사하게, "a(한, 하나의)", "an(한, 하나의)", 또는 "the(그, 상기)" 등의 용어들은, 다시, 적어도 부분적으로 문맥에 좌우되어, 단수적 용법을 전달하거나 또는 복수적 용법을 전달하는 것으로 이해될 수 있다. 또한, 용어 "~에 기초하여"는 반드시 배타적인 집합의 요인들을 전달하도록 의도된 것은 아니라고 이해될 수 있으며, 대신에, 다시, 적어도 부분적으로 문맥에 좌우되어, 반드시 명확히 기술되지는 않은 추가 요인들의 존재를 허용할 수 있다.
본 발명은 일반적으로 실시간으로 제2 3D 프로그램에서의 렌더링을 위해 제1 3D 프로그램으로부터 객체를 내보내는 것에 관한 것이다. 일 실시예에서, 컴퓨터 시스템은 복수의 애플리케이션 인스턴스들을 호스팅하며, 각각의 애플리케이션 인스턴스는 로컬 클라이언트 애플리케이션에 대응한다. 컴퓨터 시스템은, 컴퓨터 시스템의 그래픽 처리 장치의 리소스들을 사용해서, 컴퓨터 시스템 디스플레이 상의 개별 윈도우들에 로컬 클라이언트 애플리케이션들 중 적어도 2개에 대응하는 애플리케이션 인스턴스들의 그래픽 출력을 동시에 렌더링한다. 제1 애플리케이션으로부터 3D 객체를 내보내고자 하는 사용자는 제1 윈도우로부터 객체를 선택하여, 객체를 제2 윈도우로 드래그한다. 사용자가 객체를 드래그함에 따라, 그 객체는 사용자의 드래그 커맨드들에 따라 컴퓨터 디스플레이에 렌더링된다. 그 후, 사용자는 제2 윈도우에 렌더링된 제2 애플리케이션에 객체를 드롭하며, 객체를 실시간으로 제2 애플리케이션으로 가져온다.
렌더링은 통상 컴퓨터 프로그램들에 의해 모델로부터 이미지를 생성하는 프로세스라고 생각될 수 있다. 모델은 통상 3차원(3D) 객체들의 기술이며, 엄격히 정의된 언어 또는 데이터 구조로 표현될 수 있다. 모델은 기하학, 관점, 텍스처, 조명, 음영, 움직임, 및 다른 적합한 타입들의 정보를 포함할 수 있다. 모델이 렌더링되는 이미지는, 픽셀들의 집합에 의해 형성될 수 있는, 디지털 이미지 또는 래스터 그래픽 이미지일 수 있다. 본 발명은 렌더링의 개념을 임의의 애플리케이션의 임의의 출력을 나타내는 이미지의 생성으로 확장한다. 렌더링은, 2차원(2D) 데이터뿐만 아니라 3D 데이터를 포함하는, 임의의 데이터에 기초하여 실행될 수 있다. 3D 모델들에 기초한 이미지들의 생성 외에, 특정 실시예들은, 예를 들어, 제한 없이, 웹 브라우징 애플리케이션들, 워드 프로세싱 애플리케이션들, 스프레드 시트 애플리케이션들, 멀티미디어 애플리케이션들, 과학 및 의학 애플리케이션들, 및 게임 애플리케이션들 등의 애플리케이션들의 출력을 나타내는 이미지들을 렌더링할 수 있다.
3D 프로그램으로부터 객체를 변경하는 것은, 불가능하지는 않더라도, 통상 몹시 힘든 태스크이다. 사용자가 3D Studio Max 또는 Maya 등의 3D 그래픽 프로그램에서 변경하기 위한 원래의 OBJ 또는 다른 포맷 파일을 갖지 않으면, 사용자는 제1 3D 프로그램에 의해 사용된 3D 그래픽 파일을 역 컴파일링해야만 한다. 그래픽 파일은 프로그램의 설치 경로 내의 소정의 디렉터리에 저장되거나, 또는 실제 프로그램 코드 자체로 컴파일링될 수 있다. 어쨌든, 사용자는 3D 그래픽 프로그램에 의해 판독 가능한 포맷으로 객체 파일을 획득하기 위해 몇 개의 단계들을 수행해야만 한다. 유사하게, 객체 파일을 변경한 후에, 제1 프로그램 내로부터 3D 객체의 모습을 보기 위해, 사용자는 객체를 제1 프로그램의 코드로 역 컴파일링하거나 가져와야만 한다. 이 프로세스는 시간 소모가 크며, 원격 애플리케이션들의 사용에 의해 악화된다.
렌더링은 서버에 의해 실행되기에 적합한 타입의 태스크일 수 있는데, 그 이유는 특히 렌더링된 이미지들이 높은 해상도 및 높은 품질일 때, 렌더링 프로세스는 매우 계산 집약적일 수 있으므로 종종 리소스를 요구하기 때문이다. 과거에, 구식 컴퓨터 시스템이 3차원 모델을 단일 2D 이미지로 렌더링하는 데에는 수 시간 또는 수 일이 걸릴 수 있다. 컴퓨터 하드웨어, 특히, 컴퓨터 그래픽 애플리케이션들(예를 들어, 게임, 멀티미디어, 엔터테인먼트, 또는 지도 제작)을 위해 특별히 설계된 컴퓨터 하드웨어의 발달 및 발전에 따라, 현재의 컴퓨터 시스템들은 수 초 또는 수 밀리초 내에 각각의 이미지를 렌더링할 수 있다. 사실상, 종종 모델을 단일 이미지로 렌더링하기 위해 서버의 모든 가용 리소스들이 필요하지는 않다. 이에 따라, 서버-측 렌더링을 사용하는 원격 애플리케이션들이 더 보급되게 되었다.
제2 3D 프로그램으로 가져오기 위해 3D 객체를 제1 3D 프로그램으로부터 내보내는 것을 더 용이하게 하기 위해, 소프트웨어 엔진은 드로우 커맨드들을 제1 애플리케이션으로부터 3D 그래픽 렌더링 파이프라인으로 인터셉트함으로써 특정 객체를 선택하는 사용자 커맨드들에 응답하고, 제2 애플리케이션으로부터의 소정의 장면을 위해 드로우 커맨드들에 삽입할 수 있다. 특정 실시예들에서, 제2 애플리케이션은 별개의 서버에서 호스팅된 원격 애플리케이션일 수 있다. 다른 실시예들에서, 제2 애플리케이션은 서버측 렌더링을 가진 원격 애플리케이션일 수 있다.
도 1은 로컬 제1 애플리케이션(105) 및 로컬 제2 애플리케이션(106)을 실행하는 예시의 컴퓨터 시스템(101)을 도시한다. 정상 동작에서, 사용자는, 예를 들어, 사용자 하드웨어(108) 조작을 통해 시스템(101)을 활성화하고, I/O 인터페이스(107)는 사용자/하드웨어(108)로부터의 신호들을 제1 애플리케이션(105) 또는 제2 애플리케이션(106)에 대한 명령들로 번역한다. 애플리케이션들(105 및 106) 둘 다 2D 또는 3D 장면들을 렌더링하기 위해 렌더링 API(104)에 드로우 커맨드들을 출력한다. 렌더링 API(104)는 드로우 커맨드들을 디스플레이(102)에 2D 또는 3D 장면을 렌더링하기 위해 그래픽 하드웨어(103)에 의해 실행되는 명령들로 변환하기 위해 드로우 커맨드들을 렌더링 파이프라인(도시되지 않음)을 통해 전달한다. 일 실시예에서, 제1 애플리케이션(105)은 디스플레이(102)의 일부분의 제1 윈도우에 렌더링되고, 제2 애플리케이션(106)은 디스플레이(102)의 상이한 일부분의 제2 윈도우에 렌더링된다. 일 실시예에서, 엔진(109)은 제1 애플리케이션(105) 및 제2 애플리케이션(106)과 함께 동시에 시스템(101) 내에 포함된 프로세서(도시되지 않음)에서 실행중인 소프트웨어 루틴이다. 엔진(109)은 드래그 앤 드롭 프로세스를 개시하는 명령들이 있는지 I/O 인터페이스(107)를 끊임없이 모니터한다. 이 명령들이 검출될 때, 명령들은 경로(110)를 통해 엔진(109)으로 우회된다. 사용자는, 특별한 키스트로크, 마우스 또는 다른 포인팅 장치 입력과 관련하여 미리 정해진 키의 홀딩, 터치 입력 장치에서의 탭, 또는 터치 입력 장치에서의 특정 제스처를 포함하지만, 이들로만 제한되지 않는, 각종 방법들로 드래그 앤 드롭 프로세스를 개시할 수 있다. 커맨드들이 경로(110)를 통해 엔진(109)으로 우회되면, 엔진(109)은 사용자가 임의의 애플리케이션 윈도우에서 소정의 객체를 선택할 수 있게 한다. 또한, 엔진(109)은 제1 애플리케이션(105) 및 제2 애플리케이션(106)으로부터 렌더링 API(104)로의 드로우 커맨드들을 모니터하고, 우회된 사용자 입력들(110)을 사용하여 장면의 어떤 객체 또는 객체들을 사용자가 선택하기를 원하는지를 결정한다. 엔진(109)은 사용자가 선택하기를 원하는 객체 또는 객체들에 대응하는 드로우 커맨드들을 추출하여, 드래그 프로세스 중의 렌더링을 위해 렌더링 API(104)에 전달한다. 드롭 프로세스 중에, 엔진(109)은 제2 애플리케이션(106)의 윈도우에서의 렌더링을 위해 렌더링 API(104)에 객체 또는 객체들에 대한 드로우 커맨드들을 계속해서 전달하지만, 동시에 드로우 커맨드들을 제2 애플리케이션(106)으로 가져오기 위한 포맷으로 변환한다. 변환 및 가져오기 프로세스의 완료시, 엔진(109)은 렌더링 API(104)에 드로우 커맨드들을 송신하는 것을 멈추고, 선택된 객체 또는 객체들이 제2 애플리케이션(106)을 통해 배타적으로 렌더링된다. 그랩, 드래그, 및 드롭 프로세스들의 더 상세한 설명이 이하에 제공된다. 본 설명을 간소화하기 위해 2개의 애플리케이션들만이 도 1에 도시되어 있다. 그러나, 실제로, 컴퓨팅 시스템(101)은 본 명세서에 기술된 실시예들에 따라 하나의 애플리케이션으로부터 다른 애플리케이션으로 내보낼 수 있는 각종 객체들을 렌더링하는 임의의 수의 애플리케이션들을 동시에 실행할 수 있음을 알 수 있다.
도 2는 드래그 앤 드롭 프로세스의 고수준 흐름을 도시한다. 단계(201)에서, 컴퓨팅 시스템은 다수의 애플리케이션들의 실행을 시작한다. 단계(202)에서, 사용자는 도 4에 상세히 기술된 그랩 프로세스를 개시한다. 단계(203)에서, 사용자는 제1 애플리케이션을 디스플레이하는 윈도우로부터 제2 객체를 디스플레이하는 윈도우로 희망 객체를 드래그하며, 이는 도 5에 상세히 기술된다. 마지막으로, 단계(204)에서, 사용자는 제2 애플리케이션에 대한 윈도우로 객체를 드롭하며, 이는 재진입 프로세스라고도 하고, 도 6에 상세히 더 기술된다.
도 3은 드래그 앤 드롭 프로세스 중의 사용자의 디스플레이의 표현을 도시한다. 처음에, 컴퓨팅 시스템의 디스플레이는 2개의 별개의 윈도우들, 제1 애플리케이션의 렌더링된 출력을 포함하는 제1 윈도우(301), 및 제2 애플리케이션의 렌더링된 출력을 포함하는 제2 윈도우(304)를 포함한다. 제1 윈도우(301) 내에서 객체들(303a 및 303b)이 렌더링된다. 실제로, 제1 윈도우(301) 및 제2 윈도우(304)는 임의의 수의 객체들을 포함할 수 있다. 도 3은 단지 설명을 위해서 2개의 객체들로 한정된다.
제1 윈도우(301)는 도 3에서 확대된 뷰(305)로 도시되어 있다. 사용자는, 객체(303a)의 싱글 포인트(307)를 입력 장치로 클릭하거나 또는 터치 스크린에서 가볍게 두드리거나, 입력 장치로 또는 터치 스크린에서 객체(303a)를 통해 경로(308)를 그리거나, 또는 입력 장치로 또는 터치 장치에서 객체(303a) 주위에 마키(marquee)(306)를 그리는 등, 각종 상이한 방법들로 객체(303a)를 선택한다. 제스처들, 선택 지팡이(selection wands), 및 다각형 마키들을 포함하지만, 이들로만 제한되지 않는, 다른 입력 방법들이 당업자에 의해 쉽게 상상될 수 있다.
객체(303a)를 선택함과 동시에, 사용자는 디스플레이 상의 객체를 경로(302)를 따라 제1 윈도우(301)로부터 제2 윈도우(304)로 드래그한다. 일부 실시예들에서, 객체는 복사되고, 복사본(303c)이 제1 윈도우(301)와 제2 윈도우(304) 사이에 뻗어 있는 중간 공간에서 경로(302)를 따라 렌더링되는 동안, 윈도우(301)에 렌더링된 상태로 머문다. 다른 실시예들에서, 실제 객체(303a)는 윈도우(301)로부터 윈도우(304)로 이동된다. 경로(302)는 사용자 입력들에 의해 결정되고, 윈도우(301)와 윈도우(304) 간에 임의의 경로를 취할 수 있다.
제2 윈도우(304)에 대한 포커스 경계를 가로지를 때, 엔진은 재진입, 또는 드롭 프로세스를 개시한다. 사용자가 윈도우(304)에서 자신이 원하는 대로 객체(303a)를 배치했을 때, 사용자는 윈도우(304)로 객체(303a)를 드롭하는 커맨드를 개시한다. 이때, 드래그 앤 드롭 프로세스는 완료되며, 엔진은 제2 윈도우(304)에서의 렌더링을 위해 객체(303d)로서 객체(303a)를 제2 애플리케이션으로 가져온다.
도 4는 그랩 프로세스의 프로세스 흐름을 도시한다. 단계(401)에서, 엔진은 희망 객체를 선택하는 선택 입력을 수신한다. 상술된 바와 같이, 본 발명은 다수의 선택 입력 방법들을 상상한다. 선택 입력을 수신하면, 엔진은 렌더링 API를 향하는 제1 애플리케이션으로부터의 드로우 커맨드들을 엔진 자신으로 우회한다. 이 드로우 커맨드들로부터, 엔진은 제1 애플리케이션에 의해 렌더링된 장면을 재현할 수 있다. 3D 장면의 맥락에서, 엔진은 이제 장면을 렌더링하기 위해 제1 애플리케이션에 의해 사용된 카메라 시점 및 시야(camera point and field of view)뿐만 아니라, 소정의 장면의 모든 3D 객체들을 가진다.
일 실시예에서, 사용자 입력은 희망 객체 상의 제1 윈도우의 싱글 포인트이다. 단계(402)에서, 엔진은 입력 선택을 렌더링된 디스플레이의 그래픽 객체로 분석(resolve)한다. 2차원 입력을 3차원 객체로 변환(translate)하기 위해, 3D 객체 선택의 전통적인 방법들이 사용된다. 이러한 한 방법은 사용자 입력의 로케이션에서 3D 장면의 근거리 면에 카메라를 할당하고, 카메라로부터 원거리 면으로 광선 투사하여, 광선이 닿는 제1 객체를 선택하는 것이다. 다른 실시예에서, 선택 도구는 광선이 닿는 제1 객체에 접촉하는 모든 객체들을 선택한다. 다른 실시예에서, 선택 도구는 광선이 닿는 제1 객체와 동일한 객체 식별자, 예를 들어, 태그 또는 다른 메타데이터를 가진 모든 객체들을 선택한다. 다른 실시예에서, 선택 도구는 광선이 닿는 제1 객체와 동일한 텍스처를 가진 모든 객체들을 선택한다. 또 다른 실시예에서, 선택 도구는 광선이 닿는 제1 객체와 동일한 움직임 벡터를 가진 모든 객체들을 선택한다.
단계(403)에서, 엔진은 사용자 입력들에 기초하여 사용자 선택을 필터링 또는 확장한다. 사용자는, 원래의 객체가 선택된 방법과 동일한 방법으로, 또는 선택을 증가시키기 위해 변경자를 유지(holding down)하고 선택될 다른 객체들 주위에 마키를 그리는 등의 어떤 다른 입력 방법으로, 선택된 객체를 증가시키기로 선택할 수 있다. 유사하게, 사용자는 동일한 움직임 벡터, 텍스처, 메타데이터 등을 가진 다른 객체들을 선택하기 위한 팝업 윈도우를 제시받을 수 있다. 마찬가지로, 사용자는 유사한 방법으로 선택으로부터 객체들을 필터링할 수 있다. 사용자는 선택으로부터 객체들을 빼기 위한 키를 가질 수 있고, 선택으로부터 배제되도록 개별 객체들을 클릭하거나 또는 객체들 주위에 마키를 그릴 수 있다. 또한, 사용자는 소정의 텍스처, 움직임 벡터, 메타데이터 태그 등을 가진 객체들을 필터링하기 위한 드롭 다운 메뉴를 제공받을 수 있다. 본 발명은 선택에 추가하거나 선택으로부터 빼는 당업자에게 공지된 다수의 방법들을 상상한다.
사용자가 만족한 후에, 사용자는 단계(404)에서 드래그 프로세스를 개시하는 커맨드들을 입력한다. 커맨드들은 선택된 객체를 드래그하기 위해 입력 장치를 이동시키는 것과 함께 입력 장치의 버튼을 유지하는 것, 터치 입력 장치에서의 특정 제스처, 입력 장치를 이동시키는 것과 함께 키보드에서 키를 유지하는 것 등을 포함할 수 있지만, 이들로만 제한되지는 않는다. 본 발명은 드래그 프로세스(404)를 개시하는 다수의 방법들을 상상한다.
도 5는 드래그 프로세스의 프로세스 흐름을 도시한다. 단계(501)에서, 엔진은 컴퓨팅 시스템 디스플레이에서 윈도우를 생성한다. 일 실시예에서, 윈도우는 가시적 경계를 가질 수 있다. 일 실시예에서, 윈도우는 경계가 없다. 경계 없는 윈도우는 단지 완전히 투명한 제2 디스플레이에서의 지정된 영역이며, 디스플레이에서 실제로 렌더링되는 유일한 객체들은 경계 없는 윈도우 내에 포함된 그래픽 객체들이다. 단계(502)에서, 엔진은 경계 없는 윈도우에 객체를 기록한다. 엔진은 제1 애플리케이션으로부터 선택과 연관된 드로우 커맨드들을 엔진으로 우회함으로써 이 단계를 실행한다. 그 후, 엔진은 경계 없는 윈도우 내에 렌더링될 객체들로서 드로우 커맨드들을 렌더링 API로 송신한다. 렌더링 API는 정상적으로 렌더링 파이프라인을 통해 드로우 커맨드들을 처리하고, 경계 없는 윈도우 내에서 디스플레이의 장면을 렌더링한다. 경계 없는 윈도우는 투명하기 때문에, 객체만이 제1 윈도우로부터 제2 윈도우로 이동하는 것으로 보인다. 따라서, 드래그 프로세스 중에, 렌더링 API는 엔진 외에 적어도 2개의 애플리케이션들로부터의 드로우 커맨드들을 처리한다.
엔진은 입력 출력 인터페이스(107)를 통해 사용자로부터 수신된 경계 없는 윈도우 이동 커맨드들에 따라 선택된 객체 또는 객체들과 연관된 드로우 커맨드들을 송신한다. 상술된 바와 같이, 본 발명은 사용자가 드래그 프로세스 중에 경계 없는 윈도우의 위치를 조정하는 다수의 입력 방법들을 상상한다.
엔진이 경계 없는 윈도우를 이동시키는 사용자 커맨드들을 수신하고 있지 않은 언제라도, 엔진은 단계(504)에서 드롭 커맨드가 발행되었는지를 결정하기 위해 사용자 입력 커맨드를 폴링한다. 드롭 커맨드의 검출은 프로세스를 단계(505)의 재진입 프로세스로 보낸다. 드롭 커맨드들은 사용자가 제2 윈도우에 렌더링된 제2 애플리케이션으로 객체를 가져오기를 원함을 나타내는 사용자 입력 장치로부터의 임의의 커맨드들일 수 있다. 드롭 커맨드들은, 마우스 또는 다른 입력 장치에서 유지된 버튼을 해제하는 것, 터치 입력 장치에서의 제스처, 또는 입력 장치에서의 다른 키 누름을 포함할 수 있지만, 이들로만 제한되지 않는다. 드롭 커맨드들을 위한 다른 사용자 입력 방법들이 당업자에 의해 상상될 수 있다. 일 실시예에서, 재진입 프로세스는 객체가 제2 윈도우의 포커스 경계를 지나 드래그되자마자 시작된다.
도 6은 재진입 프로세스의 프로세스 흐름을 도시한다. 단계(601)에서, 재진입 프로세스가 시작된다. 재진입 프로세스는 사용자로부터의 명확한 드롭 명령에 의해, 또는 선택을 제2 윈도우의 포커스 경계를 가로질러 드래그하는 동작에 의해 트리거될 수 있다. 재진입 프로세스가 시작될 때, 엔진은 드로우 커맨드들로부터 객체를 제2 애플리케이션으로의 구현을 위한 포맷으로 변환하기 시작한다. 3D 맥락에서, 엔진은 드로우 커맨드들을 제2 애플리케이션으로의 구현을 위한 3D 객체 파일로 변환하기 시작한다. 예를 들어, 사용자는 제1 윈도우에서 3D 게임 애플리케이션을 실행중이고 소정의 모델을 편집하기 위해 제2 윈도우에서 3D 그래픽 편집 프로그램을 실행중일 수 있다. 희망 객체를 선택한 후에, 사용자는 객체를 제2 윈도우로 드래그하고, 재진입 프로세스는 객체와 연관된 드로우 커맨드들을 OBJ 파일 등의 3D 객체 파일로 변환하기 시작한다.
단계(602)에서, 엔진은 객체와 연관된 드로우 커맨드들을 렌더링 API로 전달함으로써 객체를 계속해서 렌더링한다. 변환 프로세스는 시간 소모가 크며 프로세서 집약적이기 때문에, 변환이 발생하고 있는 동안 엔진은 계속해서 객체를 렌더링한다. 엔진은 제2 애플리케이션으로부터 렌더링 API로의 드로우 커맨드 스트림으로 드로우 커맨드들을 삽입함으로써 객체를 렌더링한다. 따라서, 재진입 중에, 엔진은 단지 제2 윈도우의 위에 오버레이된 경계 없는 윈도우에서 객체를 렌더링하고 있을 뿐만 아니라, 실제로, 환경 효과들을 포함해서, 제2 애플리케이션 자체가 객체를 가져와서 렌더링하는 것처럼 객체를 제2 애플리케이션에 통합하고 있다. 이 특징의 상세한 설명은 도 7에서 제공된다.
단계(603)에서, 변환은 완료되고, 객체 파일을 제2 애플리케이션으로 가져온다. 가져오기 프로세스는 각각의 애플리케이션 및 각각의 파일 포맷에 대해 상이하다. 3D 그래픽 편집 프로그램의 맥락에서, 사용자가 3D 그래픽 편집 프로그램으로부터 직접 파일을 연 것처럼 파일을 프로그램의 작업 공간으로 가져온다. 단계(604)에서, 객체를 제2 프로그램으로 가져오는 데 성공한 후에, 엔진은 객체의 렌더링을 중단하고, 객체는 제2 애플리케이션에 의해 렌더링된다. 사용자에게 다수의 렌더링 프로세스들 또는 파일 변환에 대한 어떠한 표시도 없이, 전체 재진입 프로세스는 매끄럽게 발생한다. 사용자는 엔진에 의한 이러한 배경 프로세스들을 알지 못하며, 객체는 객체가 단순히 제1 윈도우로부터 드래그되어 제2 윈도우에 드롭된 것처럼 렌더링된다.
도 7은 환경 효과들을 통합한 드래그 앤 드롭 프로세스의 표현을 도시한다. 제1 윈도우(701)에서, 단순함을 위해 구로 도시된 객체(702a)가 윈도우(701)의 상부 좌측으로부터의 광원(703)과 함께 놓여 있다. 제2 윈도우(704)에서, 3D 장면의 환경은 상부 우측으로부터의 광원(705)을 포함한다. 그랩 프로세스 중에, 엔진은 양 윈도우들(701 및 704)의 환경 효과들 및 조명을 획득하고, 각각의 윈도우로부터의 객체의 거리에 따라 선택된 객체(702a)에 환경 효과들 및 조명을 적응적으로 적용한다. 따라서, 객체(702a)가 제2 윈도우 쪽으로 드래그됨에 따라, 표현들(702b, 702c, 702d 및 702e)로 도시된 바와 같이, 객체(702a)의 음영은 광원들(703 및 705)로부터의 거리에 따라 변한다. 엔진은 드로우 커맨드들을 렌더링 API로 전달하기 전에 이 환경 효과들을 객체에 대한 드로우 커맨드들에 적용함으로써 이 환경 효과들을 렌더링한다. 환경 효과들은 단지 조명으로 제한되지 않으며, 당업자가 상상할 수 있는 바와 같이, 안개, 연기, 흐려짐, 입자 효과, 반사, 및 다른 공지된 환경 효과들에 적용될 수 있다.
도 8은 2개의 애플리케이션들 중 하나가 애플리케이션 서버(809)에서 실행중인 원격 애플리케이션(810)인 컴퓨팅 시스템(801)의 일 실시예를 도시한다. 이 경우에, 엔진(805)의 동작은 변하지 않는다. 엔진은 I/O 인터페이스(807)로부터 명령들을 인터셉트하고, 드래그 앤 드롭 프로세스의 동작 중에 경로(811)를 따라 엔진으로 명령들을 우회한다. 사용자가 로컬 애플리케이션(806)으로부터 드래그하여 원격 애플리케이션(810)으로 드롭하고 있다고 가정하면, 로컬 애플리케이션(806)으로부터 렌더링 API(804)로의 드로우 커맨드들은 그랩 프로세스 중에 인터셉트되어 사용자가 희망 객체들을 선택하는 데 사용된다. 드래그 프로세스 중에, 엔진(805)은 선택을 위한 드로우 커맨드들을 렌더링 API(804)로 우회함으로써 경계 없는 윈도우에서의 객체의 렌더링을 처리한다. 사용자가 원격 애플리케이션(810)의 윈도우로 객체를 드롭할 때, 엔진(805)은 선택된 객체를 계속해서 렌더링하면서 변환 프로세스를 시작한다. 변환의 완료시, 변환된 객체 파일은 원격 애플리케이션(810)으로 가져오기 위해 네트워크 링크(814)를 통해 애플리케이션 서버(809)로 전송된다. 가져오기 후에, 엔진(805)은 렌더링 API(804)로 드로우 커맨드들을 전달하는 것을 중단하고, 시스템은 정상적으로 동작한다. 다른 실시예에서, 사용자는 객체를 원격 애플리케이션으로부터 로컬 호스팅 애플리케이션으로 드래그한다. 시스템은 이 구성에서 거의 유사한 메커니즘에 의해 동작한다.
도 9는 애플리케이션들(908) 중 하나가 자신의 렌더링 API(909)를 통한 서버측 렌더링을 가진 애플리케이션 서버(907)에서 실행되는 원격 애플리케이션인 컴퓨팅 시스템(901)의 일 실시예를 도시한다. 예로서, 사용자는 로컬 애플리케이션(905)의 윈도우로부터 원격 렌더링 애플리케이션(908)의 윈도우로 애플리케이션을 드래그한다. 시스템(901)의 동작은 도 8과 거의 동일하다. 엔진(910)은 드래그 앤 드롭 프로세스의 지속 기간 동안 I/O 인터페이스(906)로부터 I/O 입력들을 인터셉트하고 이들을 경로(914)를 따라 우회한다. 그랩 프로세스 중에, 엔진(910)은 로컬 렌더링 API(904)를 향한 로컬 애플리케이션(905)으로부터의 드로우 커맨드들을 엔진으로 우회한다. 사용자가 객체를 선택한 후에, 엔진(910)은 커맨드들을 경로(915)를 따라 로컬 렌더링 API(904)로 우회한다. 드래그 프로세스 중에, 선택된 객체에 대한 우회된 드로우 커맨드들은 경계 없는 윈도우에서 객체를 렌더링하기 위해 로컬 렌더링 엔진(904)에 의해 렌더링된다. 재진입 프로세스의 개시와 동시에, 엔진은 원격 애플리케이션(908)으로 가져오기 위한 객체 파일로의 객체의 파일 변환을 시작한다. 파일이 변환될 때, 파일을 경로(916)를 따라 원격 애플리케이션(908)으로 가져온다. 그 후, 엔진은 로컬 렌더링 API(904)를 통해 객체를 렌더링하는 것을 정지하고, 객체는 원격 렌더링 API(909)를 통해 배타적으로 렌더링된다.
사용자가 애플리케이션(908) 등의 서버측 렌더링을 가진 원격 애플리케이션으로부터 객체를 선택하기를 원하는 실시예에 대한 특별한 경우가 존재한다. 이러한 실시예에서, 엔진은 원격 렌더링 API(909)에 들어가기 전에 원격 애플리케이션(908)의 출력에 액세스할 수 있어야만 한다. 이는 원격 애플리케이션 서버(907)에 상주하는 소프트웨어, 또는 최소한, 엔진(910)이 원격 애플리케이션(908)과 렌더링 API(909) 간의 경로를 모니터하기 위한, 서버(907)로부터의 허가를 요구하는 특수한 구현이어야만 한다. 이러한 경우에, 애플리케이션(908)으로부터의 드로우 커맨드들은 네트워크 커넥션(913)을 통해 엔진(910)으로 우회된다. 이 특수한 경우는 서버측 렌더링을 가진 원격 애플리케이션으로부터 객체들을 그랩할 때만 발생한다.
본 발명은 한 애플리케이션으로부터 다른 애플리케이션으로 드래그하거나, 또는 한 애플리케이션으로부터 다수의 다른 애플리케이션들로 객체를 복사/붙이기하는 변형들 등의 다수의 구성들을 상상한다. 이러한 실시예들은 당업자에 의해 쉽게 고려될 것이다. 본 발명이 제1 애플리케이션으로부터 제2 애플리케이션으로 드래그 앤 드롭하는 단일 사례를 기술하지만, 당업자는 제1 애플리케이션으로부터 제2 애플리케이션으로의 드래그, 객체 편집, 및 실시간으로 변경들을 보기 위해 편집된 객체를 제1 애플리케이션으로 다시 드래그하는 것을 상상할 수 있다.
특정 실시예들은 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로서 구현될 수 있다. 예를 들어, 제한 없이, 하나 또는 그 이상의 컴퓨터 시스템들은 본 명세서에 기술된 또는 도시된 하나 또는 그 이상의 프로세스들의 하나 또는 그 이상의 단계들을 수행하기 위해 특정 로직 또는 소프트웨어를 실행할 수 있다. 하나 또는 그 이상의 컴퓨터 시스템들은, 적절한 경우, 통합 또는 분산, 스패닝(spanning) 다수의 컴퓨터 시스템들 또는 다수의 데이터센터들일 수 있다. 본 발명은 임의의 적합한 컴퓨터 시스템을 고려한다. 특정 실시예들에서, 본 명세서에 기술된 또는 도시된 하나 또는 그 이상의 프로세스들의 하나 또는 그 이상의 단계들의 수행은 하나 또는 그 이상의 특정 지리적 로케이션들로 반드시 제한될 필요는 없으며, 시간적인 한계들을 반드시 가질 필요도 없다. 예로서, 제한 없이, 하나 또는 그 이상의 컴퓨터 시스템들은, 적절한 경우, "실시간"으로, "오프라인"으로, "배치 모드(batch mode)"로, 다른 식으로, 또는 상술된 바의 적합한 조합으로 그의 기능들을 수행할 수 있다. 하나 또는 그 이상의 컴퓨터 시스템들은, 적절한 경우, 상이한 시간에, 상이한 로케이션들에서, 상이한 프로세싱을 사용해서, 그의 기능들의 하나 또는 그 이상의 부분들을 수행할 수 있다. 본 명세서에서, 로직에 대한 언급은, 적절한 경우, 소프트웨어를 망라할 수 있으며, 그 역도 마찬가지다. 소프트웨어에 대한 언급은, 적절한 경우, 하나 또는 그 이상의 컴퓨터 프로그램들을 망라할 수 있으며, 그 역도 마찬가지다. 소프트웨어에 대한 언급은, 적절한 경우, 데이터, 명령들, 또는 둘 다를 망라할 수 있으며, 그 역도 마찬가지다. 유사하게, 데이터에 대한 언급은, 적절한 경우, 명령들을 망라할 수 있으며, 그 역도 마찬가지다.
하나 또는 그 이상의 컴퓨터 판독 가능 저장 매체는 특정 실시예들을 구현하는 소프트웨어를 저장 또는 다른 식으로 구현할 수 있다. 컴퓨터 판독 가능 매체는, 적절한 경우, 소프트웨어를 실어 나르고, 전달하고, 포함하고, 수용하고, 유지하고, 전파하고, 보유하고, 저장하고, 송신하고, 전송하고, 또는 다른 식으로 구현할 수 있는 임의의 매체일 수 있다. 컴퓨터 판독 가능 매체는, 적절한 경우, 생물, 화학, 전자, 전자기, 적외선, 자기, 광, 양자, 또는 다른 적합한 매체 또는 둘 이상의 이러한 매체들의 조합일 수 있다. 컴퓨터 판독 가능 매체는 하나 또는 그 이상의 나노미터-스케일 컴포넌트들을 포함할 수 있으며, 또는 다른 식으로 나노미터-스케일 설계 또는 제조를 구현할 수 있다. 예시의 컴퓨터 판독 가능 저장 매체는 콤팩트 디스크(CD), 필드-프로그래머블 게이트 어레이(FPGA), 플로피 디스크, 플롭티컬 디스크(floptical disks), 하드 디스크, 홀로그래픽 저장 장치, 집적 회로(IC)(예를 들어, 주문형 집적 회로(ASIC)), 자기 테이프, 캐시, 프로그래머블 로직 장치(PLD), 랜덤-액세스 메모리(RAM) 장치, 판독 전용 메모리(ROM) 장치, 반도체 메모리 장치, 및 다른 적합한 컴퓨터 판독 가능 저장 매체를 포함하지만, 이들로만 제한되지 않는다.
특정 실시예들을 구현하는 소프트웨어는, 적절한 경우, 임의의 적합한 프로그래밍 언어(절차적 또는 객체 지향적일 수 있음) 또는 프로그래밍 언어들의 조합으로 작성될 수 있다. 임의의 적합한 타입의 컴퓨터 시스템(예를 들어, 단일- 또는 다중-프로세서 컴퓨터 시스템) 또는 시스템들이, 적절한 경우, 특정 실시예들을 구현하는 소프트웨어를 실행할 수 있다. 범용 컴퓨터 시스템이, 적절한 경우, 특정 실시예들을 구현하는 소프트웨어를 실행할 수 있다.
예를 들어, 도 10은 특정 실시예들의 하나 또는 그 이상의 부분들을 구현하기에 적합한 예시의 컴퓨터 시스템(1000)을 도시한다. 본 발명이 특정 구성의 특정 컴포넌트들을 가진 특정 컴퓨터 시스템(1000)을 기술 및 도시하지만, 본 발명은 임의의 적합한 구성의 임의의 적합한 컴포넌트들을 가진 임의의 적합한 컴퓨터 시스템을 고려한다. 더욱이, 컴퓨터 시스템(1000)은, 예를 들어, 하나 또는 그 이상의 집적 회로(IC), 하나 또는 그 이상의 인쇄 회로 기판(PCB), 하나 또는 그 이상의 핸드헬드 또는 다른 장치들(예를 들어, 이동 전화들 또는 PDA), 하나 또는 그 이상의 퍼스널 컴퓨터들, 또는 하나 또는 그 이상의 슈퍼 컴퓨터들 등의 임의의 적합한 물리적 형태를 취할 수 있다.
시스템 버스(1010)는 컴퓨터 시스템(1000)의 서브시스템들을 서로 연결한다. 본 명세서에서, 버스에 대한 언급은 공통 기능에 기여하는 하나 또는 그 이상의 디지털 신호 라인들을 망라한다. 본 발명은 임의의 적합한 버스 아키텍처들을 가진 임의의 적합한 버스 구조들(예를 들어, 하나 또는 그 이상의 메모리 버스들, 하나 또는 그 이상의 주변 버스들, 하나 또는 그 이상의 로컬 버스들, 또는 상술된 바들의 조합)을 포함하는 임의의 적합한 시스템 버스(1010)를 고려한다. 예시의 버스 아키텍처들은 산업 표준 아키텍처(ISA) 버스, 강화 ISA(EISA) 버스, 마이크로 채널 아키텍처(MCA) 버스, 비디오 전자 표준 위원회 로컬(VLB) 버스, PCI(Peripheral Component Interconnect) 버스, PCI-익스프레스 버스(PCI-X), 및 AGP(Accelerated Graphics Port) 버스를 포함하지만, 이들로만 제한되지 않는다.
컴퓨터 시스템(1000)은 하나 또는 그 이상의 프로세서들(1020)(또는 중앙 처리 장치(CPU))을 포함한다. 프로세서(1020)는 명령들, 데이터, 또는 컴퓨터 어드레스들의 임시 로컬 저장을 위한 캐시(1022)를 포함할 수 있다. 프로세서들(1020)은, 메모리(1030)를 포함하는, 하나 또는 그 이상의 저장 장치들에 연결된다. 메모리(1030)는 랜덤-액세스 메모리(RAM)(1032) 및 판독 전용 메모리(ROM)(1034)를 포함할 수 있다. 데이터 및 명령들은 프로세서들(1020)과 RAM(1032) 사이에서 양방향으로 전송될 수 있다. 데이터 및 명령들은 ROM(1034)으로부터 프로세서들(1020)로 단방향으로 전송될 수 있다. RAM(1032) 및 ROM(1034)은 임의의 적합한 컴퓨터 판독 가능 저장 매체를 포함할 수 있다.
컴퓨터 시스템(1000)은 프로세서들(1020)에 양방향으로 연결된 고정 저장 장치(1040)를 포함한다. 고정 저장 장치(1040)는 저장 제어 장치(1052)을 통해 프로세서들(1020)에 연결될 수 있다. 고정 저장 장치(1040)는 추가 데이터 저장 용량을 제공할 수 있으며, 임의의 적합한 컴퓨터 판독 가능 저장 매체를 포함할 수 있다. 고정 저장 장치(1040)는 운영 체제(OS)(1042), 하나 또는 그 이상의 실행물들(1044), 하나 또는 그 이상의 애플리케이션들 또는 프로그램들(1046), 데이터(1048) 등을 저장할 수 있다. 고정 저장 장치(1040)는 통상 주 저장 장치보다 더 느린 보조 저장 장치(예를 들어, 하드 디스크)이다. 적절한 경우들에서, 고정 저장 장치(1040)에 의해 저장된 정보는 가상 메모리로서 메모리(1030)에 통합될 수 있다.
프로세서들(1020)은, 예를 들어, 그래픽 제어(1054), 비디오 인터페이스(1058), 입력 인터페이스(1060), 출력 인터페이스(1062), 및 저장 인터페이스(1064) 등의 각종 인터페이스들에 연결될 수 있으며, 이들은 차례로 적절한 장치들에 각각 연결될 수 있다. 예시의 입력 또는 출력 장치들은 비디오 디스플레이, 트랙 볼, 마우스, 키보드, 마이크, 터치-센서티브 디스플레이, 트랜스듀서 카드 판독기, 자기 또는 종이 테이프 판독기, 태블릿, 스타일러스, 음성 또는 육필 인식기, 생체 측정 판독기, 또는 컴퓨터 시스템들을 포함하지만, 이들로만 제한되지 않는다. 네트워크 인터페이스(1056)는 프로세서들(1020)을 다른 컴퓨터 시스템 또는 네트워크(1080)에 연결할 수 있다. 네트워크 인터페이스(1056)에 따라, 프로세서들(1020)은 특정 실시예들의 단계들을 수행하는 과정에서 네트워크(1080)와 정보를 수신 또는 송신할 수 있다. 특정 실시예들은 오직 프로세서들(1020)에서만 실행될 수 있다. 특정 실시예들은 프로세서들(1020) 및 함께 동작하는 하나 또는 그 이상의 원격 프로세서들에서 실행될 수 있다.
컴퓨터 시스템(1000)이 네트워크(1080)에 연결된 네트워크 환경에서, 컴퓨터 시스템(1000)은 네트워크(1080)에 연결된 다른 장치들과 통신할 수 있다. 컴퓨터 시스템(1000)은 네트워크 인터페이스(1056)를 통해 네트워크(1080)와 통신할 수 있다. 예를 들어, 컴퓨터 시스템(1000)은 네트워크 인터페이스(1056)에서 하나 또는 그 이상의 착신 패킷들의 형태로 네트워크(1080)로부터 정보(예를 들어, 다른 장치로부터의 요청 또는 응답)를 수신할 수 있으며, 메모리(1030)는 다음 프로세싱을 위해 착신 패킷들을 저장할 수 있다. 컴퓨터 시스템(1000)은 네트워크 인터페이스(1056)로부터 하나 또는 그 이상의 발신 패킷들의 형태로 네트워크(1080)에 정보(예를 들어, 다른 장치로의 요청 또는 응답)를 송신할 수 있으며, 메모리(1030)는 송신되기 전에 상기 정보를 저장할 수 있다. 프로세서들(1020)은, 특정 요구 사항들에 따라, 처리하기 위해 메모리(1030)의 착신 또는 발신 패킷에 액세스할 수 있다.
컴퓨터 시스템(1000)은 하나 또는 그 이상의 입력 장치들(1066)(키패드, 키보드, 마우스, 스타일러스 등을 포함할 수 있음), 하나 또는 그 이상의 출력 장치들(1068)(하나 또는 그 이상의 디스플레이들, 하나 또는 그 이상의 스피커들, 하나 또는 그 이상의 프린터들 등을 포함할 수 있음), 하나 또는 그 이상의 저장 장치들(1070), 및 하나 또는 그 이상의 저장 매체들(1072)을 가질 수 있다. 입력 장치(1066)는 컴퓨터 시스템(1000) 외부에 또는 내부에 있을 수 있다. 출력 장치(1068)는 컴퓨터 시스템(1000) 외부에 또는 내부에 있을 수 있다. 저장 장치(1070)는 컴퓨터 시스템(1000) 외부에 또는 내부에 있을 수 있다. 저장 매체(1072)는 컴퓨터 시스템(1000) 외부에 또는 내부에 있을 수 있다.
특정 실시예들은 본 명세서에 기술된 또는 도시된 하나 또는 그 이상의 프로세스들의 하나 또는 그 이상의 단계들을 수행하기 위한 소프트웨어를 구현하는 하나 또는 그 이상의 컴퓨터 판독 가능 저장 매체를 포함하는 하나 또는 그 이상의 컴퓨터 저장 제품들을 수반한다. 특정 실시예들에서, 매체, 소프트웨어, 또는 둘 다의 하나 또는 그 이상의 부분들이 본 명세서에 기술된 또는 도시된 하나 또는 그 이상의 프로세스들의 하나 또는 그 이상의 단계들을 수행하기 위해 특별히 설계 및 제조될 수 있다. 또한, 또는 대안으로서, 특정 실시예들에서, 매체, 소프트웨어, 또는 둘 다의 하나 또는 그 이상의 부분들이 본 명세서에 기술된 또는 도시된 하나 또는 그 이상의 프로세스들에 특정한 설계 또는 제조 없이 일반적으로 이용 가능할 수 있다. 예시의 컴퓨터 판독 가능 저장 매체는 CD들(예를 들어, CD-ROM들), FPGA들, 플로피 디스크들, 플롭티컬 디스크들, 하드 디스크들, 홀로그래픽 저장 장치들, IC들(예를 들어, ASIC들), 자기 테이프, 캐시들, PLD들, RAM 장치들, ROM 장치들, 반도체 메모리 장치들, 및 다른 적합한 컴퓨터 판독 가능 저장 매체를 포함하지만, 이들로만 제한되지 않는다. 특정 실시예들에서, 소프트웨어는 컴파일러가 생성할 수 있는 기계 코드이거나 또는 컴퓨터가 인터프리터를 사용해서 실행할 수 있는 고수준 코드를 포함하는 하나 또는 그 이상의 파일들일 수 있다.
예로서, 제한 없이, 메모리(1030)는 소프트웨어를 구현하는 하나 또는 그 이상의 컴퓨터 판독 가능 저장 매체를 포함할 수 있으며, 컴퓨터 시스템(1000)은 프로세서들(1020)이 소프트웨어를 실행한 결과로서 본 명세서에 기술된 또는 도시된 특정 기능을 제공할 수 있다. 메모리(1030)는 소프트웨어를 저장할 수 있고, 프로세서들(1020)은 소프트웨어를 실행할 수 있다. 메모리(1030)는 소프트웨어를 구현하는 대용량 저장 장치(1030)로부터 또는 네트워크 인터페이스(1056)를 통해 하나 또는 그 이상의 다른 소스들로부터 소프트웨어를 판독할 수 있다. 소프트웨어를 실행할 때, 프로세서들(1020)은, 메모리(1030)로 저장하기 위한 하나 또는 그 이상의 데이터 구조들을 정의하고, 특정 요구 사항들에 따라, 소프트웨어의 하나 또는 그 이상의 부분들에 의해 지시된 대로 데이터 구조들 중 하나 또는 그 이상의 구조들을 변경하는 것을 포함할 수 있는, 본 명세서에 기술된 또는 도시된 하나 또는 그 이상의 프로세스들의 하나 또는 그 이상의 단계들을 수행할 수 있다. 또한, 또는 대안으로서, 컴퓨터 시스템(1000)은, 본 명세서에 기술된 또는 도시된 하나 또는 그 이상의 프로세스들의 하나 또는 그 이상의 단계들을 수행하기 위해 소프트웨어 대신 또는 소프트웨어와 함께 동작할 수 있는, 회로에 하드와이어드 또는 달리 구현된 로직의 결과로서 본 명세서에 기술된 또는 도시된 특정 기능을 제공할 수 있다. 본 발명은, 특정 요구 사항들에 따라, 하드웨어와 소프트웨어의 임의의 적합한 조합을 망라한다.
특정 실시예들에서, 컴퓨터 시스템(1000)은 하나 또는 그 이상의 그래픽 처리 장치들(GPU)(1024)을 포함할 수 있다. 특정 실시예들에서, GPU(1024)는 그래픽 렌더링에서 흔히 사용되는 수학적 연산들에 관한 하나 또는 그 이상의 집적 회로들 및/또는 프로세싱 코어들을 포함할 수 있다. 일부 실시예들에서, GPU(1024)는 특수 그래픽 장치 명령 집합을 사용할 수 있으며, 다른 구현들에서, GPU는 CPU형 (예를 들어, 변경된 x86) 명령 집합을 사용할 수 있다. 그래픽 처리 장치(1024)는, 블리팅(blitting), 텍스처 매핑, 픽셀 음영, 프레임 버퍼링 등의 다수의 그래픽 프리미티브 동작들을 구현할 수 있다. 특정 실시예들에서, GPU(1024)는 그래픽 가속도계, 범용 GPU(GPGPU), 또는 임의의 다른 적합한 처리 장치일 수 있다.
특정 실시예들에서, GPU(1024)는 카드 슬롯을 통해 하드웨어 시스템 아키텍처에 부착되는 그래픽 또는 디스플레이 카드로 구현될 수 있다. 다른 구현들에서, GPU(1024)는 컴퓨터 시스템 아키텍처의 마더보드에 통합될 수 있다. 적합한 그래픽 처리 장치들은 AMD(r)(Advanced Micro Devices) R7XX 기반 GPU 장치들(Radeon(r) HD 4XXX), AMD R8XX 기반 GPU 장치들(Radeon(r) HD 10XXX), Intel(r) Larabee 기반 GPU 장치들(발표될 예정), nVidia(r) 8 시리즈 GPU들, nVidia(r) 9 시리즈 GPU들, nVidia(r) 100 시리즈 GPU들, nVidia(r) 200 시리즈 GPU들, 및 임의의 다른 DX11-가능 GPU들을 포함할 수 있다.
본 발명이 특정 순서로 발생하는 것으로 특정 동작들을 기술 또는 도시하지만, 본 발명은 임의의 적합한 순서로 발생하는 임의의 적합한 동작들을 고려한다. 더욱이, 본 발명은 임의의 적합한 순서로 한 번 또는 더 여러 번 반복되는 임의의 적합한 동작들을 고려한다. 본 발명이 순차적으로 발생하는 것으로 특정 동작들을 기술 또는 도시하지만, 적절한 경우, 본 발명은 거의 동시에 발생하는 임의의 적합한 동작들을 고려한다. 본 명세서에 기술된 또는 도시된 동작들의 임의의 적합한 동작 또는 시퀀스는, 적절한 경우, 운영 체제 또는 커널 등의 다른 프로세스에 의해 인터럽트, 중단, 또는 다른 식으로 제어될 수 있다. 동작들은 운영 체제 환경에서 또는 시스템 프로세싱의 전부 또는 상당한 부분을 차지하는 독립형 루틴들로서 동작할 수 있다.
본 발명은 당업자가 이해하는 본 명세서에서의 예시의 실시예들에 대한 모든 변경들, 치환들, 변형들, 변화들, 및 수정들을 망라한다. 유사하게, 적절한 경우, 첨부된 청구항들은 당업자가 이해하는 본 명세서에서의 예시의 실시예들에 대한 모든 변경들, 치환들, 변형들, 변화들, 및 수정들을 망라한다.
본 발명을 위해, 컴퓨터 판독 가능 매체는, 컴퓨터에 의해 실행 가능한 컴퓨터 프로그램 코드를 포함할 수 있는 컴퓨터 데이터를 기계 판독 가능한 형태로 저장한다. 예를 들어, 제한 없이, 컴퓨터 판독 가능 매체는, 데이터의 유형(tangible) 또는 고정 저장을 위한 컴퓨터 판독 가능 저장 매체, 또는 코드 포함 신호들의 일시적인 해석을 위한 통신 매체를 포함할 수 있다. 본 명세서에서 사용된 컴퓨터 판독 가능 저장 매체는 (신호들과 대조적으로) 물리적 또는 유형의 저장 장치를 말하며, 컴퓨터 판독 가능 명령들, 데이터 구조들, 프로그램 모듈들 또는 다른 데이터 등의 정보의 유형 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 이동형 및 고정형 매체를 제한 없이 포함한다. 컴퓨터 판독 가능 저장 매체는 RAM, ROM, EPROM, EEPROM, 플래시 메모리 또는 다른 솔리드 스테이트 메모리 기술, CD-ROM, DVD, 또는 다른 광 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 다른 자기 저장 장치들, 또는 희망 정보 또는 데이터 또는 명령들을 유형으로 저장하는데 사용될 수 있고 컴퓨터 또는 프로세서에 의해 액세스될 수 있는 임의의 다른 물리적 또는 물질적 매체를 포함하지만, 이들로만 제한되지 않는다.

Claims (20)

  1. 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법으로서,
    프로세서에 의해, 제1 사용자 입력을 수신하는 단계;
    상기 제1 사용자 입력에 응답하여, 상기 프로세서에 의해, 제1 애플리케이션 및 렌더링 API(Application Programming Interface)에 의해 디스플레이의 제1 윈도우에 렌더링된 객체를 선택하는 단계;
    상기 프로세서에 의해, 수신된 사용자 입력들을 모니터하는 엔진을 통해 상기 제1 애플리케이션으로부터 상기 객체를 추출하는 단계;
    상기 프로세서에 의해, 상기 제1 윈도우로부터 제2 윈도우에 렌더링된 제2 애플리케이션으로 상기 디스플레이 상의 상기 객체를 드래그하기 위한 제2 사용자 입력을 수신하는 단계;
    상기 제1 윈도우로부터 상기 제2 윈도우로 상기 객체를 드래그하라는 상기 제2 사용자 입력에 응답하여,
    상기 프로세서에 의해, 경계 없는 윈도우(borderless window)를 렌더링하고;
    상기 프로세서에 의해, 상기 경계 없는 윈도우에서 선택을 렌더링하고 - 상기 선택은 사용자에 의해 선택된 객체를 포함함 -; 및
    상기 프로세서에 의해, 상기 제2 사용자 입력에 따라 상기 제1 윈도우와 상기 제2 윈도우 사이에서 이어지는 중간 공간에 걸쳐 상기 선택을 포함하는 상기 경계 없는 윈도우를 이동시키는 단계; 및
    상기 객체가 상기 제2 윈도우의 포커스 경계(focus border)를 가로지르는 것(crossing)에 응답하여, 상기 프로세서에 의해, 상기 객체를 상기 제2 애플리케이션으로 가져오고(importing), 상기 경계 없는 윈도우에서의 선택이 상기 제2 윈도우의 포커스 경계를 가로지르는 것에 응답하여, 상기 경계 없는 윈도우에서의 선택을 상기 제2 애플리케이션으로 가져오는 단계
    를 포함하고,
    상기 가져오는 단계는 상기 제2 윈도우에서 상기 선택을 렌더링하라고 상기 렌더링 API에 명령하도록 동작가능한 드로우 커맨드들을 렌더링 API 파이프라인으로 삽입하는 단계를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  2. 제1항에 있어서,
    객체를 선택하는 단계는,
    상기 프로세서에 의해, 상기 제1 사용자 입력을 상기 엔진으로 우회하는 단계;
    상기 프로세서에 의해, 상기 제1 애플리케이션으로부터 상기 렌더링 API로 드로우 커맨드들(draw commands)을 인터셉트하는 단계;
    상기 프로세서에 의해, 상기 드로우 커맨드들로부터 상기 객체를 결정하는 단계; 및
    상기 프로세서에 의해, 선택 알고리즘에 따라 상기 객체 및 다른 객체들을 선택하는 단계
    를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  3. 제2항에 있어서,
    상기 프로세서에 의해, 상기 객체를 결정하는 단계는,
    상기 프로세서에 의해, 상기 제1 사용자 입력의 좌표들에서의 장면의 근거리 면(near plane)에 카메라를 할당하는 단계;
    상기 프로세서에 의해, 상기 카메라로부터 원거리 면(far plane)으로 광선 투사(ray casting)하는 단계; 및
    상기 프로세서에 의해, 광선이 닿는(hit) 제1 객체를 선택하는 단계
    를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  4. 제3항에 있어서,
    상기 프로세서에 의해, 상기 선택을 확장하거나 필터링하라는 추가 사용자 입력을 수신하는 단계를 더 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  5. 제4항에 있어서,
    상기 선택을 확장하거나 필터링하는 것은, 상기 프로세서에 의해, 상기 선택된 객체 또는 객체들에 연결된 장면에서의 다른 객체들을 선택하거나 선택해제하는 것을 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  6. 제4항에 있어서,
    상기 선택을 확장하거나 필터링하는 것은, 상기 프로세서에 의해, 상기 추가 사용자 입력에 의해 지정된 장면에서의 다른 객체들을 선택하거나 선택해제하는 것을 포함하고,
    지정 프로세스는,
    상기 프로세서에 의해, 객체 선택 또는 선택해제 중 하나를 위한 다른 사용자 입력을 수신하는 것;
    상기 프로세서에 의해, 상기 다른 사용자 입력의 좌표들에서의 장면의 근거리 면에 다른 카메라를 할당하는 것; 및
    상기 프로세서에 의해, 상기 카메라로부터 원거리 면으로 광선 투사하고, 광선이 닿는 제1 객체를 지정하는 것
    을 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  7. 제1항에 있어서,
    상기 프로세서에 의해, 상기 경계 없는 윈도우에서 상기 선택을 렌더링하는 단계는,
    상기 프로세서에 의해, 상기 제1 애플리케이션으로부터 상기 선택과 연관된 드로우 커맨드들을 복사하는 단계;
    상기 프로세서에 의해, 상기 제1 애플리케이션으로부터의 상기 드로우 커맨드들을 렌더링 API의 파이프라인에 삽입하는 단계; 및
    상기 프로세서에 의해, 상기 렌더링 API를 통해 상기 드로우 커맨드들을 렌더링하는 단계
    를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  8. 제1항에 있어서,
    상기 경계 없는 윈도우에서 상기 선택을 렌더링하는 단계는,
    상기 프로세서에 의해, 상기 제1 애플리케이션으로부터 조명 및 환경 효과들(lighting and environmental effects)을 포함하는 제1 조건들을 획득하는 단계;
    상기 프로세서에 의해, 상기 제2 애플리케이션으로부터 조명 및 환경 효과들을 포함하는 제2 조건들을 획득하는 단계; 및
    상기 프로세서에 의해, 상기 제1 및 제2 윈도우들로부터의 상기 경계 없는 윈도우의 거리에 따라 상기 제1 및 제2 조건들을 점차적으로 적용하는 단계
    를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  9. 제1항에 있어서,
    상기 선택을 제2 애플리케이션으로 가져오는 단계는,
    상기 프로세서에 의해, 상기 제2 애플리케이션으로의 구현을 위해 상기 선택을 변환하는 단계;
    상기 프로세서에 의해, 상기 변환 중에 상기 제2 윈도우에서 상기 엔진을 통해 상기 선택을 렌더링하는 단계;
    상기 변환을 완료하면, 상기 프로세서에 의해, 상기 선택을 상기 제2 애플리케이션으로 가져오는 단계; 및
    상기 객체를 상기 제2 애플리케이션으로 가져오면, 상기 프로세서에 의해, 엔진 렌더링 프로세스를 중단하고, 상기 프로세서에 의해, 상기 제2 애플리케이션 내로부터 상기 객체를 렌더링하는 단계
    를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  10. 제9항에 있어서,
    상기 선택을 변환하는 단계는, 상기 프로세서에 의해, 상기 선택과 연관된 상기 제1 애플리케이션으로부터의 드로우 커맨드들을 상기 제2 애플리케이션에 의해 이용되는 파일 포맷으로 변경하는 단계를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  11. 제9항에 있어서,
    상기 엔진을 통해 상기 선택을 렌더링하는 단계는, 상기 프로세서에 의해, 상기 제2 윈도우로 상기 선택을 렌더링하라고 상기 렌더링 API에 명령하도록 동작가능한 드로우 커맨드들을 렌더링 API 파이프라인에 삽입하는 단계를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  12. 제10항에 있어서,
    상기 제2 애플리케이션은 그 자신의 렌더링 API를 가지며, 상기 제2 애플리케이션 내로부터 상기 선택을 렌더링하는 단계는, 상기 프로세서에 의해, 상기 제2 애플리케이션의 렌더링 API를 이용하여 상기 제2 윈도우에서 상기 선택을 렌더링하는 단계를 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 방법.
  13. 애플리케이션들 간에 객체를 드래그하고 드롭하는 시스템으로서,
    그래픽 처리 장치;
    프로세서; 및
    상기 프로세서에 의해 실행되는 프로그램 로직을 유형적으로 저장하기 위한 저장 매체
    를 포함하고,
    상기 프로그램 로직은,
    제1 사용자 입력을 수신하도록 상기 프로세서에 의해 실행되는 제1 사용자 입력 수신 로직;
    상기 제1 사용자 입력의 수신에 응답하여, 제1 애플리케이션 및 렌더링 API에 의해 디스플레이의 제1 윈도우에 렌더링된 객체를 선택하도록 상기 프로세서에 의해 실행되는 선택 로직;
    수신된 사용자 입력들을 모니터하는 엔진을 통해 상기 제1 애플리케이션으로부터 상기 객체를 추출하도록 상기 프로세서에 의해 실행되는 추출 로직;
    제2 사용자 입력을 수신하도록 상기 프로세서에 의해 실행되는 제2 사용자 입력 수신 로직;
    상기 제2 사용자 입력의 수신에 응답하여, 상기 제1 윈도우로부터 제2 윈도우에 렌더링된 제2 애플리케이션으로 상기 디스플레이 상의 상기 객체를 드래그하도록 상기 프로세서에 의해 실행되는 드래그 로직; 및
    상기 객체가 상기 제2 윈도우의 포커스 경계를 가로지르는 것에 응답하여, 상기 객체를 상기 제2 애플리케이션으로 가져오고, 경계 없는 윈도우에서의 선택이 상기 제2 윈도우의 포커스 경계를 가로지르는 것에 응답하여, 상기 경계 없는 윈도우에서의 선택을 상기 제2 애플리케이션으로 가져오도록 상기 프로세서에 의해 실행되는 가져오기 로직
    을 포함하고,
    상기 가져오기 로직은 상기 제2 윈도우에서 상기 선택을 렌더링하라고 상기 렌더링 API에 명령하도록 동작가능한 드로우 커맨드들을 렌더링 API 파이프라인으로 삽입하도록 상기 프로세서에 의해 실행되는 삽입 로직을 포함하고,
    상기 드래그 로직은,
    상기 경계 없는 윈도우를 렌더링하도록 상기 프로세서에 의해 실행되는 윈도우 렌더링 로직;
    상기 경계 없는 윈도우에서 상기 선택을 렌더링하도록 상기 프로세서에 의해 실행되는 선택 렌더링 로직 - 상기 선택은 사용자에 의해 선택된 객체를 포함함 -; 및
    상기 제2 사용자 입력에 따라 상기 제1 윈도우와 상기 제2 윈도우 사이에서 이어지는 중간 공간에 걸쳐 상기 경계 없는 윈도우를 이동시키도록 상기 프로세서에 의해 실행되는 이동 로직
    을 더 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 시스템.
  14. 제13항에 있어서,
    상기 객체를 선택하도록 상기 프로세서에 의해 실행되는 선택 로직은,
    상기 제1 애플리케이션으로부터 상기 제1 사용자 입력을 우회하도록 상기 프로세서에 의해 실행되는 우회 로직;
    상기 제1 애플리케이션으로부터 상기 렌더링 API로 드로우 커맨드들을 인터셉트하도록 상기 프로세서에 의해 실행되는 인터셉트 로직;
    상기 제1 사용자 입력과 연관된 상기 드로우 커맨드들로부터 상기 객체를 결정하도록 상기 프로세서에 의해 실행되는 결정 로직; 및
    선택 알고리즘에 따라 상기 객체 및 다른 객체들을 선택하도록 상기 프로세서에 의해 실행되는 선택 로직
    을 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 시스템.
  15. 제13항에 있어서,
    상기 프로세서에 의해 상기 객체를 결정하는 것은,
    상기 제1 사용자 입력의 좌표들에서의 장면의 근거리 면에 카메라를 할당하도록 상기 프로세서에 의해 실행되는 할당 로직; 및
    상기 카메라로부터 원거리 면으로 광선 투사하고, 광선이 닿는 제1 객체를 선택하도록 상기 프로세서에 의해 실행되는 광선 투사 로직
    을 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 시스템.
  16. 제13항에 있어서,
    상기 가져오기 로직은,
    상기 제2 애플리케이션으로의 구현을 위해 상기 선택을 변환하여, 상기 변환을 완료하면 상기 선택을 상기 제2 애플리케이션으로 가져오도록 상기 프로세서에 의해 실행되는 변환 로직;
    변환 프로세스 중에 상기 제2 윈도우에서 상기 선택을 렌더링하도록 상기 프로세서에 의해 실행되는 렌더링 로직; 및
    상기 객체를 상기 제2 애플리케이션으로 가져오면, 엔진 렌더링 프로세스를 중단하고, 상기 제2 애플리케이션 내로부터 상기 객체를 렌더링하도록 상기 프로세서에 의해 실행되는 중단 로직
    을 더 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 시스템.
  17. 제13항에 있어서,
    상기 선택 렌더링 로직은,
    상기 제1 애플리케이션으로부터 조명 및 환경 효과들을 포함하는 제1 조건들을 획득하도록 상기 프로세서에 의해 실행되는 제1 조건 획득 로직;
    상기 제2 애플리케이션으로부터 조명 및 환경 효과들을 포함하는 제2 조건들을 획득하도록 상기 프로세서에 의해 실행되는 제2 조건 획득 로직; 및
    상기 제1 및 제2 윈도우들로부터의 상기 경계 없는 윈도우의 거리에 따라 상기 제1 및 제2 조건들을 점차적으로 적용하도록 상기 프로세서에 의해 실행되는 조건 적용 로직
    을 더 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하는 시스템.
  18. 애플리케이션들 간에 객체를 드래그하고 드롭하기 위한 프로세서 실행 가능한 명령어들이 저장되어 있는 컴퓨터 판독가능 저장 매체로서,
    상기 명령어들은,
    제1 사용자 입력을 수신하고;
    상기 제1 사용자 입력에 응답하여, 제1 애플리케이션 및 렌더링 API에 의해 디스플레이의 제1 윈도우에 렌더링된 객체를 선택하고;
    엔진을 통해 상기 제1 애플리케이션으로부터 상기 객체를 추출하고;
    상기 제1 윈도우로부터 제2 윈도우에 렌더링된 제2 애플리케이션으로 상기 디스플레이 상의 상기 객체를 드래그하기 위한 제2 사용자 입력을 수신하고;
    상기 제2 사용자 입력에 응답하여,
    경계 없는 윈도우를 렌더링하고,
    상기 경계 없는 윈도우에서 선택을 렌더링하고 - 상기 선택은 사용자에 의해 선택된 객체를 포함함 -,
    상기 경계 없는 윈도우를 상기 제1 윈도우로부터 상기 제2 윈도우로 드래그하라는 상기 제2 사용자 입력의 수신에 응답하여, 상기 제2 사용자 입력에 따라 상기 제1 윈도우와 상기 제2 윈도우 사이에서 이어지는 중간 공간에 걸쳐 상기 선택을 포함하는 상기 경계 없는 윈도우를 이동시키고;
    상기 객체가 상기 제2 윈도우의 포커스 경계를 가로지르는 것에 응답하여, 상기 객체를 상기 제2 애플리케이션으로 가져오고, 상기 경계 없는 윈도우에서의 선택이 상기 제2 윈도우의 포커스 경계를 가로지르는 것에 응답하여, 상기 경계 없는 윈도우에서의 선택을 상기 제2 애플리케이션으로 가져오도록 하는
    명령어들을 포함하고,
    상기 가져오도록 하는 명령어들은 상기 제2 윈도우에서 상기 선택을 렌더링하라고 상기 렌더링 API에 명령하도록 동작가능한 드로우 커맨드들을 렌더링 API 파이프라인으로 삽입하도록 하는 명령어들을 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하기 위한 명령어들이 저장된 컴퓨터 판독가능 저장 매체.
  19. 제18항에 있어서,
    상기 가져오도록 하는 명령어들은,
    상기 객체를 포함하는 상기 경계 없는 윈도우가 상기 제2 윈도우의 포커스 경계를 가로지르는 것에 응답하여, 상기 객체를 상기 제2 애플리케이션으로 가져오도록 하는 사용자 제스처를 수신하도록 하는 명령어들
    을 더 포함하는, 애플리케이션들 간에 객체를 드래그하고 드롭하기 위한 명령어들이 저장된 컴퓨터 판독가능 저장 매체.
  20. 삭제
KR1020147004443A 2011-08-12 2012-08-10 애플리케이션들 간의 객체들의 드래그 앤 드롭 KR101660134B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161523142P 2011-08-12 2011-08-12
US61/523,142 2011-08-12
US13/571,182 US10162491B2 (en) 2011-08-12 2012-08-09 Drag and drop of objects between applications
US13/571,182 2012-08-09
PCT/US2012/050381 WO2013025521A2 (en) 2011-08-12 2012-08-10 Drag and drop of objects between applications

Publications (2)

Publication Number Publication Date
KR20140051335A KR20140051335A (ko) 2014-04-30
KR101660134B1 true KR101660134B1 (ko) 2016-09-26

Family

ID=47678353

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147004443A KR101660134B1 (ko) 2011-08-12 2012-08-10 애플리케이션들 간의 객체들의 드래그 앤 드롭

Country Status (9)

Country Link
US (1) US10162491B2 (ko)
EP (1) EP2742415B1 (ko)
JP (2) JP5770938B2 (ko)
KR (1) KR101660134B1 (ko)
CN (1) CN103733170B (ko)
AU (1) AU2012295303B2 (ko)
CA (1) CA2844451C (ko)
TW (1) TWI473004B (ko)
WO (1) WO2013025521A2 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9053562B1 (en) 2010-06-24 2015-06-09 Gregory S. Rabin Two dimensional to three dimensional moving image converter
JP5488622B2 (ja) * 2012-01-16 2014-05-14 コニカミノルタ株式会社 画像形成装置
US20150242086A1 (en) * 2014-02-21 2015-08-27 Markport Limited Drag and drop event system and method
US20150244747A1 (en) * 2014-02-26 2015-08-27 United Video Properties, Inc. Methods and systems for sharing holographic content
CN105095164B (zh) * 2014-04-28 2018-03-09 富泰华工业(深圳)有限公司 具有内容插入功能的电子装置及其内容插入方法
CN105094789A (zh) * 2014-05-22 2015-11-25 阿里巴巴集团控股有限公司 一种数据流转方法及装置
US10025684B2 (en) 2014-09-24 2018-07-17 Microsoft Technology Licensing, Llc Lending target device resources to host device computing environment
US10635296B2 (en) 2014-09-24 2020-04-28 Microsoft Technology Licensing, Llc Partitioned application presentation across devices
US9678640B2 (en) * 2014-09-24 2017-06-13 Microsoft Technology Licensing, Llc View management architecture
US10516980B2 (en) 2015-10-24 2019-12-24 Oracle International Corporation Automatic redisplay of a user interface including a visualization
US10664488B2 (en) 2014-09-25 2020-05-26 Oracle International Corporation Semantic searches in a business intelligence system
US10417247B2 (en) 2014-09-25 2019-09-17 Oracle International Corporation Techniques for semantic searching
CN105426242B (zh) * 2015-11-17 2020-04-21 腾讯科技(深圳)有限公司 数据传递方法和装置
US10771508B2 (en) 2016-01-19 2020-09-08 Nadejda Sarmova Systems and methods for establishing a virtual shared experience for media playback
US10120635B2 (en) * 2016-03-09 2018-11-06 Samsung Electronics Co., Ltd. Configuration and operation of display devices including device management
CN106055202B (zh) * 2016-05-27 2019-08-20 维沃移动通信有限公司 一种复制粘贴方法及移动终端
US10884604B2 (en) * 2017-05-16 2021-01-05 Apple Inc. Drag and drop for touchscreen devices
US10956237B2 (en) * 2017-06-02 2021-03-23 Oracle International Corporation Inter-application sharing of business intelligence data
US10917587B2 (en) 2017-06-02 2021-02-09 Oracle International Corporation Importing and presenting data
US11614857B2 (en) 2017-06-02 2023-03-28 Oracle International Corporation Importing, interpreting, and presenting data
JP2021517302A (ja) * 2018-03-16 2021-07-15 リ マゴ リミテッド ネットワーク化された共同ワークスペースにおけるウェブ・ソケット接続を介したファイルの送信のための方法、装置、及びコンピュータ可読媒体
US11782881B2 (en) * 2018-12-05 2023-10-10 Vmware, Inc. Recommending remotely executed applications for opening files
US11880422B2 (en) 2019-02-04 2024-01-23 Cloudflare, Inc. Theft prevention for sensitive information
US10452868B1 (en) 2019-02-04 2019-10-22 S2 Systems Corporation Web browser remoting using network vector rendering
CN110221759A (zh) * 2019-05-31 2019-09-10 广州视源电子科技股份有限公司 一种元素拖拽方法、装置、存储介质及交互智能平板
CN110908552B (zh) * 2019-10-11 2021-08-10 广州视源电子科技股份有限公司 多窗口操作控制方法、装置、设备及存储介质
US11301125B2 (en) * 2020-04-24 2022-04-12 Adobe Inc. Vector object interaction
US11461374B2 (en) * 2020-08-06 2022-10-04 UiPath, Inc. Entity engine of a computing platform
CN112634412B (zh) * 2020-12-16 2023-06-30 广州橙行智动汽车科技有限公司 一种数据处理的方法和装置
US11379110B1 (en) 2021-04-12 2022-07-05 International Business Machines Corporation Artificial intelligence-based operating system for drag and drop operations
CN114416270A (zh) * 2022-01-28 2022-04-29 北京太琦图形科技有限公司 页面显示方法、装置、设备和介质
CN116954761A (zh) * 2022-04-18 2023-10-27 鼎捷软件股份有限公司 自动服务编排和执行系统及其方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070291000A1 (en) 2006-05-16 2007-12-20 Cheng-Chung Liang Joy-stick like graphical user interface to adjust 3D cross sectional plane in 3D volume

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5268677A (en) 1988-08-04 1993-12-07 The Grass Valley Group, Inc. Reduced viewport for graphics display
AU640281B2 (en) * 1990-10-31 1993-08-19 Hewlett-Packard Company Three dimensional graphic interface
WO1995009390A1 (en) 1993-09-28 1995-04-06 Namco Ltd. Pipeline processor, clipping processor, three-dimensional simulator and pipeline processing method
AU1407595A (en) 1993-12-30 1995-07-17 Apple Computer, Inc. Frame structure which provides an interface between parts of a compound document
US5874960A (en) 1995-07-05 1999-02-23 Microsoft Corporation Method and system for sharing applications between computer systems
JP2980008B2 (ja) * 1995-09-08 1999-11-22 日本電気株式会社 3次元オブジェクト選択装置
US5872572A (en) * 1995-12-08 1999-02-16 International Business Machines Corporation Method and apparatus for generating non-uniform resolution image data
US6697088B1 (en) 1998-04-27 2004-02-24 Jacada, Inc. Graphical presentation system
EP1145157A4 (en) 1998-10-28 2007-10-17 Yahoo Inc METHOD FOR CONTROLLING INTERFACE OF INTERNET BROWSER AND CONTROLLABLE BROWSER INTERFACE
US20020049852A1 (en) 1999-12-06 2002-04-25 Yen-Jen Lee Global messaging with distributed adaptive streaming control
US6654784B1 (en) 2000-01-14 2003-11-25 Nexaweb Technologies, Inc Computing architecture
US6734873B1 (en) 2000-07-21 2004-05-11 Viewpoint Corporation Method and system for displaying a composited image
JP2002189544A (ja) 2000-12-20 2002-07-05 Hitachi Software Eng Co Ltd 表示オブジェクトに対するユーザ操作環境の制御方法
US20040027398A1 (en) * 2001-02-15 2004-02-12 Denny Jaeger Intuitive graphic user interface with universal tools
JP2002341843A (ja) 2001-05-11 2002-11-29 Nanao Corp ディスプレイ装置及び画像表示システム
US6968507B2 (en) 2001-11-27 2005-11-22 Claria Corporation Method and apparatus for defeating a mechanism that blocks windows
US7768522B2 (en) * 2002-01-08 2010-08-03 Apple Inc. Virtualization of graphics resources and thread blocking
CN1653419A (zh) 2002-05-17 2005-08-10 皇家飞利浦电子股份有限公司 在浏览器上呈现第一媒体类型内容
US7739604B1 (en) 2002-09-25 2010-06-15 Apple Inc. Method and apparatus for managing windows
EP2466482B8 (en) 2002-09-30 2014-12-17 Casio Computer Co., Ltd. Graphic display control apparatus and program
JP3785537B2 (ja) 2002-09-30 2006-06-14 カシオ計算機株式会社 図形表示制御装置及び図形表示制御プログラム
US8230359B2 (en) 2003-02-25 2012-07-24 Microsoft Corporation System and method that facilitates computer desktop use via scaling of displayed objects with shifts to the periphery
US7277572B2 (en) 2003-10-10 2007-10-02 Macpearl Design Llc Three-dimensional interior design system
US7170526B1 (en) 2004-01-26 2007-01-30 Sun Microsystems, Inc. Method and apparatus for redirecting the output of direct rendering graphics calls
US7950026B1 (en) 2004-06-24 2011-05-24 Julian Michael Urbach Virtual application execution system and method
KR100657318B1 (ko) 2005-06-29 2006-12-14 삼성전자주식회사 이미지 선택방법 및 장치
US20110157196A1 (en) * 2005-08-16 2011-06-30 Exent Technologies, Ltd. Remote gaming features
JP3961545B2 (ja) * 2005-11-29 2007-08-22 株式会社コナミデジタルエンタテインメント オブジェクト選択装置、オブジェクト選択方法、ならびに、プログラム
JP2007226417A (ja) * 2006-02-22 2007-09-06 Katsuhide Tsushima コンテンツ出力装置、およびプログラム
US7868893B2 (en) * 2006-03-07 2011-01-11 Graphics Properties Holdings, Inc. Integration of graphical application content into the graphical scene of another application
JP5184036B2 (ja) * 2007-10-05 2013-04-17 任天堂株式会社 ゲームプログラムおよびゲーム装置
US9104300B2 (en) 2007-10-17 2015-08-11 International Business Machines Corporation Drag and drop object attribute assignment for objects in a graphical user interface (GUI)
US8739120B2 (en) * 2007-12-03 2014-05-27 Adobe Systems Incorporated System and method for stage rendering in a software authoring tool
TW201106251A (en) 2009-04-24 2011-02-16 Ibm Editing apparatus, editing method and program
US8471858B2 (en) 2009-06-02 2013-06-25 Qualcomm Incorporated Displaying a visual representation of performance metrics for rendered graphics elements
TW201104494A (en) 2009-07-20 2011-02-01 J Touch Corp Stereoscopic image interactive system
US20110066971A1 (en) 2009-09-14 2011-03-17 Babak Forutanpour Method and apparatus for providing application interface portions on peripheral computing devices
US8171154B2 (en) * 2009-09-29 2012-05-01 Net Power And Light, Inc. Method and system for low-latency transfer protocol
CN102918490B (zh) * 2010-04-01 2014-07-23 思杰系统有限公司 与在平板计算装置的虚拟桌面内显示的远程应用交互
WO2011143094A2 (en) * 2010-05-09 2011-11-17 Citrix Systems, Inc. Systems and methods for allocation of classes of service to network connections corresponding to virtual channels

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070291000A1 (en) 2006-05-16 2007-12-20 Cheng-Chung Liang Joy-stick like graphical user interface to adjust 3D cross sectional plane in 3D volume

Also Published As

Publication number Publication date
US10162491B2 (en) 2018-12-25
WO2013025521A3 (en) 2013-05-10
EP2742415A2 (en) 2014-06-18
TW201324321A (zh) 2013-06-16
NZ619935A (en) 2015-07-31
TWI473004B (zh) 2015-02-11
JP2016006649A (ja) 2016-01-14
WO2013025521A2 (en) 2013-02-21
CN103733170A (zh) 2014-04-16
AU2012295303B2 (en) 2014-11-06
CN103733170B (zh) 2018-01-23
JP2014524612A (ja) 2014-09-22
KR20140051335A (ko) 2014-04-30
CA2844451A1 (en) 2013-02-21
EP2742415B1 (en) 2019-10-09
JP5770938B2 (ja) 2015-08-26
AU2012295303A1 (en) 2014-01-30
JP6012027B2 (ja) 2016-10-25
NZ709107A (en) 2016-01-29
US20130042259A1 (en) 2013-02-14
EP2742415A4 (en) 2015-08-12
CA2844451C (en) 2019-02-12

Similar Documents

Publication Publication Date Title
KR101660134B1 (ko) 애플리케이션들 간의 객체들의 드래그 앤 드롭
KR101511819B1 (ko) 영상 센서에 기반한 인간 기계장치 인터페이스를 제공하는 방법 시스템 및 소프트웨어
JP5540002B2 (ja) 画像センサ式ヒューマンマシンインターフェイスを提供するための方法、システムと関連モジュール、およびソフトウエアコンポーネント
JP5885309B2 (ja) ジェスチャ認識のためのユーザ・インタフェース、装置および方法
KR102646977B1 (ko) 증강 현실에 기반한 디스플레이 방법 및 장치, 및 저장 매체
US20140372923A1 (en) High Performance Touch Drag and Drop
US11443490B2 (en) Snapping, virtual inking, and accessibility in augmented reality
KR20220079684A (ko) 웹 콘텐츠와 3d 상호작용들
US11475636B2 (en) Augmented reality and virtual reality engine for virtual desktop infrastucture
RU2768526C2 (ru) Реальное присутствие рукописного ввода для сотрудничества в реальном времени
JP2016528612A (ja) 定義されたクロス制御挙動による制御応答レイテンシの短縮
JP2016528612A5 (ko)
KR102367640B1 (ko) 실제 물체들의 인터랙티브 3d 표현들의 생성 및 디스플레이를 위한 시스템들 및 방법들
AU2015200570B2 (en) Drag and drop of objects between applications
CN113440844B (zh) 一种适用于游戏的信息处理方法、装置和电子设备
CN114931746A (zh) 基于笔式和触屏交互的3d游戏的交互方法、装置及介质
NZ709107B2 (en) Drag and drop of objects between applications
NZ619935B2 (en) Drag and drop of objects between applications
WO2014175600A1 (ko) 컴퓨터 실행 가능한 3차원 콘텐츠 디스플레이 방법, 이를 수행하는 3차원 콘텐츠 디스플레이 장치 및 이를 저장하는 기록매체
Lange et al. A novel window manager for large screen display
Thorn et al. Input for 2D Games

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20190910

Year of fee payment: 4