「OpenGLプログラミング/Depth of Field」の版間の差分
削除された内容 追加された内容
タグ: 取り消し |
Semi-Brace (トーク | 投稿記録) M 節名翻訳、非推奨のsource、見出しレベル |
||
4 行
[[File:OpenGL Tutorial Glescraft-dof-back.png|thumb|Depth-of-field, focus at infinity.]]
== はじめに ==
実生活では、レンズを使うカメラは、原理的に、見ているすべてのもの一度に焦点を合わせることはできません。
16 行
レンズ [[w:Diaphragm (optics)|diaphragm]]によって形成される開口部の形状は、オブジェクトが焦点から外れたときのぼやけ方に影響を与えます。 これは [[w:Bokeh|bokeh]]と呼ばれています。
== バッファを使用してDepth of fieldをシミュレートする ==
次のコードを使用して model-view-projection 行列を設定するところから始め、その後フレームをレンダリングしていこうと思います:
<
glm::mat4 modelview = glm::lookAt(eye, object, up);
glm::mat4 projection = glm::perspective(...);
27 行
draw_scene();
glSwapBuffers();
</syntaxhighlight>
ここで <code>eye</code>は目やカメラの位置を含むベクトルで、 <code>object</code>は私たちが中心とフォーカスにしたいオブジェクトの位置で、 <code>up</code>はどの方向が上かを記述するベクトルです。
39 行
残りは私たちのセンターのオブジェクトとの相対的な深さによってぼかされます。
<
int n = 10; // number of light rays
float aperture = 0.05;
58 行
glAccum(GL_RETURN, 1);
glSwapBuffers();
</syntaxhighlight>
= エクササイズ =▼
▲== エクササイズ ==
* 前のいずれかの <code>glm::lookAt()</code>を使用するチュートリアルに、この手法を適用してみましょう。
* <code>n</code> と <code>aperture</code>の値を変更してみましょう。
|