ホーム<ゲームつくろー!<衝突判定編 基礎の基礎編 その5 反射ベクトルと壁ずりベクトル ゲームで良くあるのが壁ずりです。その名の通り壁に当たった時にキャラクタが壁面に沿ってずりずりと動く様を言います。物理的に正しくは無いのですが、プレイヤーに極自然に「端・障害物」を感じさせることができます。 ① 壁ずりベクトルの求め方 壁ずりでポイントなのは壁ずりする方向(壁ずりベクトル)です。壁に当たった時に強制的に移動させられる方向です: 上の赤いベクトルで表した壁ずりベクトルは壁に対して平行になっています。このベクトルを算出するには「当たった場所の法線」が必要です。 平らな壁の場合、法線ベクトルは多分既知でしょう。壁でなくとも衝突図形であれば、大体衝突点さえわかればその点での法線は求められます。 衝突点での法線ベクトル、壁への進行ベクトルがあれば壁ずりベクトルを計算できます。以下の図を御覧ください
<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAgAElEQVR4Xry9B5idV3Wvv496l6b3mTMzmlGZkWY00siS1UbVtiRbrpJs2bIs29iWjbFDMUbGFsWATTMlgKimmZjQEgLEJAFDKAmEUBISckkxCfcmhJQbSG/n/757n2/OOVOkGfJ/7n6erTOjOd/+vm+XtX7rt9ZeOxdCKFBHSy4XQueyENqXhtC6JISWJdWhbUldyC9rCD3VzaG3oTWEjs4QBrtCWPNPXHd18JqsnBgM4fjA3rCz74IQ1vaFsLExhKq/4c+PUb9MvYX6zuI1z+fnNdTjobsqhD/5+1fz82rq26m/VP5Y5/158dwQzox0
今日は、GLSLによるカートゥーンを紹介しようと思います。割と簡単にでき、それなりに見栄えがするからです。その応用として、輪郭線も描画します。 カートゥーンの原理 カートゥーンはセルアニメ調のレンダリングです。左下の図に示すように、頂点vにおいて、法線と光源ベクトル(頂点から光源へのベクトル)との内積(照度)を、右下の図のようなテクスチャのs座標に当てはめることで簡単に実現できます。 更に、次の図の左のように、視線ベクトルと法線の内積を考えると、輪郭となる部分はほぼ0になります。そのため、その内積をt座標に割り当てることで、輪郭線を実現できます。 s座標もt座標も単位ベクトル同士の内積で計算できますが、その範囲は-1~1になるため、テクスチャマッピング(glTexParameterによる指定)をクランプに設定する必要があります。 バーテックスシェーダ(頂点シェーダ) 今回は、頂点シェーダで
ホーム < ゲームつくろー! < DirectX技術編 < 知っていると便利?ワールド変換行列から情報を抜き出そう その39 知っていると便利?ワールド変換行列から情報を抜き出そう 今回はちょっと息抜きです。ワールド変換行列(座標変換行列)は3Dゲームで多分一番よく使う行列だと思います。この行列は回転、スケール、オフセットの3要素から作成します。では、すでに作成されたワールド変換行列からそれらの要素は抜き出す事ができるのでしょうか?またワールド変換行列には具体的にどのような情報が詰め込まれているのでしょうか?この章では、そのようなワールド変換行列から抜き出す事ができる情報について整理してみます。 ① ワールド変換行列の作り方 今更なのですが、ワールド変換行列の基本についてまとめておきます。ワールド変換行列は回転、スケール、オフセットの3要素を表す行列の掛け算で作成するのが一般的です。各行列
【リンク】 ◆解説系TOP◆ 今日は、2次元と3次元の座標の相互変換についてのお話です。 ※別の次元(2←―→3)へ座標を変換する方法を紹介します。 別に、自分がアニメの世界に入り込んだり、アニメのキャラクターが現実の世界に出てくる、 という様な意味ではありませぬ。 では、まずコレをご覧下さい。 【参考画像】 メタセコイアです。 メタセコイアでは、普通にカーソルでモデルの表面を選択する事が出来るんですが、 (写ってないですが、黄色くなっている部分がカーソルで指されています) よく考えたら、謎ですね。 x軸とy軸しかないウィンドウ(2次元の世界)から、 x、y、z軸の3次元の世界を選択できています。 一体どうやっているのか? 今日は、この謎の部分を解説します。 (まぁ、先に結論を言ってしまうと、行列で2次元と3次元の座標を変換してます。) では、下記の様な順で書いていこうかな、と。 ----
ホーム < ゲームつくろー! < DirectX技術編 < アニメーションの根っこ:スキンメッシュアニメーション(ボーン操作) その27 アニメーションの根っこ:スキンメッシュアニメーション(ボーン操作) RPGで主人公が走り、飛び、勝利のポーズを決める。かっこいいですよねぇ~。そういう軟質系の動きは「スキンメッシュアニメーション」と呼ばれています。これをDirect3Dで実現するために、その23あたりから地道な下積みをしてきています。この章では、いよいよアニメーションの根本をなす「ボーン操作」について説明します。この章、はっきり言って試行錯誤と調査と努力の結晶です(T_T) ① ボーン登場! ○×にもちらちらと出てくる「ボーン(骨)」。スキンメッシュアニメーションの中核をなす重要な概念でして、ようやくここで堂々の登場となります。ボーンとはスキンメッシュに埋め込まれた骨のことで、この骨をぐ
入力 E (eye):カメラ (視点) 位置 (カメラ座標系の原点でなくてもよい.) C (center):注視点 up:カメラの上方向を指定するベクトル カメラに対して前後に傾いていてもよいが,視線と平行であってはならない. OpenGL や DirectX のソースコードで up ベクトルをワールド座標系の真上方向 (0, 1, 0) に固定しているものをたまに見かけるが, これだとカメラを真上や真下に向けたときに何も見えなくなってしまう. (up と f が平行になるので,ビュー変換行列が定義できない.) OE (origin of eye):カメラ座標系の原点 P:任意の点 出力 カメラ座標系の正規直交基底 f (forward):カメラ前方向 (視線方向) の単位ベクトル u (up):カメラ真上方向の単位ベクトル r (right):カメラ右方向の単位ベクトル その他 (中間結
ホーム < ゲームつくろー! < DirectX9技術編 DirectX9技術編 Direct Graphics その1 初期化なんて怖くないぜ! 2013. 1. 11 改正 サンプルプログラム その2 座標変換済み頂点で2D板ポリゴンを描画 2006. 5. 15 加筆改正 サンプルプログラム その3 テクスチャ作成あれこれ 2005. 12. 3 改正 サンプルプログラム その4 もう悩まないテクスチャブレンディング 2005. 12. 3 改正 その5 高速フォント表示 2006. 5. 12 加筆改正 サンプルプログラム その6 板ポリゴンに写る3Dオブジェクト 2005. 12. 3 改正 その7 3Dオブジェクト描画のおさらい 2006. 7. 11 加筆改正 サンプルプログラム その8 キーフレームアニメーションで動きを制御 2005. 12. 3 改正 その9 Xファイル
建築をはじめ、様々な分野での活用が期待されています。 まるで映画の世界のように、パソコンで描いた3Dオブジェクトをあたかも本当に存在するかのように扱うことの出来る技術がマサチューセッツ工科大学の科学者によって開発されました。透明なLEDディスプレイに「眼と手の動きを追いかける」マルチプル・カメラを組み合わせることで、利用者は3Dグラフィックに「触れる」ことができるようになります。 デモ動画を見てみると、ディスプレイの後ろに映しだされたアイコンやタブをタッチして操作する様子が記録されています。3Dオブジェクトをタッチパネルのように扱うことで、作業時間の大幅な短縮やより詳細な描写・設計が可能になるそうです。 タブレット端末の登場でここ数年タッチパネルが流行していますが、この技術が進歩すれば「タッチ」という行為の可能性がさらに大きく広がっていくかもしれません。 [JINHA LEE via Ga
左下原点のテクスチャ座標を用いたサンプル テクスチャ座標やウィンドウ座標をOpenGL系に統一したため、確認も含め、次のようなテクスチャを正方形に貼り付ける簡単なプログラムを作成しました。 まず、bmpファイルの読み込みです。実はbmpファイルも左下から順に格納されています。そのため、loadbmp.cのloadBMP関数内で、次のように格納されている順に読み込みます。もちろん、futil.hでの#defineマクロでOPENGL_IMAGE_COORDINATEは(1)に定義されています。 : : 途中略 : : switch(bpp) { case 8: /* 8 bits/pixel */ /* カラーマップ読み込み */ fseek(fp,54,SEEK_SET); fread(&palette[0], sizeof(RGBQuad), 256, fp); #if OPENGL_I
3Dプログラミングの基礎知識(1) はじめに 主にiPhone/AndroidからOpenGL ESを使って3D表現を行う場合に必要となる基礎知識についてまとめていきたいと思います。 基礎の基礎から説明して行くため、言語や3Dライブラリ(DirectX/OpenGL)に依存しない情報が多くなります。OpenGLに限らず「C++ + DirectX」などの環境で開発を行う人もどうぞ。 内容 5回ぐらいに分けて以下のような内容を書いていきたいと思います。 モデルを構成する頂点情報、面情報 画面に描画されるまでの流れ、平行移動・回転・拡縮行列(ワールド変換) カメラ、Zバッファ 法線、ライティング 頂点シェーダ、ピクセルシェーダ(フラグメントシェーダ) 座標系 3D表現を行う為には3次元の座標系をどのように定義するか決める必要があります。 2Dの場合はX軸、Y軸で座標系を表しますが、3Dの場
ホーム < ゲームつくろー! < DirectX技術編 < クォータニオンを学んでみよう! その10 クォータニオンを学んでみよう! ① What is Quaternion ? クォータニオン(Quaternion)とは日本語で「4元数」と訳します(アルク:http://www.alc.co.jp/)。数字が4つ集まったもので、言ってみれば4次元ベクトルです。3次元ベクトルであれば縦横高さで何となく想像ができますが、4次元となるともうドラえもんしかわかりません(笑)。この原稿を書いている私も、実は何のことやらさっぱり。そこで、私と同じような境遇にいる皆さんにも理解できるように、このクォータニオンを1から学んでみようと思います。 クォータニオンについてマイクロソフトのHPに一通りの説明がありました(http://www.microsoft.com/japan/msdn/academic/A
3Dのオブジェクトを画面に描画するための幾何学的な計算を考えてみましょう。 まず(全ての)基準となる座標系を定めます。これをワールド座標とかグローバル(大域)座標とか 絶対座標とか呼ぶようです。うちではワールド座標と呼ぶことにします。 次にオブジェクトに回転平行移動などを施してワールド座標でのオブジェクトの位置・方向を決定します。 見かたを変えてオブジェクトがオブジェクトに固有の座標系(これをローカル座標と呼びます)を基準として 作られていると考えると、オブジェクトのワールド座標から見た位置・方向というのは ローカル座標のワールド座標から見た位置・方向であり、ワールド座標でのオブジェクトの 位置・方向を決定するというのはローカル座標からワールド座標への変換ということになります。 …わかりづれ〜な。まぁやってることはどっちも同じです。こいつをワールド変換と呼びましょう。 さ
解説 ここからが3Dの本番となります。 今回は3Dの中で一番基本であり、数ええられないくらいの 3D 初心者を消してきた「座標変換」について説明します。 今までの中で間違いなく強敵で、数学もどんどん出てきます。 それでも 3D ゲームを作るに当たってこの行列変換は必ず必要になってきます。 気合を入れましょう。 ↑ 座標変換って何? そもそも座標変換とは何なのでしょうか? 座標については知ってますよね。 変換といえば、文字を変えていくあの変換ですよね。 座標変換とは文字通り「座標を変えていきます。」 3Dの座標変換は数式で演算することもできますが、通常は行列を用いて変換していきます。 さて、ここでプリミティブのことを思い出してください。 ポリゴンを形成するプリミティブは全て頂点から形成されています。 ということは頂点を操作すれば図形が変わるということです。 そこで、この性質を用いてこの頂点に
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く