ì ë¨ìììë ì ì ì¸ í
ì¤ì³ë¥¼ ì¬ì©í ìì 를 ë§ë¤ì´ ë´¤ìëë°, ì´ë²ìë Ogg ë¹ëì¤ íì¼ì ì´ì©í´ì í
ì¤ì³ì ì ëë©ì´ì
í¨ê³¼ë¥¼ ì ì©í´ ë³´ê² ìµëë¤. ì¬ì¤ ë§ë¤ê¸° ìë¹í ì½ì§ë§, ê·¸ëë ë³´ë ì¬ë¯¸ë ì ì íëê¹ í ë² ë§ë¤ì´ ë³´ê² ìµëë¤. í
ì¤ì³ë¥¼ 구ì±í ìì¤ë¡ ì´ë¤ ì¢
ë¥ì ë°ì´í°(ì를 ë¤ë©´ <canvas>
ì ê°ì)를 ì°ëë¼ë ì½ëë ë¹ì·í ê²ì
ëë¤.
ê°ì¥ 먼ì í ì¼ì ë¹ëì¤ íë ìì ì¡°ííëë° ì¬ì©í <video>
ìì를 ìì±íë ê²ì
ëë¤:
<video id="video">
Your browser doesn't appear to support the HTML5 <code><video></code>{" "}
element.
</video>
ìì 주 : ì¤ì ìì ìì¤ ì½ë를 ë³´ë©´ ë¹ëì¤ íê·¸ê° ìì ê°ì´ id ìì±ë§ ìë ê²ì´ ìëë¼ ìëì ê°ì´ src ìì±ê³¼ autoplay ìì±ë ì¶ê°ëì´ ììµëë¤.
<video id="video" src="Firefox.ogv" autoplay> Your browser doesn't appear to support the HTML5 <code><video></code>{" "} element. </video>
ì ì½ëë 'Firefox.ogv" ë¹ëì¤ íì¼ì ì¬ìí <video>
ìì를 ìì±í©ëë¤. ë¤ìê³¼ ê°ì CSS ì½ë를 ìì±í´ì ë¹ëì¤ê° ìëì¼ë¡ íìëì§ ìëë¡ í©ëë¤:
ì´ì JavaScript ì½ë를 ì´í´ë³´ê² ìµëë¤. start()
í¨ìì ë¹ëì¤ ììì ëí 참조를 ê°ì ¸ì¤ë ì½ë를 ì¶ê°í©ëë¤:
videoElement = document.getElementById("video");
setInterval()
ì ì´ì©í´ì drawScene()
ì 주기ì ì¼ë¡ í¸ì¶íë ì½ë를 ìëì ì½ëë¡ ëì²´í©ëë¤:
videoElement.addEventListener("canplaythrough", startVideo, true);
videoElement.addEventListener("ended", videoDone, true);
ë¹ëì¤ ììì src ìì±ì¼ë¡ ë¹ëì¤ íì¼ì ìì¹ë¥¼ ì§ì í´ì ë¹ëì¤ ë¡ë©ì ììí©ëë¤. FIXME (ì´ ê¸ì ìì±ìì í ì¬ëì¸ bjacobìê²) : preload="auto"
를 ì¬ê¸°ìì ëª
ìíì§ ìì¼ë©´ Firefoxììë canplaythrough
ì´ë²¤í¸ê° ë°ìëì§ ìì. í¬ë¡¬ììë preload="auto"
ì§ì ì¬ë¶ì ê´ê³ìì´ ë¹ëì¤ ë¡ë© ìì.
ìì 주 : ìì ì ë³´ë©´ ìëì ê°ì´ JavaScriptìì preloadë src를 ëª ìíì§ ìê³ , ìì ìì 주ì ìë ê²ì²ë¼ ë¹ëì¤ íê·¸ ë´ì ìì±ê°ì¼ë¡ 기ì íê³ ìì¼ë¯ë¡, ë°ë¡ ì 문ë¨ê³¼ ìëì ì½ëë 무ìí´ë ì¢ì ê² ê°ìµëë¤.
video.preload = "auto";
videoElement.src = "Firefox.ogv";
ë¹ëì¤ ì¬ì ì ëê¹ì´ ìëë¡ ì¶©ë¶í ë²í¼ë§ í´ë íì ì ëë©ì´ì
ì ììíë ê²ì´ ì¢ìµëë¤. ì ì²´ ë¹ëì¤ê° ëê¹ ìì´ ì¬ìë ì ììë§í¼ ì¶©ë¶í ë°ì´í°ê° ë²í¼ë§ ë íì ë¹ëì¤ì ì¬ìì´ ììëëë¡ ìëì ê°ì´ canplaythrough ì´ë²¤í¸ì ëí 리ì¤ëì¸ startVideo()
를 ì¶ê°í©ëë¤:
function startVideo() {
videoElement.play();
intervalID = setInterval(drawScene, 15);
}
ì ì½ëë ë¨ìí ë¹ëì¤ ì¬ìì ììíê³ , ì ì¡ë©´ì²´ì ë ëë§ì ì²ë¦¬íë drawScene()
í¨ì를 setInterval()
í¨ì를 ì´ì©í´ì 주기ì ì¼ë¡ í¸ì¶í©ëë¤.
ë¹ëì¤ê° ëë ë ë°©ìíë ended
ì´ë²¤í¸ì ëí 리ì¤ëë ì¶ê°í´ì, ë¹ëì¤ ì¬ìì´ ëëë©´ ë¶íìíê² CPU ìê°ì ì¡ìë¨¹ì§ ìëë¡ ì ëë©ì´ì
ì ì¤ë¨ìíµëë¤.
function videoDone() {
clearInterval(intervalID);
}
videoDone()
í¨ìë ë¨ìí window.clearInterval()
í¨ì를 í¸ì¶í´ì ì ëë©ì´ì
ì ì
ë°ì´í¸íë drawScene()
í¨ìì í¸ì¶ì ì¤ë¨ìíµëë¤.
ë¹ëì¤ ë¡ë©ê³¼ ì¬ìì ëí ì²ë¦¬ë¥¼ ë§ì¹ë©´, initTexture()
í¨ìì ë´ì©ì ë³ê²½í´ì¼ í©ëë¤. ì´ë²ìë ì´ë¯¸ì§ë¥¼ ë¡ë©íë ëì ë¹ì´ìë í
ì¤ì³ ê°ì²´ë¥¼ ìì±íê³ , í
ì¤ì³ ê°ì²´ë¥¼ ëì¤ì ì¬ì©í ì ìëë¡ íí°ë§ì ì¤ì íê¸°ë§ íë©´ ëë¯ë¡, initTexture()
í¨ìì ë´ì©ì´ ì ë¨ìì ìì ë³´ë¤ ì¡°ê¸ ë ê°ë¨í´ì§ëë¤:
function initTextures() {
cubeTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, cubeTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
}
ê°ì¥ ì¤ìí í
ì¤ì³ì ì
ë°ì´í¸ë¥¼ ë´ë¹íë updateTexture()
í¨ìë ë¤ìê³¼ ê°ìµëë¤:
function updateTexture() {
gl.bindTexture(gl.TEXTURE_2D, cubeTexture);
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.texImage2D(
gl.TEXTURE_2D,
0,
gl.RGBA,
gl.RGBA,
gl.UNSIGNED_BYTE,
videoElement,
);
}
ìì ê°ì ì½ë를 ì ì 본 ì ì´ ìì ê²ì
ëë¤. texImage2D()
를 í¸ì¶í ë Image
ê°ì²´ë¥¼ ì ë¬íì§ ìê³ <video>
ìì를 ì ë¬íë¤ë ê²ë§ ì ì¸íë©´, ì ë¨ììì ì¬ì©íë handleTextureLoaded()
루í´ê³¼ ê±°ì ëê°ìµëë¤. íì¬ì íë ìì ì¶ì¶í´ì í
ì¤ì³ë¡ ì¬ì©íë ê²ì WebGLì´ ììì ì²ë¦¬í©ëë¤.
drawScene()
í¨ììë 맨 ìì updateTexture()를 ì¶ê°í©ëë¤. drawScene()
í¨ìì ìí´ ì¥ë©´ì ë¤ì 그릴 ëë§ë¤ updateTexture()
ì´ í¸ì¶ë©ëë¤.
ì´ì ìì±ì ëë¤! WebGLì ì§ìíë ë¸ë¼ì°ì ë¼ë©´ ì¬ê¸°ìì ì¤ì ìëíë ìì 를 íì¸í ì ììµëë¤.
ì°¸ê³ ìë£RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4