0514-ThreeAr

4월 말에 발표 났는데 … 충분히 공부해볼 시간이 있었을텐데 … 아니 다른 것도 공부 핑계다 게을러서 못 한 거지 다
정말 열심히 했는데 못 한 건가 … 하면 답은 당연히 노

오늘의 할 일

  • web vendingMachine step6 pr 및 리뷰 공부
    – 1차 pe [O]
    – 리뷰 후 이론 공부 및 리팩토링 []
  • three.ar.js를 이용하여 앱 만들기 시작
    — 리서치 및 뭐 만들지 구상 []… 어렵다
    — 아이디어
    — firebase이용 배포 페이지 ->예제 핸드폰으로 실행시켜보기 [O]
    — 배포 페이지로 threeAr 예제들 활용 custom -> 객체들 생성 및 연습 [] (edited)

리뷰

– 리뷰 후 이론 공부 및 리팩토링 []

catch 말고 다른 이름 listen.. -> on을 많이 쓰는 듯 on으로 네이밍 수정 !
try Catch
간단한 함수들 네이밍 신경 + 그냥 바로 쓰기
dispatcher는 무엇일까?
그리고 promise

핵데이

요구사항들 필수

오늘 예제 구동 [O]
예제 구동 하고 스크립트 이해하기 []
추가 개발 환경 구성 -> 빌드파일 웹팩을 이용해서 빌드하기 []
지금 script script 덕지 덕지… 팬시하지 않음 ㅜ

예제에서 사용되는 3D 모델을 새로운 모델 (google poly, sketchfab 등의 사이트에서 구하거나 Qlone 앱으로 직접 스캐닝 하거나, 직접 모델링 하거나) 로 교체해 볼 수 있다.[]
WebVR 표준 그리고 AR 프레임워크(ARKit/ARCore)의 역할에 대한 이해를 기반으로 three.ar.js 사용법에 대한 토론/논의가 가능하다. []

요구사항(선택)
물리엔진을 통한 Plane 과 Object 간 충돌을 구현할 수 있다. []
외부데이터를 공간 상에 시각화 할 수 있다. []
포탈(!) 을 만들 수 있다. []
본인의 아이디어를 구현할 수 있다. []

각자의 폰에 맞는 SDK를 이용해 앱을 빌드하여 예제들을 디바이스에서 구동할 수 있다.

firebase가 없었으면 … ‘ㅁ’;;;

예제 구동 하고 스크립트 이해하기 []

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

// 1번 arDisplay 모듈 가져오고 init함수 실행

THREE.ARUtils.getARDisplay().then(function (display) {
if (display) {
vrDisplay = display;
init();
} else {
THREE.ARUtils.displayUnsupportedMessage();
}
});

Three.arutils.getARDisplay ->는 promise로 display를 가지고 온다
이를 vrdisplay에 저장하고 init함수 실행

// 2번 arDisplay 모듈 가져오고 init함수 실행

// 중요한 것 세가지 씬, 카메라 , 렌더러
// 처음에 렌더러 부터 세팅을 한다. threeJs와 마찬가지로 webglRender 인스턴스를 생성해서 render에 적용

// 디버깅 세팅

// threeJs에서 perspectiveCamera라는 첫번쨰 속성은 시야각 , 두번째는 가로/세로 apspectRatio 나머지 두가지 속성은 clipping plane의 near /far값인데 ArPerspectiveCamera에는 vrDisplay가 첫번쨰 인자로 나머지는 같은 값을 받고 마지막 2인자는 vrDisplay의 near, far값을 갖는다.
// THREE.ARPerspectiveCamera ( vrDisplay, 60,window.innerWidth / window.innerHeight,vrDisplay.depthNear vrDisplay.depthFar) 이런 값들이 들어온다.

function init() {
// Setup the three.js rendering environment
renderer = new THREE.WebGLRenderer({ alpha: true });
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.autoClear = false;
canvas = renderer.domElement;
document.body.appendChild(canvas);
scene = new THREE.Scene();

// Turn on the debugging panel
var arDebug = new THREE.ARDebug(vrDisplay, scene, {
showLastHit: false,
showPoseStatus: false,
showPlanes: true,
});
document.body.appendChild(arDebug.getElement());

// Creating the ARView, which is the object that handles
// the rendering of the camera stream behind the three.js
// scene
arView = new THREE.ARView(vrDisplay, renderer);

// The ARPerspectiveCamera is very similar to THREE.PerspectiveCamera,
// except when using an AR-capable browser, the camera uses
// the projection matrix provided from the device, so that the
// perspective camera's depth planes and field of view matches
// the physical camera on the device.
camera = new THREE.ARPerspectiveCamera(
vrDisplay,
60,
window.innerWidth / window.innerHeight,
vrDisplay.depthNear,
vrDisplay.depthFar
);

// VRControls is a utility from three.js that applies the device's
// orientation/position to the perspective camera, keeping our
// real world and virtual world in sync.
vrControls = new THREE.VRControls(camera);

// Bind our event handlers
window.addEventListener('resize', onWindowResize, false);

// Kick off the render loop!
update();
}

ThreeJS

1
2
3
4
카메라 +씬 -> 렌더러
씬 -> 메시, 라이트
메시 - 지오메트리, 매터리얼
지오메트리 버텍스, Face3

sketchFab에서_json받아오기!