2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
全30件 (30件中 1-30件目)
1
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.2.3 Matrix Decompositionさまざまな変換が施されたマトリックスから要素を取り出すことをマトリックス分解と呼びます。・平行移動のマトリックスから成分を取り出すのは単に4x4マトリックスの最後の列の要素を見ればよい・反転変換が行われているかどうかを知りたければマトリックスの行列式が負かどうか調べればよいそれ以外は面倒です。Thomas とGoldman と Shoemak さんがいろいろ研究しているのでここから先は reference をたどりましょう。
2005年11月30日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.2.2 Extracting Parameters from the Euler Transform直行マトリックスからオイラー角の h, p, r を抽出する話です。atan(), atan2() あたりで抽出できるはできるのですがこれも制約がありますので要注意と。つうかクォータニオンで任意軸回転すればこの辺全部避けられるとは思いますが。「30度まで回転して欲しい」といった回転角度の制約なんかには直感的でよいかもね。まあそこさえクォータニオンでやろうかと最近は思いますけど。
2005年11月29日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.2 Special Matrix Transforms and Operationsオイラー角による回転変換とそのマトリックスの取り出しなんかをこの章で扱います。最終的にはオイラー角での任意軸回転までやりますよと。3.2.1 The Euler Transformオイラー角による回転ですが明らかに直行行列になりますので逆行列は転置で求められます。この章では head, pitch, roll と3軸をとっています。そしてオイラー角はジンバルロックを起こすと自由動がひとつ失われてまずい状態になります。もうこの辺面倒くさいので全部クォータニオンで済ましたほうがよいかと思いますがまあここでは一通りオイラー角でできることをまずは扱います。いろいろ制約があるので要注意です。
2005年11月28日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.1.8 Computation of Inverses逆行列の求め方について。・媒介変数を逆にすることで逆変換ができるケース。・転置行列が逆行列になっているケース。ここまでは楽勝。しかしそれ以外のケースは厄介…。余因子行列法、クラメルの公式などが分岐が少なくいまどきのハードで高速に処理できますので有望です。もう面倒なのでスケールいらんわ!ってのが一番よい気もする今日この頃。
2005年11月27日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.1.7 Normal Transformということで法線の変換の話。法線はマトリックスの逆行列の転置によって変換される必要があります。昨日ちょっと触れましたがTRだけならここまでやる必要はありません。(というか逆行列と転置が同じ値になりますので打ち消されます。)Sも一様の場合は法線を正規化すればよいだけなのでまだよいですね。そうでない場合は逆行列を求めて転置したものを法線の変換に利用する必要があります。この辺スケールだけ特殊なんでやっぱTRSまとめてモーション計算とかするのをやめてTRで計算およびSで計算と分けようかと思うってのが昨日書いたこと。
2005年11月26日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.1.5 Concatenation of Transforms行列の掛け算なので順番に依存しますよという高校の数学の話。3.1.6 The Rigid-Body TransformTRだけならものの形状が変形しないので rigid-body 変換というそうです。最近思うのですが TRS のうち S だけ何かと面倒なので別扱いしたほうがよいかもって思います。IKとかやる場合スケール入ってたら困るしねぇ。次に扱う法線なんかもスケールがかかると延びたり向きが変わったりして面倒です。
2005年11月25日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.1.4 Shearingせん断変形です。すみません俺コレ使ったこと無いんだよね…。使い方次第でフレームバッファ揺らしたりぼかしたりやりたい放題なんでしょうけどね。ちょっとこんど試してみるか。まあこれは数式でごちゃごちゃ言うより図を見て幾何学的に理解しておくのがよさそうに思います。そもそもそういったぐにゃぐにゃ効果で使う事が多いでしょうしね。ということで適当にお茶を濁しておきます。そうそう、せん断マトリックスの行列式は全て|H|=1となります。これは体積が保存されるということですね。
2005年11月24日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.1.3 Scalingスケールです。こいつはまあ簡単。スケール行列 S(s) = S( sx, sy, sz ) です。その逆行列 S^-1(s) はS( 1/sx, 1/sy, 1/sz ) になるだけですね。同時座標系を使う場合はw除算される値を使ってやればスケールをかける事ができますけど効率悪いかも。負の要素でスケールをかける場合はリフレクションとかミラーとか呼ばれる反転した形状になります。ただ頂点の並びまで反転するのでライト計算やらカリングの向きなどが狂うのでそこは注意して扱う必要がありますね。というかカリングは向きを変えればよいけどライト計算って対処法なんかあるの?気にしないのが一番?そんなわけであるマトリックスがミラーマトリックスかどうか判断する為には左上の3x3成分の行列式を計算すればよいです。もしこの値が負ならそのマトリックスはミラーマトリックスということになりますね。
2005年11月23日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.1.2 Rotation回転です。こいつはちょっと厄介です。回転行列の対角成分の和は軸に関係 なく trace と呼ばれる以下のようになります。tr(R)=1+2consθ回転行列は回転軸の上の点を動かすことができません。またどんな軸の回転も表すことができます。全ての回転行列は直交します。回転行列の行列式は常に1です。ある点を中心に回転したい場合は回転の中心を原点に持ってきて回転させてまた戻せばよいと。
2005年11月22日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/3.1 Basic TransformsTRSおよびせん断変換などの基本的な変換を扱います。剛体の頂点および法線の移動ができて逆行列の計算ができるようになります。TRSおよび反転・せん断変換は全てアフィン変換で元の図形で直線上に並ぶ点は変換後も直線上に並び、平行線は変換後も平行線であるなど、幾何学的性質が保たれる変換方式になります。3.1.1 Translationある位置から別の位置へと移動させる変換。点は移動するのですがベクトルは移動しません。まあ頂点は動くけど法線なんかは位置に関係ないので動かしませんよと。
2005年11月21日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/ようやく第3章。透視変換の数学的なお話。ベクトルと点を同じように扱えるように同時座標で扱いますよと。いまどきライブラリが充実していますが理屈を学ぶことは大切です。たとえば直行変換の逆変換が転置変換になることを知ることでより高速なコードを書けたりしますよと。まあ今日は簡単に導入まで。
2005年11月20日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/Rasterrizerラスタライズします。テクスチャが張られている場合はここで張られます。見える見えないはZバッファアルゴリズムで解決します。Summary興味深い話があります。歴史的にはハードウェアグラフィックスアクセラレーションはパイプラインの終わりから始まったてとこ。これ何で?Further Reading and ResourcesBlinn さんの A Trip Down the Graphics Pipeline を参考書としてあげてます。読んだけど何書いてあったかぶっちゃけ忘れた。
2005年11月19日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/2.5 Through the Pipeline章の終わりなので復習的な内容。パイプラインは Application, Geometory,Rasterizer に大きく分けられますよと。Applicationアプリケーションレベルであれこれする部分。ある意味プログラムの本体。Geometry頂点・法線などを変換します。マテリアルやライティングの処理を行い後はラスタライズの処理へ回しますよと。
2005年11月18日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/2.3.5 Screen mappingスクリーン座標というかウインドウの中の座標というかそこに最後に持ってきますよと。まあコレはそのまんま。2.4 The Rasterizer Stageラスタライズあついはスキャンコンバージョンと呼ばれるやつ。興味深いのは歴史的にみるとこのあたりのパイプラインの後半のステージからハードウェア化が進んだということ。何ででしょうね。単にハードウェア化しやすかったからでしょうか。ここでカラーバッファやステンシルなんかの話題も取り上げられていますね。そりゃここで扱うのが適切なのでしょうけどあんまりハード構造まで考えたこと無かったからやや新鮮に感じるのかも。
2005年11月17日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/2.3.3 Projectionよく使うのプロジェクションとしては平行投影と透視投影。どちらも4x4行列で作ります。2.3.4 Clipingビューボリュームに入らないものはここで切ります。頂点を切りなおすのはそれなりに計算負荷が高くて大変ですよと。
2005年11月16日
コメント(0)
今日も Real Time Rendering を読みます。http://www.realtimerendering.com/2.3.1 Model And View Transformモデル変換は TRS の姿勢違いのインスタンスを複数もてるようにするため。ビュー変換はプロジェクションとクリップを行いやすくし4x4マトリックスならこの辺合成できますので便利ですよと。2.3.2 Lighting and Shadingライト計算は実社会での光子とものの表面のとの間の相互作用の近似。ライティング自体はワールド座標で行われることが多いですが別に他の座標系でも変換すれば問題ないですかね。
2005年11月15日
コメント(0)
今日も頑張って Real Time Rendering を読みます。http://www.realtimerendering.com/2.2 The Aplication Stageアプリケーション本体側での処理部。全部ソフトウェア実装なのでやりたい放題。まあそりゃ当然。コリジョンやらアニメーションなんかも基本的に全部こちらでやりますよと。2.3 The Geometry Stageポリゴンごとの処理あるいは頂点ごとの処理。中は細かいサブステージに分かれている。・Model And View Transform・Lighting and Shading・Projection・Clipingこの辺ですが詳細はまた明日。
2005年11月14日
コメント(0)
今日も頑張って Real Time Rendering を読みます。http://www.realtimerendering.com/英語で800ページはさすがにつらいねぇ。でもよい勉強になっております。今日は第2章の最初のところ。レンダリングパイプラインの話。パイプラインを石油の例でたとえてあります。・パイプラインのどこかが詰まると全体が遅れてしまう。・段階を分ければ分けるほど最適化の余地がある。・大きく application, geometry, rasterizer のステージに分けてます。なるほどなるほど。まあこの辺はハードウェア化の都合って言うのが大きいところなんでしょうね。だからもうフムフムと思うしかないや。
2005年11月13日
コメント(0)
Real Time Rendering 第一章を読んでみました。http://www.realtimerendering.com/リアルタイムレンダリングはダイナミックな映像の応答がありユーザーを没入させる。fps などの尺度で測られ数値が大きいほど効果的である。リアルタイムレンダリングはインタラクテビティだけではなく3次元のレンダリングもさす。インタラクテビティと3Dだけでなくハードウェアアクセラレーションも重要になった。1.1 概要2章:レンダリングパイプライン 3章:座標変換 4章:マテリアル 5章:テクスチャ 6章:ライティングとシェーディング 7章:ノンフォトリアリスティックレンダリング 8章:イメージベースドレンダリング 9章:高速化手法 10章:パイプラインの最適化 11章:ポリゴン手法 12章:曲面と曲面サーフェィス 13章:交差判定法 14章:衝突検出 15章:グラフィックスハードウェア 16章:未来の話1.2 表記と定義まず最初にこの本での数学的な記述方を説明します。1.2.1 数式の記述方数式の記述を Table 1.1にまとめました。角度とスカラー値は実数をとります。同時座標系では座標系を(x,y,z,w)であらわしベクトルを(x,y,z,0)で点を(x,y,z,1)で表します。マトリックスは2x2,3x3,4x4などが使われます。平面はπで表します。正の半空間を>0であらわし負の半空間を<0で表します。三角形は点3つで表現します。Table 1.2 にさらに追加で数学的な演算子を載せる。内積・外積など。x,y,x の各座標軸に沿った座標系を正規直行座標系と呼ぶ。[a,b] は aからbの閉空間で (a,b)は aからbの開空間です。atan2 などの Cの関数も使われます。我々は右手座標系を使います。色はRGBの3要素でのベクトルで表記します。値域は0~1です。1.2.2 幾何の表記もっとも基礎的なプリミティブは点、線、三角形です。幾何形状の集合をモデルやオブジェクトとよびシーンは描画されるもの全ての集合です。シーンにはマテリアル情報も含まれるとします。オブジェクトの例としては車、ビルなどがあります。曲面なども含みます。車のドアなどはサブセットと呼びます。他のリソースこの本では時間がかかっても変化しない基本を扱いその他の情報はウェブサイトを参照してください。
2005年11月12日
コメント(0)
無事 NovodeX のサンプルを読み終わりましたので今日からはRealTimeRendering を読むことにします。http://www.realtimerendering.com/ といっても最初はまあ序章を適当に読むだけ。翻訳勝手に上げてると著作権的にビミョウかもねぇ。まあだいぶ端折っているのでご容赦ください。序文リアルタイムレンダリングは進化したので前の版にかなり加筆しました。この本は基本的にリアルタイムレンダリングを扱います。この本が長く使えるように特定のAPIやハードに依存せず記述するよう努力します。基本的なCGやアルゴリズムの知識が必要です。必要ならリファレンスを読んでください。この本は真空に存在しているわけではなく可能な限りのリファレンスを用意しています。www.realtimerendering.com に関連情報を集めています。必要なことの概要をこの本で見つけられるようにすることがこの本の目的です。謝辞第2版を書くにあたって最も心地よかったのは多くの方に協力していただけたことである。画像イメージや他のリソースを提供くださった方にも感謝しています。A,K Peters のスタッフにも感謝しています。最後にそして最も重要なのは家族への感謝である。第1版の謝辞この本を書くに当たってレビュワーの方には多くの専門知識を進んで提供してくれた。他にも多くの方に画像イメージやモデルを提供していただいたのでここにあげる。AK Petres のスタッフにも感謝しています。最後にそして最も感謝しているのは家族です。
2005年11月11日
コメント(0)
NovodeX の Tutorial Lesson 401 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作り box と sphere, capsule, pyramid を作成。RenderCallback()いつもとおんなじ感じですがマルチスレッドで物理計算などを行っています。GetPhysicsResults()物理計算結果をフェッチします。ProcessInputs()入力を受け付けます。またデバッグ表示をここにはさんでいます。StartPhysics()経過時間に応じて物理計算を行います。ということで今日はマルチスレッドで物理計算する話。とはいえコレって平行で計算しているだけでマルチスレッドとはいえないようような気がするんすけど…。まあそもそもデュアルコアCPUとかではないのであんまり効果も出ないでしょうけどね。PS3のSPUならSPUごとにちゃんとアドレスのあるメモリがついているし高速に動くのでしょうね。
2005年11月10日
コメント(0)
NovodeX の Tutorial Lesson 315 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作りトラック作成。Truck::create()box 2つで tractor を作りさらに box 2つで trailer を作ります。そしてタイヤをいくつか作って truck とします。RenderCallback()描画部。いつもと同じ。ProcessKeys()トラックのコントロール関数をここで呼んでいます。Truck::control()ステアリングのジョイントに回転ばね指定。さらに前進用にモーター指定を行っています。ということで今日はトラックを作ってみました。ちょっと大きめですが特に新しいことは無いですね。
2005年11月09日
コメント(0)
NovodeX の Tutorial Lesson 314 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作り天井とパーティクルのエミッタを作ります。RenderCallback()描画部。いつもと同じ。RunPhysics()物理をまわすだけでなくパーティクルの状態の更新もここで行っています。Particle::update()熱力学でパーティクルを動かします。半径を最大値になるまで徐々に大きくします。新しいパーティクルもここで作成します。なかなか面白い動きになっていると思います。ParticleEmitter::addParticle()新しいパーティクルを作ります。FIFO があふれている場合はこれ以上作成しません。初速は経過時間に応じて徐々に変わるようにしています。ということで今日は物理法則に従ったパーティクル表現について学びました。なかなか面白い動きになっていて感心しました。
2005年11月08日
コメント(0)
NovodeX の Tutorial Lesson 313 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作りルービックキューブ状に Actor を集めて固めたオブジェクトを作ります。CreateMainObject()四角い Shape をたくさん作りそれらをまとめて1つの Actor を作っています。RenderCallback()描画部。ここもいつもと同じです。KeyboardCallback()'g' キーで Actor を構成するひとつの Shape をランダムでばらします。ReleaseRandomShape()ひとつの Shape をばらします。塊の Actor の重心などは再度計算しなおしています。ということで今日はばらばらに崩れる表現でした。思った以上に面白い動きになっていますね。塊の重心を再計算したりしているのが面白い動きにつながっているのでしょうね。今日は大変勉強になりました。
2005年11月07日
コメント(0)
NovodeX の Tutorial Lesson 311 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。シーンを適当に作り階段や壁を作り各種のコントローラを作ります。InitCharacterControllers()球や箱のコントローラーを作ります。RenderCallback()描画部。今までと同じ。UpdateCharacter()経過時間に応じてキャラクタを移動させます。時間の経過にバイアスをかけることによって速度に差をつけているようです。RenderCharacters()コントローラのサイズを取得して形状を描画。ということで今日はキャラクタのコントローラの扱い。ぶっちゃけよくわかりません。何をやりたいのだろうか…。
2005年11月06日
コメント(0)
NovodeX の Tutorial Lesson 309 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作り地形や障害物および車など作成。CreateObstacles()障害物作成。箱と球とカプセルの集合体のようだ。CreateStack()箱を適当に積み重ねる。InitCar()車で使用する車輪とレイの設定など。CreateCar()複数の Actor を組み合わせて車作成。RenderCallback()描画部。以前この関数を実行してからの経過時間が長すぎる場合は何もしない。車の1フレーム分の処理を実行する。TickCar();ステアリングの状態に応じて車輪に力を加える。車輪の向きに応じて前向きに進む力を加える。ということで今日は車を物理的に動かしてみました。まあ個々の要素技術は全て既出のものの組み合わせですがだいぶ複雑になってきましたね。
2005年11月05日
コメント(0)
NovodeX の Tutorial Lesson 308 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作り草を生やします。Blade()葉のコンストラクタ。適当にジョイントをつないでいるだけですね。ジョイントのダンパを適切にしたり回転角度を制限することで表現できますね。RenderCallback()この辺はいつもと同じなので省略。ということでジョイントをつないで草を作ってみました。こういったものもジョイントで表現できるのですね。ファインディングニモの水草とかこんな感じで綺麗でしたよね。
2005年11月04日
コメント(0)
NovodeX の Tutorial Lesson 307 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作り戦車作成。モーターの初期化も行います。Tank()Tank クラスのコンストラクタ。キャタピラを左右2つ作成し車体、砲台などを作成。Tread()Tread クラスのコンストラクタ。車輪を4つ作りジョイントでつなぎます。その後もごちゃごちゃ作っておりますが冗長なので省略。InitMotors()モーター関連の descriptor をまとめて準備しております。RenderCallback()いつもと同じく物理を動かしキーをみて Actor を描画しているのですが今回はモーター周りの処理も入っていますね。SetMotorOnTread()キャタピラ部分のジョイントに初期化時に作った descriptor を渡しています。ということで今日は戦車の作成。ぶっちゃけコレも全てを物理で動かす必要は無いかな。むしろ効率悪いでしょうからキャタピラとかやわらかい部分と硬くてモーションそのままで良い部分とを分けて描画するのが良いかな。ちょうどICO のプレイヤーとかそんな感じですよね。
2005年11月03日
コメント(0)
NovodeX の Tutorial Lesson 306 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作り車輪を2つ作成。さらにジョイントでキャタピラ状にしていきます。RenderCallback()描画部。まあいつもと同じ。ということで今日はギアとベルト。本当に新しいことなくてつまらないですね。
2005年11月02日
コメント(0)
NovodeX の Tutorial Lesson 305 のソースを読んでみます。main()エントリポイント。操作方法をコンソールに出力して GLUT および NovodeX の初期化をしてメインループに入ります。InitNx()NovodeX 初期化。適当にシーンを作り歯車を構成する Actor と Joint を複数生成します。CreateBoxGear()歯車の Actor 作成。普通に三角関数使った力技だなぁ。RenderCallback()描画部。いつもと同じ。ということで今日は歯車を作ってみました。ただ結構力技ですしたくさんActor 作ってますのであんまり実践向きではないかも。そもそも同じこと単なるモーションだけで実現できますしさほど物理的に正しく歯車を動かすことにメリットを感じないのですがまあこういった応用もできますよということで。
2005年11月01日
コメント(0)
全30件 (30件中 1-30件目)
1
![]()

