일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 몽고디비
- 김양재
- 데이터 과학
- 통계
- 빅 데이타
- data science
- 주일설교
- probability
- 우리들교회
- 인공지능
- nodeJS
- 김양재 목사
- No SQL
- 딥러닝
- Deep learning
- 빅 데이터
- Artificial Intelligence
- Big Data
- 빅데이터
- R
- c++
- 확률
- WebGL
- openCV
- 김양재 목사님
- Machine Learning
- 빅데이타
- MongoDB
- node.js
- Statistics
Archives
- Today
- Total
Scientific Computing & Data Science
[WebGL] Video Texture 본문
이번 예제는 Video Texture에 관한 것입니다. Video Texture는 정적인 이미지 대신 비디오 영상을 texture로 사용하는 것이다. 예제에서의 비디오는 오디오를 포함하고 있습니다.
Download Project
Click here to view with full screen mode
Operations
Mouse Left Button Click & Drag: Camera Rotating
Mouse Wheel: Camera Zoom In & Out
Mouse Right Button Click & Drag: Camera Panning
main.js
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | // MAIN // standard global variables var container, scene, camera, renderer, controls, stats; var keyboard = new THREEx.KeyboardState(); // custom global variables var video, videoImage, videoImageContext, videoTexture; init(); animate(); // FUNCTIONS function init() { // SCENE scene = new THREE.Scene(); // CAMERA var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight; var VIEW_ANGLE = 45, ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT, NEAR = 0.1, FAR = 20000; camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR); scene.add(camera); camera.position.set(0,150,400); camera.lookAt(scene.position); // RENDERER if ( Detector.webgl ) renderer = new THREE.WebGLRenderer( {antialias:true} ); else renderer = new THREE.CanvasRenderer(); renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT); container = document.getElementById( 'ThreeJS' ); container.appendChild( renderer.domElement ); // CONTROLS controls = new THREE.OrbitControls( camera, renderer.domElement ); // EVENTS THREEx.WindowResize(renderer, camera); THREEx.FullScreen.bindKey({ charCode : 'f'.charCodeAt(0) }); // STATS stats = new Stats(); stats.domElement.style.position = 'absolute'; stats.domElement.style.bottom = '0px'; stats.domElement.style.zIndex = 100; container.appendChild( stats.domElement ); // LIGHT var light = new THREE.PointLight(0xffffff); light.position.set(0,250,0); scene.add(light); // FLOOR var floorTexture = new THREE.ImageUtils.loadTexture( 'img/Wood_floor.jpg' ); floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping; floorTexture.repeat.set( 1, 1 ); var floorMaterial = new THREE.MeshBasicMaterial( { map: floorTexture, side: THREE.DoubleSide } ); var floorGeometry = new THREE.PlaneGeometry(1000, 1000, 10, 10); var floor = new THREE.Mesh(floorGeometry, floorMaterial); floor.position.y = -0.5; floor.rotation.x = Math.PI / 2; scene.add(floor); // SKYBOX/FOG var skyBoxGeometry = new THREE.CubeGeometry( 10000, 10000, 10000 ); var skyBoxMaterial = new THREE.MeshBasicMaterial( { color: 0x9999ff, side: THREE.BackSide } ); var skyBox = new THREE.Mesh( skyBoxGeometry, skyBoxMaterial ); scene.add(skyBox); scene.fog = new THREE.FogExp2( 0x9999ff, 0.00025 ); /////////// // VIDEO // /////////// // create the video element video = document.createElement( 'video' ); video.id = 'video'; video.type = ' video/ogg; codecs="theora, vorbis" '; video.src = "videos/sintel.ogv"; video.load(); // must call after setting/changing source video.play(); // alternative method -- // create DIV in HTML: // <video id="myVideo" autoplay style="display:none"> // <source src="videos/sintel.ogv" type='video/ogg; codecs="theora, vorbis"'> // </video> // and set JS variable: // video = document.getElementById( 'myVideo' ); videoImage = document.createElement( 'canvas' ); videoImage.width = 480; videoImage.height = 204; videoImageContext = videoImage.getContext( '2d' ); // background color if no video present videoImageContext.fillStyle = '#000000'; videoImageContext.fillRect( 0, 0, videoImage.width, videoImage.height ); videoTexture = new THREE.Texture( videoImage ); videoTexture.minFilter = THREE.LinearFilter; videoTexture.magFilter = THREE.LinearFilter; var movieMaterial = new THREE.MeshBasicMaterial( { map: videoTexture, overdraw: true, side:THREE.DoubleSide } ); // the geometry on which the movie will be displayed; // movie image will be scaled to fit these dimensions. var movieGeometry = new THREE.PlaneGeometry( 240, 100, 4, 4 ); var movieScreen = new THREE.Mesh( movieGeometry, movieMaterial ); movieScreen.position.set(0,50,0); scene.add(movieScreen); camera.position.set(0,150,300); camera.lookAt(movieScreen.position); } function animate() { requestAnimationFrame( animate ); render(); update(); } function update() { if ( keyboard.pressed("p") ) video.play(); if ( keyboard.pressed("space") ) video.pause(); if ( keyboard.pressed("s") ) // stop video { video.pause(); video.currentTime = 0; } if ( keyboard.pressed("r") ) // rewind video video.currentTime = 0; controls.update(); stats.update(); } function render() { if ( video.readyState === video.HAVE_ENOUGH_DATA ) { videoImageContext.drawImage( video, 0, 0 ); if ( videoTexture ) videoTexture.needsUpdate = true; } renderer.render( scene, camera ); } | cs |
'Programming > WebGL(ThreeJS)' 카테고리의 다른 글
[WebGL] GUI Basic (0) | 2015.08.07 |
---|---|
[WebGL] Texture Canvas (0) | 2015.08.06 |
[WebGL] Render Texture (0) | 2015.08.06 |
[WebGL] Multiple Cameras (0) | 2015.08.06 |
[WebGL] Texture Basic (0) | 2015.08.06 |
Comments