dev.html 8.0 KB
Newer Older
J
Jerome Etienne 已提交
1 2 3 4 5
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<!-- include babylon.js -->
<script src="vendor/babylon.max.js"></script> 
<!-- include three.js -->
J
Jerome Etienne 已提交
6
<script src='../../three.js/examples/vendor/three.js/build/three.js'></script>
J
Jerome Etienne 已提交
7
<!-- include ar.js -->
J
Jerome Etienne 已提交
8 9
<script src="../../three.js/build/ar.js"></script>
<script>THREEx.ArToolkitContext.baseURL = '../../three.js/'</script> 
J
Jerome Etienne 已提交
10

J
Jerome Etienne 已提交
11 12
<script src="../src/babylon-ar.js"></script>

J
Jerome Etienne 已提交
13 14

<body style='margin : 0px; overflow: hidden; font-family: Monospace;'>
J
Jerome Etienne 已提交
15 16 17 18 19 20 21 22 23
<script>
window.addEventListener('DOMContentLoaded', function(){
	//////////////////////////////////////////////////////////////////////////////
	//		create canvasElement
	//////////////////////////////////////////////////////////////////////////////
	var canvasElement = document.createElement('canvas')
	canvasElement.style.width = '100%'
	canvasElement.style.height = '100%'
	canvasElement.style.position = 'absolute'
J
Jerome Etienne 已提交
24
	canvasElement.style.zIndex = -1
J
Jerome Etienne 已提交
25
	document.body.appendChild(canvasElement)
J
Jerome Etienne 已提交
26
	var engine = new BABYLON.Engine(canvasElement, true)
J
Jerome Etienne 已提交
27
	var babylonCamera;
J
Jerome Etienne 已提交
28

J
Jerome Etienne 已提交
29 30 31
	
	/******************************CREATE-MOON*****************************/
	var createMoon = function(){
J
Jerome Etienne 已提交
32 33
		var material = new BABYLON.StandardMaterial("proutMaterial", scene)
		material.diffuseTexture = new BABYLON.Texture("images/UV_Grid_Sm.jpg", scene)
J
Jerome Etienne 已提交
34
		
J
Jerome Etienne 已提交
35
		var mesh = BABYLON.Mesh.CreateSphere("mesh", 12, 1, scene)
J
Jerome Etienne 已提交
36

J
Jerome Etienne 已提交
37 38 39 40 41 42
		// mesh.position.y = 60;
		mesh.material = material;
		mesh.position = new BABYLON.Vector3(0,0, 0)
	}
	
	var displayMeshAxis = function (mesh) {
J
Jerome Etienne 已提交
43 44
		mesh.computeWorldMatrix()
		var matrix = mesh.getWorldMatrix()
J
Jerome Etienne 已提交
45 46
		var origin = mesh.position;
		// find existing axis for this box and dispose
J
Jerome Etienne 已提交
47 48 49 50 51 52
		var xAxis = scene.getMeshByName("xAxis"+mesh.name)
		var yAxis = scene.getMeshByName("yAxis"+mesh.name)
		var zAxis = scene.getMeshByName("zAxis"+mesh.name)
		if (xAxis!=null){ xAxis.dispose()}
		if (yAxis!=null){ yAxis.dispose()}
		if (zAxis!=null){ zAxis.dispose()}
J
Jerome Etienne 已提交
53
		// calculate new normals for this mesh in world coordinate system
J
Jerome Etienne 已提交
54 55 56
		var xNormal=BABYLON.Vector3.TransformCoordinates(new BABYLON.Vector3(100,0,0),matrix)
		var yNormal=BABYLON.Vector3.TransformCoordinates(new BABYLON.Vector3(0,100,0),matrix)
		var zNormal=BABYLON.Vector3.TransformCoordinates(new BABYLON.Vector3(0,0,100),matrix)
J
Jerome Etienne 已提交
57
		// create axis lines
J
Jerome Etienne 已提交
58 59 60 61 62 63
		xAxis = BABYLON.Mesh.CreateDashedLines("xAxis"+mesh.name, [origin, xNormal],3,10,200, scene, false)
		xAxis.color = BABYLON.Color3.Red()
		yAxis = BABYLON.Mesh.CreateDashedLines("yAxis"+mesh.name, [origin, yNormal],3,10,200, scene, false)
		yAxis.color = BABYLON.Color3.Green()
		zAxis = BABYLON.Mesh.CreateDashedLines("zAxis"+mesh.name, [origin, zNormal],3,10,200, scene, false)
		zAxis.color = BABYLON.Color3.Blue()
J
Jerome Etienne 已提交
64 65 66 67
	}
	
	/****************************CREATE-SYMPHONY*******************************/
	var createImagePlane = function(){
J
Jerome Etienne 已提交
68 69 70
		var mesh = BABYLON.MeshBuilder.CreatePlane("plane1", {
			size: 2,
			sideOrientation: BABYLON.Mesh.DOUBLESIDE
J
Jerome Etienne 已提交
71
		}, scene)
J
Jerome Etienne 已提交
72
		mesh.position = new BABYLON.Vector3(0,0, 0)
J
Jerome Etienne 已提交
73
		mesh.rotation.y = Math.PI
J
Jerome Etienne 已提交
74 75 76 77 78 79

		var material = new BABYLON.StandardMaterial("texturePlane", scene)
		material.twoSidedLighting = true
		material.diffuseTexture = new BABYLON.Texture("images/UV_Grid_Sm.jpg", scene)
		material.specularColor = new BABYLON.Color3(1, 1, 1)
		mesh.material = material		
J
Jerome Etienne 已提交
80 81 82
	}
	
	/******************************Initialization******************************/
J
Jerome Etienne 已提交
83
	var scene = new BABYLON.Scene(engine)
J
Jerome Etienne 已提交
84
	scene.useRightHandedSystem = true
J
Jerome Etienne 已提交
85
	scene.clearColor = new BABYLON.Color4(0, 0, 0, 0)
J
Jerome Etienne 已提交
86

J
Jerome Etienne 已提交
87
	var babylonCamera = ARjs.Babylon.createCamera(scene)
J
Jerome Etienne 已提交
88

J
Jerome Etienne 已提交
89 90 91 92 93 94
	// add ligts
	var light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0,10,0), scene)
	light.intensity = 0.4
	var light = new BABYLON.DirectionalLight("dir01", new BABYLON.Vector3(-1, -2, -1), scene)
	light.position = new BABYLON.Vector3(20, 39, 20)
	light.intensity = 0.5
