2008-01-01から1年間の記事一覧

ポイントライトとシャドウとマテリアルまで

あと大きさのある光源を実装したらGI的なフェーズに進める。

次のテーマはThe Cornell Box

http://www.graphics.cornell.edu/online/box/ とりあえずマテリアルとエリアライトとシャドウを実装する。

traitsとtag dispatchがわかった

c++

やっとわかった。 これは、ライブラリを使うだけでなくて書いてみないとなかなかわからないな。 以下 p[0]とp.xというインタフェースの違うものを一緒くたに扱うための努力。 #include <iostream> namespace di { // 関数分岐用のタグ struct unknown_tag {}; struct u</iostream>…

効果が出ない

レイの発射部分をtbb経由に置き換えたのだが どうしても速度が出ない。 tbbでマルチスレッドにした方がだいたい2倍から2.5倍遅い。 その間CPU負荷は2つともほぼ100%になるので待ち合わせが 原因ではないように見える。 そこでgoogle performance toolsでプロ…

blocked_range2dで画像を作ってみた

blocked_range2dという2Dのサンプリングにうってつけのものがあるので使い方を調べてみた。 Tutorialによるとシングルコアでもリニアに走査するよりメモリのキャッシュヒット率が上がるのでよいものだというニュアンスのことが書いてあったがそうなのか。 #i…

レイのサンプリング部をtbbのblocked_range2dで換装してみた。

まずは変更が少なくて済むparallel_forでやってみる。 画素毎のループをファンクタに抽出して必要な変数を持たせてやるだけだったのでさくっと作業は完了。 さっそく実行してみる。モデルはスタンフォードのドラゴン。 // 通常バージョン store: dragon_vrip…

Intel tbbを試してみる

今作っているraytraceに以前から注目していたIntelTBBを組み込んでみることにした。 まずは情報収集から。本家からTBBのdevlop版の最新版のソースを入手。解凍してみたところ特にconfigureとかそういうのはなかった。 READEMEの指示にしたがって $ gmake で…

tbb練習

サンプルを見ながら練習開始。 公式のGetting Startedのサンプルはいまいちだなぁ。 正直、何やってるか理解できんw むしろ2つめくらいのサンプルとしてはよいか。 環境作り(gentoo)。 インストーラはあるのかもしれないが見つからなかったのでとりあえず …

UniformedGrid実装

ようやくUniformedGridの実装に成功。 曖昧な理解では書けないことはないのだが デバッグできないのであった。 UniformedGrid実装に考慮されるべき点で気づいたことをメモ。 まず、グリッドのサイズをどうやって決めるか。 今回は長辺を基準に何分割するかを…

std::maxのbindの仕方

手間取ったのでメモ。 普通に書いた方が早いし見やすいのだがこうなったら無理してでも使う。 手段が目的になる典型的なw namespace lmd=boost::lambda; lmd::bind( static_cast<const int&(*)(const int&, const int&)>(&std::max), 1, lmd::_1 );</const>

微速前進

UniformedGridはおいといて球を実装してみた。 さすがに簡単だったが、 TinyJSONのany_castで値コピーとリファレンスを間違えてはまったり のちの拡張用に球の入れ物をboost::variantにしたりとかしたので 少し時間がかかった。 作っているうちに設定ファイ…

Genericは難儀だ

c++

何やらraytraceの下回りのライブラリをGeneric にできそうな気がしたので試行錯誤していたのだが 途中まで作って値が全部コピーで非常に効率悪いのに気付く。 ここで、 pointerの時はコピーで他の型が来たらreference(場合によってはconst reference) にテン…

boostのユニットテストはstaticリンクする

gentooにboost-1.37.0をソースからインストールしたのだがunit testがリンクできない事態に遭遇。 /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/../../../crt1.o: In function `_start': (.text+0x18): undefined reference to `main' collect2: ld returned 1 exi…

Uniformed Grid頓挫中

すぐできるかと思ったが意外と厄介。 まだ、2分割以上するとまともに動かないw

directional lightとlambertシェーディングを実装

