Leap Motion 터치 시 뮬 레이 션
터치 시 뮬 레이 션
Leap Motion 의 API 는 응용 프로그램 에서 시 뮬 레이 션 을 할 수 있 는 정 보 를 제공 합 니 다.터치 정 보 는 첨단 류 를 통 해 제공 된다.
개술
Leap 는 자체 적 으로 적응 하 는 터치 평면 을 정의 합 니 다. 응용 중인 2 차원 요소 와 아름 답 게 결합 할 수 있 습 니 다.이 평면 은 x - y 평면 과 평행 으로 거 칠 게 회전 하지만 사용자 의 손가락 과 손의 위치 에 따라 동적 으로 조정 된다.그러나 사용자 의 손 이나 도구 가 전방 에서 평면 에 이 르 면 Leap 는 첨단 물체 가 접근 하 는 지, 이 가상 평면 에 닿 는 지 보고 합 니 다.API 는 평면 과 관련 된 정 보 를 2 개의 값 으로 보고 합 니 다. 평면 지 대 를 만 지고 평면 을 만 지 는 거리 입 니 다.
위의 그림: 가상 터치 평면
터치 지 대 는 Leap Motion 소프트웨어 가 첨단 을 터치 평면 에 떠 있 는 것 으로 생각 하 는 지, 터치 평면 을 관통 하 는 것 인지, 화면 에 비해 먼 것 인지 (또는 잘못된 방향 을 가리 키 는 것 인지) 식별 하 는 것 이다.지 대 는 '부상', '터치', '무' 를 포함한다.터치 지대 의 전환 은 터치 거리 변환 에 따라 어느 정도 정체 되 어 있다.이 정 체 는 갑 작 스 럽 고 반복 되 는 변 화 를 피 하 는 데 쓰 인 다.만약 당신 이 응용 프로그램 에서 이 터치 상호작용 을 사용한다 면, 당신 은 지역 을 자주 고려 할 필요 가 없 을 것 입 니 다.
첨단 이 부상 과 터치 지역 에 있어 야 터치 거리 가 효과적이다.이 거 리 는 [- 1, + 1] 로 돌아 가 는 수치 입 니 다.첨단 물체 가 처음으로 현탁 지대 에 들 어 갔 을 때 터치 거 리 는 + 1 이 고 거리 가 0 으로 계속 줄 어 들 면 첨단 물체 가 터치 평면 에 가깝다 는 것 을 의미한다.그러나 첨단 물 체 는 평면 을 뚫 고 거 리 는 0 으로 변 한다.첨단 물 체 는 계속 접촉 지대 로 추진 되 기 때문에 거리 가 계속 가 까 워 지지 만 - 1 (영원히 - 1) 을 초과 하지 않 는 다.
지대 수 치 를 사용 할 수 있 습 니 다. 부상 또는 터치 에 따라 인터페이스 요 소 를 언제 업데이트 할 지 결정 할 수 있 습 니 다.거 리 를 사용 할 수 있 습 니 다. 평면 에 가 까 운 지 에 따라 인터페이스 요 소 를 바 꿀 수 있 습 니 다.예 를 들 어 손가락 이 제어 체 에 있 고 현탁 지대 에 있 으 면 제어 체 를 밝 게 표시 하고 사용자 가 제어 체 에 얼마나 가 까 운 지 에 따라 커서 형 태 를 바 꿀 수 있다.
터치 시 뮬 레이 션 API 의 일부분 으로서 Leap Motion 은 첨단 물체 로 표준 좌표 에 대한 안정 적 인 좌 표를 추가 로 제공 합 니 다.Leap Motion 소프트웨어 는 자가 적응 필 터 를 사용 하여 이 위 치 를 안정 시 키 고 부 드 럽 고 운동 을 낮 출 수 있 으 며 최종 적 으로 화면 에 있 는 작은 구역 (예 를 들 어 버튼 과 링크) 에서 사용자 와 쉽게 상호작용 을 할 수 있 습 니 다.그러나 운동 이 느 릴 수록 부 드 러 운 효과 도 강하 다. 그러면 사용 자 는 거 리 를 조절 하고 특정한 점 을 쉽게 만 질 수 있다. [이 효 과 는 매우 좋다. 사람들 이 현실 세계 에서 조작 하 는 것 과 같다]
터치 존 가 져 오기
터치 지 대 는 첨단 류 의 터치 존 속성 을 통 해 설명 합 니 다.이 지역 들 은 모두 매 거 진 유형의 표 지 를 사용 하 는데 모두 다음 세 가지 상태 가 있다.
\ # NONE - 첨단 거리 터치 스크린 은 터치 스크린 을 고려 하 는 거리 보다 너무 멀다.또는 반대 방향 을 가리 키 는 사용자 (즉, 물 체 는 기본적으로 사용자 의 정면 앞에서 사용자 가 자신 을 가리 키 는 것 은 부적 절 한 조작 이다)
\ # HOVERING - 첨단 물체 의 정상 은 이미 현탁 지대 에 도 달 했 지만 터치 로 여 겨 지지 않 는 다.
\ # TOUCHING - 첨단 이 가상 평면 에 도달 했다.
아래 의 코드 세 션 은 맨 앞 손가락 의 지대 표 지 를 어떻게 되 찾 는 지 설명 합 니 다.
Leap::Frame frame = leap.frame();
Leap::Pointable pointable = frame.pointables().frontmost();
Leap::Pointable::Zone zone = pointable.touchZone();
터치 거리 가 져 오기
터치 거 리 는 첨단 류 의 touch Distance 속성 을 통 해 설명 된다.이 거리 범 위 는 + 1 에서 - 1 로 손가락 이동 과 가상 터치 평면 을 통과 하 는 것 에 대응 합 니 다.이 거 리 는 물리 적 의 미 는 없 지만 Leap Motion 소프트웨어 가 얼마나 가까이 닿 았 는 지 를 생각 하 는 것 이다.
아래 코드 세그먼트 는 맨 앞 손가락 의 터치 거 리 를 어떻게 꺼 내 는 지 설명 합 니 다.
Leap::Frame frame = leap.frame();
Leap::Pointable pointable = frame.pointables().frontmost();
float distance = pointable.touchDistance();
첨단 안정 좌표 획득
안정 적 인 좌 표 는 첨단 류 의 stabilized TipPosition 속성 에 대한 설명 입 니 다.이 위 치 는 표준 Leap Motion 좌표 시스템 에 따라 참조 되 었 으 나 문맥 과 관련 된 대량의 데이터 필터 가 있어 안정 적 입 니 다.
아래 코드 세 션 은 맨 앞 손가락 의 안정 적 인 위 치 를 어떻게 얻 는 지 설명 합 니 다.
Leap::Frame frame = leap.frame();
Leap::Pointable pointable = frame.pointables().frontmost();
Leap::Vector stabilizedPosition = pointable.stabilizedTipPosition();
Leap Motion 좌표계 에서 응용 좌표계 로 전환
그러나 터치 시 뮬 레이 션 을 사용 할 때 Leap Motion 의 좌표 공간 을 응용 화면 공간 으로 전환 해 야 합 니 다.이 조작 을 더욱 간단하게 하기 위해 Leap Motion 의 API 는 상호작용 상자 류 [상호작용 상자 류] (IneractionBox) 를 제공 합 니 다.이 대화 상자 류 는 Leap Motion 시야 의 선형 물체 운동 을 묘사 합 니 다.이 종 류 는 물체 범위 중의 좌 표를 [0, 1] 범위 내 로 분류 하 는 것 을 제공 했다.거 리 를 정규 화하 고 응용 사이즈 에 따라 결과 좌 표를 크기 조정 하여 응용 에 있 는 좌 표를 얻 을 수 있 습 니 다.
예 를 들 어 클 라 이언 트 영역 에 window Width 와 window Height 두 개의 도량 을 가 진 창 이 있다 면 다음 코드 를 사용 하여 창 에서 터치 점 을 가 진 2 차원 픽 셀 좌 표를 얻 을 수 있 습 니 다.
Leap::Frame frame = leap.frame();
Leap::Finger finger = frame.fingers().frontmost();
Leap::Vector stabilizedPosition = finger.stabilizedTipPosition();
Leap::InteractionBox iBox = leap.frame().interactionBox();
Leap::Vector normalizedPosition = iBox.normalizePoint(stabilizedPosition);
float x = normalizedPosition.x * windowWidth;
float y = windowHeight - normalizedPosition.y * windowHeight;
접점 예
아래 의 예 는 터치 시 뮬 레이 션 API 를 사용 하여 응용 창 에서 감지 되 는 모든 첨단 물 체 를 표시 합 니 다.이 예 는 터치 로 설정 점 의 색 을 가 져 오고 터치 거 리 를 사용 하여 알파 수 치 를 설정 합 니 다.대화 상자 류 아빠 의 안정 적 인 정점 위 치 를 사용 하여 응용 창 에 매 핑 되 었 습 니 다.
위의 그림: 터치 포인트 예
#include "cinder/app/AppNative.h"
#include "cinder/gl/gl.h"
#include "Leap.h"
#include "LeapMath.h"
using namespace ci;
using namespace ci::app;
using namespace std;
class TouchPointsApp : public AppNative {
public:
void setup();
void draw();
private:
int windowWidth = 800;
int windowHeight = 800;
Leap::Controller leap;
};
void TouchPointsApp::setup()
{
this->setWindowSize(windowWidth, windowHeight);
this->setFrameRate(120);
gl::enableAlphaBlending();
}
void TouchPointsApp::draw()
{
gl::clear( Color( .97, .93, .79 ) );
Leap::PointableList pointables = leap.frame().pointables();
Leap::InteractionBox iBox = leap.frame().interactionBox();
for( int p = 0; p < pointables.count(); p++ )
{
Leap::Pointable pointable = pointables[p];
Leap::Vector normalizedPosition = iBox.normalizePoint(pointable.stabilizedTipPosition());
float x = normalizedPosition.x * windowWidth;
float y = windowHeight - normalizedPosition.y * windowHeight;
if(pointable.touchDistance() > 0 && pointable.touchZone() != Leap::Pointable::Zone::ZONE_NONE)
{
gl::color(0, 1, 0, 1 - pointable.touchDistance());
}
else if(pointable.touchDistance() <= 0)
{
gl::color(1, 0, 0, -pointable.touchDistance());
}
else
{
gl::color(0, 0, 1, .05);
}
gl::drawSolidCircle(Vec2f(x,y), 40);
}
}
CINDER_APP_NATIVE( TouchPointsApp, RendererGl )
이 예 는 그림 그리 기 용 창 을 만 들 기 위해 Cinder 라 이브 러 리 를 사용 합 니 다.[예 가 이렇게 간단 한데 어떻게 운행 을 해!]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.