BVH-Median

BVH-Medianは三角面AABBの中心(重心)について、xについてソートし真ん中で分割→yについてソート(ry→zにつ(ryって構築する。実装次第で各要素について一度のソートで空間分割できるとおもうが…
あと、木構造だけど、ノード毎にメモリ動的確保はしない方がいいと思う。
iPhoneしかネットが使えないので図が書きにくい。

空間構造覚え書き

BVH-medianだとシーンの中央付近にAABBが多く重なってる部分があって交差判定が遅くなる部分がある気がする。
BVH-SHAなんてものがあるらしいが、あとで調べる。あとSIMDを使うQBVHも。
Oqtreeは子ノードのAABBにすっぽり入る分だけ面を子ノードに格納してあとは親ノードに格納する方法と、面がAABBと交差する全てのノードに格納する方法があるけど、前者は実装して見たけど余り速くならなかったし、後者はAABBと面の交差判定が面倒。一様グリッドを実装するにもAABBと面の交差判定は必要なので、あとで調べる。
あと、複数のノードに同じ面が格納されるような空間構造で同じ面と同じレイの交差判定が何度もされない様にメイルボックス法ってのがあるらしい。名前からだいたい想像はつくがあとで調べる。

あとで調べるばっかりだ。

レイトレ

C++でレイトレを書いたのでティーポットをレンダリングした.
f:id:YarmUI:20100619050602p:image
約3000ポリゴンを解像度800*400,ディフューズ面のみでレンダリング
空間トラバースしてないのでだいたい3時間かかった.

method_missing

railsのARとかでこんな感じのコードを開くことがある.

class Entry < ActiveRecord::Base
end

entry = Entry.new
entry.name = "name"
entry.bio = "bio"
entry.save

ここで疑問なのがnameとbioメソッド.どこで定義されているか検討もつかない.調べた結果.Objectのmethod_missingというのを使っているらしい.
class Object
ということで実験.こんな感じのクラスを書く.

class Test
  def method_missing(name, *args)
    puts "#{name},#{args}"
  end
end

irbから実行

t = Test.new
t.hoge(12) #name=>hoge,args=>[12]
t.huga #name=>hoge,args=>[]
t.foo("str1", "str2") #name=>foo,args=>["str1", "str2"]

(問題点あり)Chromeでgoogle web履歴を使う方法

まずはPageRankのアドオンをインストール.
エラー - Chrome ウェブストア

次にgoogle web履歴を有効にする.Google アカウント
WEB履歴を有効にするとPageRankAPIを呼び出したらWEB履歴に保存してるようです.
現状,拡張機能APIを呼び出すとき'http://'を省略してるようなので保存されてる履歴がおかしくなっていて,全文検索ができません.

requireとload

irbで変更したプログラムをrequireしなおすのに毎度irbを再起動するのが面倒なので調べたら"load"というぴったりなのがあった.
module Kernel

[require と load の違いについて]

require は同じファイルは一度だけしかロードしませんが、 load は無条件にロードします。また、require は拡張子 .rb や .so を自動的に補完しますが、load は行いません。 require はライブラリのロード、load は設定ファイルの 読み込みなどに使うのが典型的な用途です。

確かめたところ,2回目以降の"load"で反映されるのは新規の部分と変更された部分だけで,削除された部分は反映されないようだ.