「OpenGLプログラミング/Depth of Field」の版間の差分

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

回編集