自作ライブラリのテスト
jsdelivr:
https://cdn.jsdelivr.net/npm/fisce.js@1.1.10/src/index.min.js
<script src="https://cdn.jsdelivr.net/npm/fisce.js@1.1.10/src/index.min.js"></script>memo
fisceのフォルダに移動
npm login
npm version patch/minor/major -m "コメント"
npm publish
npm logout
saveCanvasなどの一連のセーブ関数を導入
createCanvasやSketchLooperを試験的に導入
導入したSketchLooperを大幅に仕様変更。ごめんなさい。
isLoopingのデフォルトをfalseにし、executeとpauseの重ね掛けを回避
mainFunction内部で再requestするときにisLoopingか否かを確かめていないせいで
loopFunction内部で実行されるpauseが無意味になっていたバグを修正
エラー処理を導入。まずは型チェック。createCanvasでdprにundefinedを入れてしまうバグを
補足できなかったので。少なくとも一回しか実行しない関数についてはいくらチェックしてもし足りないと思う。
一旦すべての番号を1.0.0に戻しました。
foxConstantsを導入。DPR,WIW,WIH,PI,TAU,HALF_PIを導入。
foxMathToolsを導入。とりあえずfractとclamp. clampはcssに倣ってmin,val,maxの形であるが、
もし逆であっても(min>maxであっても)ひっくり返して然るべき値が出せるようにする。
Noise3D,Noise4Dを導入。p5の模倣だが、それなりに実用性はあると思う。
RandomSystemの導入。seedも設定できる。二つの数に対して間の値を取るなどのことができる。
E_Typeのプロパティ名をvariable_nameとvariable_valueに変更(nameだとかぶるため)。
showメソッドを用意してエラー出力をオブジェクトにやらせるようにする
さらにSketchLooperでエラーを出した場合にループを止めるように仕様変更(取り消し可能)
デフォルトはfalseとする。falseの場合エラーが出ても何にも起きない。コンソール出力がキャンセルされる。
エラーを出さないのはまずいので、safe:falseでもエラーは出るようにする。その代わり回数制限を設けて120回でループを止めさせる。
止めたらカウントをリセットする。無限エラーは負荷がかかるので。
目的はコンソールをエラーまみれにすることではないので。
saveCanvasにおいてnullが返る場合に原因が不明瞭である不具合を修正
png,jpg,jpegは対応しているがPNG,JPG,JPEGは対応していない、などの不具合を修正
saveCanvasのswitch-case分岐を項目別ではなく列挙で書いてしまう凡ミスがあったので修正
createOffscreenを導入。WebWorkerは未定。
CameraControllerとTRS3ControllerにおいてwheelAction(e)にe.preventDefaultを付与
これにより画面が一緒に動くのを防ぐ
libtessを取り扱うためのfoxTessを導入。基本的にはtriangulateだけ使えば問題ない。
libtessは別途scriptとして用意する必要がある。
なぜかlibtess用の関数が重すぎるので、中止。
しばらくは外部メソッドとしての運用をしましょう。
libtess重くなってなかったです。疲れてるので。凡ミス。すみませんでした。
libtessのcallbackを初期化時ではなく任意のタイミングで変更できるように仕様変更
SketchLooperのloopFunctionでthisを渡す。
intervalをSketchLooperに導入して実行間隔を変えられるように変更。たとえば100なら1秒10回くらい
OffscreenCanvasの保存のためにsaveCanvasを非同期化。ついでにsaveTextとsaveJSONも非同期化。
Vecta.validateの引数2個の場合の挙動が色々とまずいので、0を補うように仕様変更。
divが気になるがあれは基本引数1個でしか使わないから問題ないだろう。
EasyCanvasSaverを導入。cvsで初期化したら任意のタイミングで名前指定して発火させるだけ。
foxTessのtriangulateにmergeを導入。出力においては点がマージされている。メッシュ生成に使う。
evenlySpacingに点の個数に基づいたpartitionを導入。autoは変えない。even/oddはパリティになるように調整する。
smoothingとsmoothingAllを追加。内容はevenly->quad->evenlyというもの。autoなら点の数が使われる。
EasyCanvasSaverを改変。fire関数で発火させられるようにする。またdblclickでsaveされるのを使わない選択肢を
用意することで柔軟性を増す(デフォルトはdblclickで発火)。
clampを配列にも適用できるように仕様変更。色の為に。
foxColorを導入。coulourとcoulour3はそれぞれ長さ4,3の色配列を返す。WebGLの色指定用。
tessyにsizeを導入。長さ3以上でも使えるようにした。利用するにはtriangulate時にsize指定(デフォルト2)、
加えてtessCallbacks.combineをいじる必要がある。補助関数tessLerpを用意。data用意時にsize長さずつ用意する。
mergeに関しては残りの部分を配列の形ですべてzに放り込む。なのでsize=3であっても[0]でアクセスする必要がある。
createShaderProgramのエラー処理を強化。失敗したら文字列が返るようにする。
これでスマホでもデバッグ出来るかもしれない。
uniformXでuniformMatrix[234]fvの処理にあたり配列のFloat32化をとりやめ。そのまま使えばいい。
Vecta.rotateを2次元対応させた。数が1つなら0,0,1周りの回転となる。
addやsubに関連するVecta.validateのimmutable指定も2次元対応。これで数が2つの場合もtrueを使える。
getWebGLError. ドローコールの後で実行してエラーをキャッチする。コンソールに出ないエラーを取得できる。
たとえばattributeの範囲外指定エラーをスマホとかで取得するのに使えそう。Firefox系でも起きるけどね。
infoとcodeに分かれておりinfoに文字列が入ってる。
QuarternionのgetFromAAとMT4のgetRotationMatrixで引数のベクトルが勝手にnormalizeされちゃうのを回避する
Interactionでoncontextmenuのpreventの対象をdocumentからcanvasに変更(混在スケッチに対応するため)
getTextAlignとgetTextBoundingRect. measureTextのラッパ。結局これが使いづらいので。
なお改行は非対応。絵文字にも対応できるのが強い。
CameraControllerにおいて平行移動がアスペクト比を考慮していなかったので修正
具体的には短い方が1となるようにする。これにより長い方に動かしてもすっとんでいかなくなる。
MT4のメソッドにクォータニオンもしくは成分列挙で行列を取得する関数を追加
インスタンス:localRotationQ, globalRotationQ, setRotationQ
静的:getRotationMatrixQ, getRotationQ
ただし単位クォータニオン限定とする。要するにgltfのための関数。あっちもw,x,y,zの並び。
assert(Vecta,Quarternion,MT4)の第4引数にdirectConsole(=false)を追加
trueの場合そのままconsole出力される
createGltfとGltfクラスの実装(準備中)
TimeArrowのgetElapsedDiscreteでmoduloが1の場合に割り算しない処理になっていたが困るので、
デフォルトを0とし、0の場合に割り算しないことにした。
フレーム数が1の場合のアニメーション(いわゆるポーズ)の場合にバグるのを防ぐため。
Counterの方もそうしましょう。そうしましょ。
createGltf, Gltf, BoneTreeを実装。
今現在出来ること:通常描画、頂点色描画、テクスチャ描画、シェイプキー(ウェイト)アニメーション、
スキンメッシュアニメーション。複数のメッシュの描画も可能。できないことはトランスフォームアニメーション、マテリアルなど。
まあとりあえずこれで充分でしょう。
createBufをcreateBufferに改名。createWeightAnimationsをvaoを引数にbind関数を用いてattributeで表現するように変更。
createWeightAnimationsとcreateSkinMeshAnimationsのoptionにincludeDataを加えてtrueの場合に頂点とか行列データを出せるように
そんでテクスチャに入れたりできると嬉しい。
createTransformAnimationsを追加。これでアニメーションは一通り再生できるようになった。
encodeMeshesとencodeMaterialsを追加。それに基づいてcreateVAOとcreateWeightAnimationsを書き直し。
以降はlocation必須となる。locationが用意されたattrのみが使われる。つまり何でもあり。セマンティクス指定必須。
MT4にaddScalarを追加、さらにinitの引数にスカラーを設定するとそのスカラーの行列になる(ゼロ行列で初期化できる)。
デフォルトは1です!!なので引数が無い場合は単位行列になります。
ついでにコンストラクタに配列を許す(足りない部分は0埋め)。加えてスカラー倍(mult)を追加。
createTransformAnimationsにupdateの他にupdateFloatを追加。小数でやると補間される。
アニメーションで内部的に「% frames」とすることで整数をそのまま渡せるように仕様変更。
createWeightAnimationsにdoubleのoptionを導入して補間ができるように仕様変更
VectaとQuarternionも配列引数で生成できるように仕様変更