1

私は OpenGL に戻ろうとしていますが、私の知識と数学は今ではさび付いています。以前は C++ を使用していましたが、今は C# の方が好きです... OpenTK を試しています。どうやら Glu は GL 3.1 から廃止されたようです。そのため、C# または C++ で画面上に立方体を描画する Glu を使用しない例を見つけようとしています (翻訳できます)。

私がやりがいを感じている部分は、ビューポート/視野角/カメラ/視点/初期化のものを設定することです. バッファをクリアして 3D 空間にポイントを配置することは問題ありませんが、その他のことは忘れてしまいます。

Glu.Perpsective特に、との置換が必要ですGlu.LookAt

4

3 に答える 3

2

http://openglbook.com/をご覧になることをお勧めします。これは OpenGL 4 であると書かれていますが、ここで説明するすべて (これまでの基本のみ) は OpenGL 3 にも直接適用されます。これは、最近の OpenGL バージョンをすぐに使い始めるのに最適なリソースだと思います。他の非常に優れたリソースはLearning Modern 3D Graphics Programmingで、もう少し詳しく説明されています。

OpenGL 3 以降では固定パイプラインが無視されることに注意してください。互換性プロファイルを使用して固定パイプラインを引き続き使用できますが、プログラム可能なパイプラインを学習することをお勧めします。つまり、即時モード (glVertex3fなど) と表示リストはもうありません。描画する前に、頂点データをグラフィックス カードに直接送信する必要があります。これは、頂点データの配列に過ぎないバッファ オブジェクトを使用して行われます。次に、モデルビューや射影行列の適用など、これらのデータを処理する GLSL プログラムを提出する必要があります (派手なシェーダーが必要ない場合でも)。

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

これはすべて恐ろしく聞こえるかもしれませんが、率直に言って、固定パイプラインよりもプログラム可能なパイプラインを学ぶ方が難しいことがわかりました。ただし、柔軟性が大幅に向上します。

于 2011-12-24T10:02:29.807 に答える
1

OpenTK には、4x4 マトリックスを含む独自の数学クラスがありMatrix4ます。正射投影と透視投影の両方の方法が含まれています。また、lookAt メソッドもありますMatrix4.CreateOrthographic(...);Matrix4.CreatePerspectiveFieldOfView(...);Matrix4.LookAt(...);

OpenGL の OpenTK バインディングはGL.LoadMatrix()GL.UniformMatrix4()、 などのメソッドで Matrix4 を受け入れます。

于 2011-12-30T07:51:40.423 に答える
0

OpenGL book の Ch4から、GLu.Perspective以下とほぼ同等です。

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 }
于 2011-12-28T03:55:42.177 に答える