・./testpoly.htm
<!DOCTYPE html> <html lang="ja"> <head> <title>ポリゴンテスト & NAS6LIB ヘルプ ドキュメント</title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script language="JavaScript" type="text/javascript" src="./javascripts/x3dom/jquery-2.1.4.min.js" ></script> <link rel='stylesheet' type='text/css' href='./javascripts/x3dom/x3dom.css'> <script language="JavaScript" type='text/javascript' src='./javascripts/x3dom/x3dom.js'> </script> <link rel='stylesheet' type='text/css' href='./javascripts/x3dom/x3dom.css'> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/timer.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/vector.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/matrix.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/quaternion.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6/help.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6/testpoly.js"></script> <style> article, aside, dialog, figure, footer, header, hgroup, menu, nav, section { display: block; } #x3dabs{ position: absolute; float: left; top: 76px; left: 20px; background:#8080b0; border: 2px #000000 solid; } </style> </head> <body text="black" link="#3333cc" vlink="#663399" alink="#cc0000" bgcolor="#faebf1" background="./img/kumausagineko.jpg"> <b> <h1>ポリゴンテスト & NAS6LIB ヘルプ ドキュメント</h1> <div style = 'width:500px; height:250px; border: 0px; overflow:hidden;'> <x3d id='x3dabs' width='500px' height='250px'> <scene> <Viewpoint id='viewp001' position='0 3 20' orientation='0 1 0 0' description='camera'></Viewpoint> <directionalLight id="directional" direction='1 -1 1' on ="TRUE" intensity='1.0' shadowIntensity='0.0'></directionalLight> <Transform center='0 0 0' translation='0 0 8' id='box0' DEF='box0'> <Transform rotation='0 1 0 0' id='box1' DEF='box1'> <shape> <appearance> <ImageTexture url="./img/koala.jpg"></ImageTexture> <material diffuseColor='0.8 0.8 0.8'></material> </appearance> <Box size = '5 5 5'></Box> </shape> </Transform> </Transform> </scene> </x3d> </div> // ……… 中 略 ……… </b> </font> </body> </html>
・./javascripts/nas6/testpoly.js
var TMan = new N6LTimerMan(); //timer manager//タイマーマネージャー jQuery(document).ready(function(){ TMan.add(); TMan.timer[0].setalerm(function() { GLoop(0); }, 50); //set main loop//メインループセット }); var bx = new N6LVector(new Array('1','0','0','8'), true); //pos Box//Box座標 var bm = new N6LMatrix(4).UnitMat(); //mat Box//Box回転行列 //main loop//メインループ function GLoop(id){ // ……… 中 略 ……… var MatWK = new N6LMatrix(4).UnitMat(); var v = new N6LVector(4, false); //unit vector//単位ベクトル var ax = new N6LVector(4, true).UnitVec(1); var ay = new N6LVector(4, true).UnitVec(2); var az = new N6LVector(4, true).UnitVec(3); //rot mov obj//物体回転移動 MatWK = MatWK.RotAxis(ay, 1.0 * Math.PI / 180.0); //around y axis rotate 1 degree//y軸回りに1度回転する回転行列を乗算 bx = MatWK.Mul(bx); //pos Box multiply matrix//Box座標に回転行列を乗算して更新 //unit vector//単位ベクトル ax = ax.UnitVec(1); ay = ay.UnitVec(2); az = az.UnitVec(3); //rot obj//物体回転 MatWK = new N6LMatrix(bm); //mat Box//Box回転行列 MatWK = MatWK.RotAxis(az, 3.0 * Math.PI / 180.0); //around z axis rotate 3 degree//z軸回りに3度回転する回転行列を乗算 MatWK = MatWK.RotAxis(ay, 2.0 * Math.PI / 180.0); //around y axis rotate 2 degree//y軸回りに2度回転する回転行列を乗算 bm = MatWK.RotAxis(ax, 1.0 * Math.PI / 180.0); //around x axis rotate 1 degree//x軸回りに1度回転する回転行列を乗算 v = bm.Vector(); //rot vector//回転行列から回転ベクトルを取得 var angle = bm.EulerAngle(3, 2, 1); //rotate order ZYX //回転順番 ZYX // ↑ 前 半 : ↓ 後 半 //apply x3dom var pos = bx.ToX3DOM(true); var elm = document.getElementById('box0'); elm.setAttribute('translation', pos.toString()); var rot = v.ToX3DOM(); elm = document.getElementById('box1'); elm.setAttribute('rotation', rot.toString()); //debug//デバッグ用 elm = document.getElementById('debug'); elm.innerText = 'EulerAngle(rotate per degree z(3)_y(2)_x(1))\n' + angle.x[0] + ' ' + Math.floor(angle.x[1] * 180.0 / Math.PI) + ' ' + Math.floor(angle.x[2] * 180.0 / Math.PI) + ' ' + Math.floor(angle.x[3] * 180.0 / Math.PI); TMan.timer[id].setalerm(function() { GLoop(id); }, 50); //reset main loop//メインループ再セット } // ……… 後 略 ………
・ヘッダの書き方
<head> <title>タイトルを入れてください</title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script language="JavaScript" type="text/javascript" src="./javascripts/x3dom/jquery-2.1.4.min.js" ></script> <link rel='stylesheet' type='text/css' href='./javascripts/x3dom/x3dom.css'> <script language="JavaScript" type='text/javascript' src='./javascripts/x3dom/x3dom.js'> </script> <link rel='stylesheet' type='text/css' href='./javascripts/x3dom/x3dom.css'> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/timer.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/vector.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/matrix.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/quaternion.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6/testpoly.js"></script> <style> article, aside, dialog, figure, footer, header, hgroup, menu, nav, section { display: block; } #x3dabs{ position: absolute; float: left; top: 76px; left: 20px; background:#8080b0; border: 2px #000000 solid; } </style> </head>
<head> <title>タイトルを入れてください</title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script language="JavaScript" type="text/javascript" src="./javascripts/x3dom/jquery-2.1.4.min.js" ></script> <link rel='stylesheet' type='text/css' href='./javascripts/x3dom/x3dom.css'> <script language="JavaScript" type='text/javascript' src='./javascripts/x3dom/x3dom.js'> </script> <link rel='stylesheet' type='text/css' href='./javascripts/x3dom/x3dom.css'>
<script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/timer.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/vector.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/matrix.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6lib/quaternion.js"></script> <script language="JavaScript" type="text/javascript" src="./javascripts/nas6/testpoly.js"></script>
<style> article, aside, dialog, figure, footer, header, hgroup, menu, nav, section { display: block; } #x3dabs{ position: absolute; float: left; top: 76px; left: 20px; background:#8080b0; border: 2px #000000 solid; } </style> </head>
・オブジェクトの書き方
<div style = 'width:500px; height:250px; border: 0px; overflow:hidden;'> <x3d id='x3dabs' width='500px' height='250px'> <scene> <Viewpoint id='viewp001' position='0 3 20' orientation='0 1 0 0' description='camera'></Viewpoint> <directionalLight id="directional" direction='1 -1 1' on ="TRUE" intensity='1.0' shadowIntensity='0.0'></directionalLight> <Transform center='0 0 0' translation='0 0 8' id='box0' DEF='box0'> <Transform rotation='0 1 0 0' id='box1' DEF='box1'> <shape> <appearance> <ImageTexture url="./img/koala.jpg"></ImageTexture> <material diffuseColor='0.8 0.8 0.8'></material> </appearance> <Box size = '5 5 5'></Box> </shape> </Transform> </Transform> </scene> </x3d> </div>
・メインループを登録する
var TMan = new N6LTimerMan(); //タイマーマネージャー jQuery(document).ready(function(){ TMan.add(); TMan.timer[0].setalerm(function() { GLoop(0); }, 50); //メインループセット });
・メインループを実装する
var bx = new N6LVector(new Array('1','0','0','8'), true); //pos Box//Box座標 var bm = new N6LMatrix(4).UnitMat(); //mat Box//Box回転行列 //main loop//メインループ function GLoop(id){ // ……… 中 略 ……… var MatWK = new N6LMatrix(4).UnitMat(); var v = new N6LVector(4, false); //unit vector//単位ベクトル var ax = new N6LVector(4, true).UnitVec(1); var ay = new N6LVector(4, true).UnitVec(2); var az = new N6LVector(4, true).UnitVec(3); //rot mov obj//物体回転移動 MatWK = MatWK.RotAxis(ay, 1.0 * Math.PI / 180.0); //around y axis rotate 1 degree//y軸回りに1度回転する回転行列を乗算 bx = MatWK.Mul(bx); //pos Box multiply matrix//Box座標に回転行列を乗算して更新 //unit vector//単位ベクトル ax = ax.UnitVec(1); ay = ay.UnitVec(2); az = az.UnitVec(3); //rot obj//物体回転 MatWK = new N6LMatrix(bm); //mat Box//Box回転行列 MatWK = MatWK.RotAxis(az, 3.0 * Math.PI / 180.0); //around z axis rotate 3 degree//z軸回りに3度回転する回転行列を乗算 MatWK = MatWK.RotAxis(ay, 2.0 * Math.PI / 180.0); //around y axis rotate 2 degree//y軸回りに2度回転する回転行列を乗算 bm = MatWK.RotAxis(ax, 1.0 * Math.PI / 180.0); //around x axis rotate 1 degree//x軸回りに1度回転する回転行列を乗算 v = bm.Vector(); //rot vector//回転行列から回転ベクトルを取得 var angle = bm.EulerAngle(3, 2, 1); //rotate order ZYX //回転順番 ZYX // ↑ 前 半 : ↓ 後 半 //apply x3dom var pos = bx.ToX3DOM(true); var elm = document.getElementById('box0'); elm.setAttribute('translation', pos.toString()); var rot = v.ToX3DOM(); elm = document.getElementById('box1'); elm.setAttribute('rotation', rot.toString()); //debug//デバッグ用 elm = document.getElementById('debug'); elm.innerText = 'EulerAngle(rotate per degree z(3)_y(2)_x(1))\n' + angle.x[0] + ' ' + Math.floor(angle.x[1] * 180.0 / Math.PI) + ' ' + Math.floor(angle.x[2] * 180.0 / Math.PI) + ' ' + Math.floor(angle.x[3] * 180.0 / Math.PI); TMan.timer[id].setalerm(function() { GLoop(id); }, 50); //reset main loop//メインループ再セット }