・./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//メインループ再セット
}