J
Jerome Etienne 已提交
95
	
J
Jerome Etienne 已提交
96 97
	createMoon()
	createImagePlane()
J
Jerome Etienne 已提交
98 99
	
	engine.runRenderLoop(function(){
J
Jerome Etienne 已提交
100
		ARjs.Babylon.updateObjectPose(babylonCamera, camera)
J
Jerome Etienne 已提交
101

J
Jerome Etienne 已提交
102 103
		scene.render()
	})
J
Jerome Etienne 已提交
104 105
	
	window.addEventListener('resize', function(){
J
Jerome Etienne 已提交
106 107 108
		engine.resize()
	})
})
J
Jerome Etienne 已提交
109 110 111
 </script>

<script>
J
Jerome Etienne 已提交
112 113 114
// ;(function(){
// 	
// })()
J
Jerome Etienne 已提交
115 116 117 118 119 120 121 122
	//////////////////////////////////////////////////////////////////////////////////
	//		Init
	//////////////////////////////////////////////////////////////////////////////////

	// init renderer
	var renderer	= new THREE.WebGLRenderer({
		antialias: true,
		alpha: true
J
Jerome Etienne 已提交
123
	})
J
Jerome Etienne 已提交
124
	renderer.setClearColor(new THREE.Color('lightgrey'), 0)
J
Jerome Etienne 已提交
125
	renderer.setSize( 640, 480 )
J
Jerome Etienne 已提交
126 127 128 129 130 131 132 133
	renderer.domElement.style.position = 'absolute'
	renderer.domElement.style.top = '0px'
	renderer.domElement.style.left = '0px'

	// array of functions for the rendering loop
	var onRenderFcts= [];

	// init scene and camera
J
Jerome Etienne 已提交
134 135 136 137
	var scene	= new THREE.Scene()

	var trackingMethod = 'area-artoolkit'

J
Jerome Etienne 已提交
138
	//////////////////////////////////////////////////////////////////////////////////
J
Jerome Etienne 已提交
139
	//		Initialize the camera
J
Jerome Etienne 已提交
140 141
	//////////////////////////////////////////////////////////////////////////////////

J
Jerome Etienne 已提交
142 143
	var camera = ARjs.Utils.createDefaultCamera(trackingMethod)
	scene.add(camera)
J
Jerome Etienne 已提交
144 145 146

	
	////////////////////////////////////////////////////////////////////////////////
J
Jerome Etienne 已提交
147
	//          	Set up Arjs.Profile
J
Jerome Etienne 已提交
148 149
	////////////////////////////////////////////////////////////////////////////////

