ì ë¨ìììì ìì ì½ëë ì ì§ëì´ ìë ê²ì²ë¼ ë³´ì´ì§ë§ ì¬ì¤ì 15ë°ë¦¬ì´ë§ë¤ í ë² ì© WebGL ì¥ë©´(Scene)ì ë¤ì 그리ëë¡ ì¤ì ëì´ ììµëë¤. ê·¸ë ¤ì§ ê°ì²´ì ìíê° ê³ì ëê°ê¸° ë문ì, ëê°ì ê°ì²´ë¥¼ 15ë°ë¦¬ì´ë§ë¤ ê³ì ë¤ì ê·¸ë¦¬ê³ ìë ê²ì ëë¤. ì´ì ì°ë¦¬ê° 그린 ì ì¬ê°íì ì¤ì ë¡ ìì§ì´ê² ë§ë¤ì´ ë³´ê² ìµëë¤.
ì´ë² ìì ììë 2ì°¨ì ì ì¬ê°íì 3ì°¨ìì¼ë¡ íì ìí¤ê³ ì´ëìì¼ ë³´ê² ìµëë¤. 3ì°¨ìì ì´ë£¨ë X, Y, Zì¶ ë°©í¥ ëª¨ë를 ì¤ì¬ì¼ë¡ íì ìì¼ ë³´ë©´, ì°ë¦¬ê° 그린 ê²ì 2ì°¨ì ì ì¬ê°íì´ì§ë§ 3ì°¨ì ê³µê° ìì ì¡´ì¬íë¤ë ê²ì ì¤ê°í ì ìì ê² ì ëë¤.
ì ì¬ê°í íì ìí¤ê¸°ë¨¼ì ì ì¬ê°íì íì ìì¼ ë³´ê² ìµëë¤. íì ìí¤ë ¤ë©´ íì ìí(íì ë)를 ì ì¥í ë³ìê° íìí©ëë¤:
var squareRotation = 0.0;
ì´ì ì ì¬ê°íì 그릴 ë íì ì ë°ìíëë¡ drawScene()
í¨ì를 ìì í´ì¼ í©ëë¤. ì ì¬ê°íì ì²ìì ê·¸ë ¤ì§ ìì¹ë¡ ì´ëìí¤ê³ ëì ë¤ìê³¼ ê°ì´ íì ì ì ì©í©ëë¤:
mvPushMatrix();
mvRotate(squareRotation, [1, 0, 1]);
íì¬ ìíì 모ë¸-ë·° íë ¬ì ì ì¥íê³ , Xì¶ê³¼ Zì¶ì 기ì¤ì¼ë¡ squareRotation
ë§í¼ íë ¬ì íì ìíµëë¤.
ì ì¬ê°íì ê·¸ë¦¬ê³ ë íì 모ë¸-ë·° íë ¬ì ììíë¡ ë³µêµ¬í©ëë¤:
모ë¸-ë·° íë ¬ì 복구íë ì´ì ë ì´ íì ì´ ë¤ë¥¸ ê°ì²´ì ìí¥ì 미ì¹ë ê²ì ìë°©í기 ìí´ì ì ëë¤.
ì¤ì ë¡ ì ëë©ì´ì
í¨ê³¼ê° ëíëëë¡ íë ¤ë©´ squareRotation
ê°ì ìê°ì´ ì§ë¨ì ë°ë¼ ê³ì ë³ê²½í´ì£¼ë ì½ë를 ì¶ê°í´ì¼ í©ëë¤. lastSquareUpdateTime
ì´ë¼ë ë³ìì ë§ì§ë§ì¼ë¡ ë¤ì ê·¸ë ¸ë ìê°ì ì ì¥íê³ , ë¤ìê³¼ ê°ì ì½ë를 drawScene()
ì ì¶ê°í©ëë¤:
var currentTime = new Date().getTime();
if (lastSquareUpdateTime) {
var delta = currentTime - lastSquareUpdateTime;
squareRotation += (30 * delta) / 1000.0;
}
lastSquareUpdateTime = currentTime;
ì´ ì½ëë ë§ì§ë§ì¼ë¡ squareRotation
ì ê°ì ë³ê²½í ìê°ê³¼ íì¬ ìê°ê³¼ì ì°¨ì´ë¥¼ ì´ì©í´ì íì ëì ëíë´ë squareRotation
ì ê°ì ê²°ì í©ëë¤.
ì ì¬ê°íì 그리기 ì ì ìì¹ê°ì ë³ê²½íë©´ ì ì¬ê°íì ì´ëìí¬ ì ììµëë¤. ì´ë² ìì ììë íìµì 목ì ì¼ë¡ ì주 기ì´ì ì¸ ì ëë©ì´ì ì 구íí´ë´ ëë¤. ì¤ì ìì ì´ë° ìì¼ë¡ ì ëë©ì´ì ì 구ííë©´ ì¬ëë¤ìê² ì¬ëë°ì§ 못í ê²ì ëë¤.
X, Y, Z ê° ì¶ë³ ì¤íì (offset) ê°ì ì ë³ìì ì ì¥í©ëë¤:
var squareXOffset = 0.0;
var squareYOffset = 0.0;
var squareZOffset = 0.0;
ì¶ ë³ ìì¹ ë³ëê°ì ë¤ìê³¼ ê°ì´ ê°ê¸° ë¤ë¥¸ ê°ì¼ë¡ ì§ì í©ëë¤:
var xIncValue = 0.2;
var yIncValue = -0.4;
var zIncValue = 0.3;
ì´ì ìì¹ ë³ëê°ì ê³ì°íë ì½ë를 ììì 구íí íì ë ê³ì° ì½ë ë°ë¡ ìëì ì¶ê°í©ëë¤:
squareXOffset += xIncValue * ((30 * delta) / 1000.0);
squareYOffset += yIncValue * ((30 * delta) / 1000.0);
squareZOffset += zIncValue * ((30 * delta) / 1000.0);
if (Math.abs(squareYOffset) > 2.5) {
xIncValue = -xIncValue;
yIncValue = -yIncValue;
zIncValue = -zIncValue;
}
ë§ì§ë§ì¼ë¡ ë¤ì ì½ë를 drawScene()
í¨ìì ì¶ê°í©ëë¤:
mvTranslate([squareXOffset, squareYOffset, squareZOffset]);
ì´ì ì ì¬ê°íì´ íë©´ìì ì¢, ì°, ì, ìë, ì, ë¤ë¡ ìì í ì기ë©ëë¡ ìì§ì´ë©´ì íì íë ê²ì ë³¼ ì ììµëë¤. ì´ì°ë³´ë©´ ë°ííë©´ ë³´í¸ê¸° ê°ê¸°ë í©ëë¤.
WebGLì´ ì§ìëë ë¸ë¼ì°ì ë¼ë©´, ì¬ê¸°ìì ì¤ì ëìíë ìì 를 íì¸í ì ììµëë¤.
ì¶ê°ì ì¸ íë ¬ ì°ì°ìëì ìì ë ì¤íì ì¬ì©íë ë ê°ì push, pop 루í´ê³¼, 주ì´ì§ ê°ëë§í¼ íì ìí¤ë íë ¬ì í¬í¨íë ëª ê°ì§ ì¶ê°ì ì¸ íë ¬ ì°ì°ì ì¬ì©í©ëë¤. í ë² ì°¸ê³ íì기 ë°ëëë¤:
var mvMatrixStack = [];
function mvPushMatrix(m) {
if (m) {
mvMatrixStack.push(m.dup());
mvMatrix = m.dup();
} else {
mvMatrixStack.push(mvMatrix.dup());
}
}
function mvPopMatrix() {
if (!mvMatrixStack.length) {
throw "Can't pop from an empty matrix stack.";
}
mvMatrix = mvMatrixStack.pop();
return mvMatrix;
}
function mvRotate(angle, v) {
var inRadians = (angle * Math.PI) / 180.0;
var m = Matrix.Rotation(inRadians, $V([v[0], v[1], v[2]])).ensure4x4();
multMatrix(m);
}
ì´ ë£¨í´ì ìì ì Vlad VukiÄeviÄê° ìì±íë ìì 를 ì°¸ê³ íì¬ ë§ë¤ììµëë¤.
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