カメラ位置を変えるのにも再コンパイルという 状況を鑑みて設定ファイルを導入。 ファイルフォーマットは、先日仕込んでおいたboost::spirit のTinyJSONを活用してJSON形式とした。 こんな感じで。 { "view":{ "eye":[0.0, 0.1, 0.8], "angle":30.0 }, "scen…

ぼちぼちレンダラ作成開始

ここのところ少しずつ準備していたレイトレーサが ようやく動作するところまで来た。 Erlangのレイトレースベンチの時に作ったやっつけのものじゃなくて わりとちゃんとしたものを作ろうとしている。 球のみのシーンから始めても良かったのだが むしろ世間の…

TAB書き出しとTAB読み込みを作ってみた

w3m

開いているタブの書き出し(DUMP_TABS)と それを読み込んで新規タブで開く(RESTORE_TABS)コマンドを作った。 たいした長さでもないがパッチにしておきました。 http://gunload.web.fc2.com/w3m/patch.html 今回のような場合は追記するだけなので、 わざわざパ…

gcc4.3にしてみる

gtk+を~x86で2.14にアップグレードしていたら SSE2 instructions require GCC 4.2 or higher. とか出てpixmanのところでemergeが止まってしまった。 ついでに glibcとgccに~x86をつけてemergeする。 そろそろ、/etc/make.confに~x86を書いた方がいいかもなぁ…

screenの最新版を入れてみた

cui

いつも通りscreenにパッチを当てようとおもってうろうろ していたら本家でambigouswidthパッチを取り込んだみたいであることを発見。https://savannah.gnu.org/bugs/?16666gitで最新版を取得できるみたいなのでやってみた。 $ git clone git://git.savannah.…

urimethodmapを動かすのに一苦労

w3m

メインマシンのWindowsXPが変調を来したのを機に メインをLinuxにしてサブマシンを逆にLinuxからWindowsXPに入れ替えた。 ついでにw3mをメインブラウザにすべく画策する。 1, 2年に一度のWindowsからの脱出作戦であります。 だいたいいつの間にかWindows生活…

TinyJSONを使ってみる

Boost.Spiritを使ったJSONパーサーであるTinyJSON http://blog.beef.de/projects/tinyjson/ を試してみた。 サンプルコードに乏しいのとサイトのUsageにある traverse関数の宣言が間違っていてコンパイルが通らないという問題により 無駄に敷居が上がってい…

最近のはまりポイント

c++

vcで作ってからgccでコンパイルするときにはまった。 その1 関数の実引数が一時変数の時は、仮引数のreferenceはconstでないといけない #include <iostream> #include <string> void func(std::string &text) { std::cout << text << std::endl; } int main(int argc, char **</string></iostream>…

GILの練習

GILの練習に、勉強中のboostをできるだけ濫用したサンプルを作ってみた。 しかし、GILの学習曲線はまるで地を這うようだ。 白い画像を生成してから、 乱数で座標を生成して点を打ちます。 #include <iostream> #include <boost/random.hpp> #include <boost/gil/gil_all.hpp> #include <boost/gil/extension/io/bmp_dynamic_io.hpp> #include <boost/timer.hpp> #include <boost/lexical_cast.hpp> #inc</boost/lexical_cast.hpp></boost/timer.hpp></boost/gil/extension/io/bmp_dynamic_io.hpp></boost/gil/gil_all.hpp></boost/random.hpp></iostream>…

Boost.Pythonをやってみた

http://boost.cppll.jp/BDTJ_1_29/libs/python/doc/tutorial/doc/building_hello_world.html をやってみた。 環境はWindowsXP VC8(ExpressEdtion) boost-1.37.0に添付されているサンプルはそのままでは動かず結構苦労した。 過去のバージョンが放置されてい…

glFrustumの解読

追記: 2010/3/24 書いたときの理解が足りないため意味不明なところがある。 少し書き直した。 http://gunload.web.fc2.com/opengl/tutorial/glfrustum.html glFrustumが何をしているかというと View座標(視点を原点として視線方向がz軸の負の方向を向いてい…

glFrustumとgluPerspective

OpenGLの透視投影の指定はhttp://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml (glFrustum)で行う。 glFrustum(left, right, bottom, top, near, far) もうひとつこれの簡易版としてhttp://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml (gluP…

あらためて行列の動作を確認

たまに使うと細かいことをいろいろ忘れていて難渋するので確認しておくことにした。まず、前提として座標系は右手系。 (DirectXは逆だそうな)行列は列優先(row-major)で左から行列を、右から列ベクトルをかけると考える。 (DirectXは逆だそうな)さらに行列が…

gtkglextmmのコンパイル

gtk

レンダラーを作るに先立って簡単なビューワの作成を開始。 久しぶりにOpenGLであります。 今回、採用するGUIキットはgtkmm。 マイナーで情報が少ないのだが、APIがc++的に気に入ったのでこれでいきたい。 gtkmmでOpenGLを使うgtkglextmmはソースからビルドす…

vcに移植してみた

c++

erlangは一度お休みにして同じものをvc2005 express editionに移植して速度を測ってみた。 時間はcygwinのtimeで計測。 $ time release/cray tmp.bmp 200x200 sizeof(BITMAPFILEHEADER): 14 sizeof(BITMAPINFOHEADER): 40 release/cray 0.01s user 0.01s sys…

分散レイトレースベンチ改その2

一度に送る行数を変えられるようにして実験してみた。 結果は、遺憾ながら1行ずつ送ったときが最速という残念な結果に。 (xp1@192.168.0.10)25> timer:tc(dist_ray, start, ["tmp.bmp", 200, 1, 3, [node(), node(), 'xp2@192.168.0.11', 'osx@192.168.0.12'…