2011-12-24 4 views
1

私はOpenGLに戻ろうとしていますが、私の知識と数学は今や錆びています。私はC++を使用していましたが、現在はC#を好んでいます... OpenTKを試してみてください。どうやらGluはGL 3.1以降で廃止されているので、C#またはC++(私はそれを翻訳することができます)のスクリーン上にキューブを描画するGluレスの例を見つけることを試みています。キューブを描くGlu-lessの例?

私が挑戦している部分は、ビューポート/視野角/カメラ/パースペクティブ/初期化物を設定することです。私はバッファをクリアして3D空間にポイントを置いても大丈夫ですが、他のものは忘れてしまいます!

特に、私はGlu.PerpsectiveGlu.LookAtの交換が必要です。

+3

Matrix4.CreateOrthographic(...);Matrix4.CreatePerspectiveFieldOfView(...);もルックアット方法があります - これは、両方の正射投影と透視投影方法を含み、 GL 3.1以降、必要なのは*シェーダ*です。シェーダベースの世界でOpenGLがどのように動作するかをしっかりと理解しておく必要があります。私はこのページの[OpenGL 3.0 +チュートリアル](http://www.opengl.org/wiki/Getting_started#Tutorials_and_How_To_Guides)のいずれかをお勧めします –

+1

また、[this](http://www.songho.ca/)をお読みください。 opengl/gl_transform.html)。あなたが必要とするすべての行列計算を行うための数式と方法論。 – Lalaland

+0

ああ...どうやら私たちは4.1になりましたか?または4.2?前回私がこれを演奏したとき、私はまだ2歳だったと思う。最新の安定バージョンを使用することもあります。 – mpen

答えて

2

http://openglbook.com/を見ることをお勧めします。これはOpenGL 4ですが、ここで説明したすべて(これまでの基本のみ)はOpenGL 3にもそのまま適用されます。私はこれが最近のOpenGLバージョンですばやく始めるための最良のリソースだと思います。その他の非常に良いリソースはLearning Modern 3D Graphics Programmingです。

OpenGL 3以降では、固定パイプラインは無視されます。互換性プロファイルを使用して固定パイプラインを引き続き使用することはできますが、プログラム可能なパイプラインを知ることがより効果的です。これは、それ以上の即時モード(例えば、glVertex3fなど)と表示リストを意味しません。描画する前に、頂点データをグラフィックスカードに直接提出する必要があります。これは、頂点データの配列だけであるバッファオブジェクトを使用して行われます。次に、モデルビューと投影マトリックスを適用するなど、これらのデータを処理するGLSLプログラムを提出する必要があります(派手なシェーダが必要ない場合でも)。

現在のOpenGLバージョンでは、マトリックス操作とライティング(互換性プロファイルを使用していない限り)は実装されていません。すべての行列を自分で作成する必要がありますが、面倒な作業ですので、外部ライブラリを使用することをお勧めします。

これはすべて、恐ろしくて率直に聞こえるかもしれませんが、プログラマブルパイプラインを覚えるのが固定パイプラインよりも難しいことがわかりました。しかし、それははるかに柔軟性を提供します。 Ch4 of the OpenGL bookから

+0

いくつかの違いを説明してくれてありがとう!私はOpenGL 3の例を見ていただけで、彼らは正確に "VAO"と "Shader Program"という新しい概念を作っていました。 – mpen

+0

OpenGLの本の最初の章を読んだ後、ちょっと懐疑的だった...説明するのはあまり細かいことが必要ではない、本当に些細なもののように思えたが、私は彼らは後の章で詳しく説明する時間がかかったことをうれしく思います。線形代数の良いリフレッシュ! – mpen

0

GLu.Perspectiveは多かれ少なかれ相当である: - Matrix4

98 Matrix CreateProjectionMatrix(
99  float fovy, 
100  float aspect_ratio, 
101  float near_plane, 
102  float far_plane 
103) 
104 { 
105  Matrix out = { { 0 } }; 
106 
107  const float 
108   y_scale = Cotangent(DegreesToRadians(fovy/2)), 
109   x_scale = y_scale/aspect_ratio, 
110   frustum_length = far_plane - near_plane; 
111 
112  out.m[0] = x_scale; 
113  out.m[5] = y_scale; 
114  out.m[10] = -((far_plane + near_plane)/frustum_length); 
115  out.m[11] = -1; 
116  out.m[14] = -((2 * near_plane * far_plane)/frustum_length); 
117 
118  return out; 
119 } 
1

OpenTKすることは、4x4の行列を含む独自の数学のクラス、のしています。あなたはコアを使用しようとしている場合はOpenGLのためのMatrix4.LookAt(...);

OpenTKバインディングがGL.LoadMatrix()GL.UniformMatrix4()ようなメソッドのためMatrix4を受け入れるなど

+0

はい!私はちょうど私の研究中に最近発見しました。ありがとう! Matrix4の近くに置くのはちょっと面白そうだけど...それらの行列はOpenGL以外のアプリケーションでは十分に一般的ではないので、GLクラスから離れているように思える。作業。 – mpen

+0

コアOpenGLは行列関係のすべてを取り除き、ユーザが独自の行列演算を行うことを期待しています。 'OpenTK.Graphics'名前空間の一部ではない理由は、OpenALバインディングのために数学クラスが使用され、今後のOpenCLバインディングで確実に使用されるからです。 –

+0

ああ...彼らはオーディオでアプリケーションを持っています... ...どんなOpenCLが使われていますか?十分に公正な! – mpen

関連する問題