椿の日記

たぶんプログラムの話をします

2011-05-07から1日間の記事一覧

boost::variantでデータ構造を書き換え

boost::variantを利用してシェイプクラスを抽象的にします。 typedef boost::variant<Sphere,Plane> Shape; enum SHAPE_TYPE { SHAPE_TYPE_SPHERE, SHAPE_TYPE_PLANE, }; struct Scene { std::vector<Shape> shapes; std::vector<Vector3> directionalLights; }; 関数型言語に慣れ始めると</vector3></shape></sphere,plane>…

影を追加する

シャドウバッファとかの元になってるやつ。流石にCPUの手抜き実装だとらくちんですね… /* レイと球の交差位置取得。 */ bool Test_Ray_Sphere( const Vector3& p0, const Vector3& v, const Sphere& s, float* out_t ) { Vector3 m = p0 - s.p; // tについて…

複数のオブジェクトの表示

複数のオブジェクトを表示するので、Sceneオブジェクトを作って、最近傍衝突点を返す関数を作る。 struct Scene { std::vector<Sphere> spheres; std::vector<Plane> planes; std::vector<Vector3> directionalLights; }; struct Contact { Vector3 p; Vector3 n; float t; }; Scene </vector3></plane></sphere>…

ディフューズシェーディング

そして何の変哲も無いディフューズシェーディング。 /* レイと球の交差位置取得。 */ bool Test_Ray_Sphere( const Vector3& p0, const Vector3& v, const Sphere& s, float* out_t ) { Vector3 m = p0 - s.p; // tについての二次方程式(at^2 + 2bt + c = 0)…

とりあえずレイトレース

http://d.hatena.ne.jp/mokehehe/20090716/raytracer こちらの記事を参考にしながら、レイトレースの実験を開始しました。記事に習って、レイが正しく飛ばせているかどうかの実験からです…。そういえば、初めてDirect2D使った。意外に便利かも。ウィンドウ作…

QGK

急にグローバルイルミネーションに興味が出てきたので、の略。 というわけでフォトンマッピングをやってみたいのですが、まず根本的によく分かってないわけです。 オーム社のフォトンマッピングの本を買ってはみたものの、なんか知らん方程式出てきた、放射…