J
Jerome Etienne 已提交
150 151 152 153 154 155 156
	var arProfile = new ARjs.Profile()
		.sourceWebcam()
		.trackingMethod(trackingMethod)
		// .changeMatrixMode('modelViewMatrix')
		.changeMatrixMode('cameraTransformMatrix')
		.defaultMarker()
		.checkIfValid()
J
Jerome Etienne 已提交
157 158


J
Jerome Etienne 已提交
159 160 161 162 163 164 165 166 167 168 169 170 171 172
	if( arProfile.contextParameters.trackingBackend === 'tango' ){
		arProfile.changeMatrixMode('cameraTransformMatrix')
	}

	//////////////////////////////////////////////////////////////////////////////
	//		build ARjs.Session
	//////////////////////////////////////////////////////////////////////////////

	var arSession = new ARjs.Session({
		scene: scene,
		renderer: renderer,
		camera: camera,
		sourceParameters: arProfile.sourceParameters,
		contextParameters: arProfile.contextParameters		
J
Jerome Etienne 已提交
173
	})
J
Jerome Etienne 已提交
174 175 176 177
	onRenderFcts.push(function(){
		arSession.update()
	})
	
J
Jerome Etienne 已提交
178
	////////////////////////////////////////////////////////////////////////////////
J
Jerome Etienne 已提交
179
	//          Create a ARjs.Anchor
J
Jerome Etienne 已提交
180
	////////////////////////////////////////////////////////////////////////////////
J
Jerome Etienne 已提交
181 182 183 184

	var arAnchor = new ARjs.Anchor(arSession, arProfile.defaultMarkerParameters)
	onRenderFcts.push(function(){
		arAnchor.update()
J
Jerome Etienne 已提交
185
	})
J
Jerome Etienne 已提交
186

J
Jerome Etienne 已提交
187 188 189 190
	//////////////////////////////////////////////////////////////////////////////////
	//		add an object in the scene
	//////////////////////////////////////////////////////////////////////////////////

J
Jerome Etienne 已提交
191 192
	var arWorldRoot = arAnchor.object3d

J
Jerome Etienne 已提交
193
	// add a torus knot	
J
Jerome Etienne 已提交
194
	var geometry	= new THREE.CubeGeometry(1,1,1)
J
Jerome Etienne 已提交
195 196 197 198
	var material	= new THREE.MeshNormalMaterial({
		transparent : true,
		opacity: 0.5,
		side: THREE.DoubleSide
J
Jerome Etienne 已提交
199 200
	}) 
	var mesh	= new THREE.Mesh( geometry, material )
J
Jerome Etienne 已提交
201
	// mesh.position.y	= geometry.parameters.height/2
J
Jerome Etienne 已提交
202
	arWorldRoot.add( mesh )
J
Jerome Etienne 已提交
203
	
J
Jerome Etienne 已提交
204 205 206
	var geometry	= new THREE.TorusKnotGeometry(0.3,0.1,64,16)
	var material	= new THREE.MeshNormalMaterial() 
	var mesh	= new THREE.Mesh( geometry, material )
J
Jerome Etienne 已提交
207
	// mesh.position.y	= 0.5
J
Jerome Etienne 已提交
208
	// arWorldRoot.add( mesh )
J
Jerome Etienne 已提交
209 210 211 212 213 214 215 216 217 218 219
	
	onRenderFcts.push(function(delta){
		mesh.rotation.x += Math.PI*delta
	})

	//////////////////////////////////////////////////////////////////////////////////
	//		render the whole thing on the page
	//////////////////////////////////////////////////////////////////////////////////

	// render the scene
	onRenderFcts.push(function(){
J
Jerome Etienne 已提交
220 221
		// update all matrixWorld
		scene.updateMatrixWorld()
J
Jerome Etienne 已提交
222 223
	})

J
Jerome Etienne 已提交
224 225 226 227 228 229 230
	if( true ){
		document.body.appendChild( renderer.domElement )
		onRenderFcts.push(function(){
			renderer.render( scene, camera )
		})		
	}

J
Jerome Etienne 已提交
231 232 233 234
	// run the rendering loop
	var lastTimeMsec= null
	requestAnimationFrame(function animate(nowMsec){
		// keep looping
J
Jerome Etienne 已提交
235
		requestAnimationFrame( animate )
J
Jerome Etienne 已提交
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
		// measure time
		lastTimeMsec	= lastTimeMsec || nowMsec-1000/60
		var deltaMsec	= Math.min(200, nowMsec - lastTimeMsec)
		lastTimeMsec	= nowMsec
		// call each update function
		onRenderFcts.forEach(function(onRenderFct){
			onRenderFct(deltaMsec/1000, nowMsec/1000)
		})
	})
</script>



</body>

</html>