3D
以前、僕のPCでベンチマークをとった時はglDrawArryasが勝利しました。なので、glDrawArraysを使えるようなデータ構造にしたのですが、最近になってglDrawElementsの方が速いということを知りました。資料は古いですが、ビデオカード作ってる nVidia の人が…
仕事が忙しいですが、この状態があと数ヶ月続くので、そうなると完全に仕事一色の生活になってしまいます。これじゃいかん! 幸い、久しぶりに家にあるPCでWeb閲覧以外のこと、プログラミングがしたくなっていたので、dotXSIファイルのビューアを作ることに…
今日は影をやりたかったのですが、オブジェクトの表示だけで終わってしまいました。 SDKのサンプルにあるroom.xの中に、ヘリコプター、車を表示させたかっただけなのですが、その表示にだいぶ苦労しました。頂点シェーダで拡散反射光を計算するために、ワー…
今日はバンプマッピングのところだけやりました。 今日も自由に時間が使える……かと思いきや、上司との面談があったりやることがあったりで、昨日ほど時間は取れませんでした。なので、できたのはバンプマッピングだけ。本に書いてある通りにやったので動くも…
昨日買ったシェーダ本を読んでいます。 今日も適当に時間を潰していてよさげなので、昨日買った本を読みながらプログラマブルシェーダについての理解を深めてみました。「理解を深めた」なんて書くとちょっと賢そうですが、実際は本を読みながら、「ふーん」…
シェーダに初めて触れました。 配属されたものの、まだ特に仕事を与えられていません。とりあえずPCをいじってみたらDirectXのSDKがインストールされていたので、サンプルを適当に見てみました。Tutorialを一通りいじってからOpenGLに逃げた人間なので、一応…
一辺の大きさがsizeの平面を描くコードです。デバッグ用に作ったのですが、普段は使うことが無いので削除したのですが、「もしかしたらいつか使うかも…」と思ったのでここにおいておきます。 void DrawPlane( const Plane &plane, int drawMode, float size …
マウスのカーソルが指しているポリゴンを選択する処理が必要になったため、ネットで調べてみました。 基本的な流れは、セレクションモードに入り、選択領域をセット。名前つきでポリゴンを描画し、セレクションモードから抜けてセレクションバッファに書き込…
個人的にはゲームで使うならあまり厳密な衝突検出は必要ないと思っています。それなのに衝突検出を勉強しはじめたのは、物理シミュレーションをしてみたいと思ったのがきっかけでした。最近はそれを忘れて、ただいかに実装するかを勉強していたわけですが、…
友人から電話がかかってきて、「Marching Cubes Algorithmの実装をしたんだけど、遅くて使い物にならない。なにか解決方法はないか」と聞かれました。「いや、使ったことないから無理」と即断ったのですが、興味があったのでどんなアルゴリズムなのか聞いて…
後でやろう後でやろうと思いつつ、早4ヶ月。「このままでは見た目が悪すぎる!」ということで、スムージング角度を反映させた法線を作るようにしました。特に下のブロックのように角ばった図だと明らかに見た目が変わります。青い線が面法線で、赤い線が頂点…
DOPのrealignmentにはDOPの頂点が必要なのですが、描画の時に使った方法(全ての3平面の交点を列挙し、その中から頂点を求める)ではどうにも効率が悪すぎます。そこで、おとなしくqhull(qhalf)を使うことにしました。 ちなみに、DOPのように平面で構成された…
k-DOPにはたくさん種類があるようです。前回までで描画ができるようになったので、調子にのって26-DOPまで描画してみました。(以下、画像と各DOPの説明です) 6-DOP 6-DOPはAABBと同じです。つまり、X軸、Y軸、Z軸を法線とする面で物体を囲みます。 軸は、(1,…
前回に引き続きDOPの描画です。多少の変更はあったものの、前回考えていた通り、「DOPを構成する平面の交点を列挙し、その凸包を作る」という方法で無事に描画することができました。ただし、凸包で思いのほか苦労してしまいました。Qhullというライブラリを…
相変わらずReal-Time Collision Detection (The Morgan Kaufmann Series In Inteacive 3-D Technolagy)を読み進めています。k-DOPの実装をしていたのですが、そこで問題にぶち当たりました。k-DOPの生成や衝突テストはものすごくシンプルです。AABBのように…
今までは面法線をそのまま頂点法線としていたため、SmoothシェーディングでもFlatシェーディングとなんら変わりのない表示がされていました。面倒くさいのでまあいっかーと放置していたのですが、ふと思い立ったので頂点法線をそれっぽく求めてみました。 左…
Collision Detectionに挑戦中です。「REAL-TIME COLLISION DETECTION」という本を読みながら進めているのですが、英語も数学も苦手なためいっこうに進む気配がありません。いろいろとめんどうなところはとばしながら、AABB、Sphere、OBBと作ってようやく感覚…
SVertexをばらして使うか、それともこのまま使うか。現在、SVertexはこのようになっています。 struct SVertex { Vector3d position; // 位置 Vector3d normal; // 法線 Vector2d tex_uv; // テクスチャの座標 unsigned int color; // 色 };コーディングする…
早速CMeshを変更してみました。まだ途中なので、頂点はまだ構造体を使っています。 class CMesh { vector<SMaterial*> m_materials; vector<SVertex> m_verts; vector< vector<SPolygon> > m_faces; }ちょこちょこっと書き換えるだけなので、メッシュのロードと描画はうまくいきました。です</spolygon></svertex></smaterial*>…
頂点に構造体を使うかどうかはともかく、CMeshからstd::vectorを排除することには成功しました。
自作クラスでOpenGLを使って3Dの描画を行っています。CMeshクラスでメッシュの管理を行っているのですが、ちょっと使いにくくて困ってました。
「3D」カテゴリでは、3D技術に関することを書いていきます。主にプログラミング、特に、興味を持っているゲームで使いそうな3Dプログラミングについてを書いていく予定です。