1. 序文:
Delphi で線を描画する方法は、基本的に点を描画する方法と同じです。違いは glBegin() のパラメータにあります。描画フレームワーク コードは、Delphi での OpenGL2d 描画初期化のコードを参照できます。アドレスは //www.VeVB.COm/article/52141.htm です。変更部分はDraw関数の内容です。
2. 線画の手順:
GL_LINES: 各頂点を独立した線分として扱い、頂点 2n-1 と 2n の間に合計 n 個の線分が定義され、合計 N/2 個の線分が描画されます。
GL_LINE_STRIP: 最初の頂点から最後の頂点まで順番に接続された一連の線分を描画します。n 番目の頂点と n+1 個の頂点によって、合計 n-1 個の線分が描画されます。
GL_LINE_LOOP: 最初の頂点から最後の頂点まで順番に接続された一連の線分を描画し、その後、最後の頂点が最初の頂点に接続され、n 番目の頂点と n+1 番目の頂点で線分 n が定義され、合計 n 本の線分が定義されます。セグメントが描画されます。
次の関数を使用して線を描画できます。
glLineWidth() は線の幅を設定します
glShadeModel() はカラー遷移モードを設定します
glColor3f() は線の色を設定します
プロシージャ TForm1.Draw;始める
// バッファをクリアする
glClear(GL_COLOR_BUFFER_BIT または GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//線幅を設定する
glLineWidth(5);
// 2 点間のグラデーションカラー
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // 線を描画します
// 開始線の色を設定します
glColor3f(1, 0, 0);
// 開始点を描画します
glVertex2f(50, 50);
//終点の線の色を設定します
glColor3f(0, 0, 1);
//ペイントの終了点
glVertex2f(200, 200);
glEnd;
// 2 点間の同じ色
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glEnd;
// ----------- GL_LINE_LOOP -----------
// 3 つの点がループを閉じて三角形を形成する glShadeModel(GL_SMOOTH);
glLineWidth(1);
glBegin(GL_LINE_LOOP);
glColor3f(0, 0, 1);
glVertex2f(250, 50);
glVertex2f(250, 200);
glVertex2f(280, 150);
glEnd;
// ----------- GL_LINE_STRIP -----------
// マルチポイント ポリライン glShadeModel(GL_SMOOTH);
glLineWidth(1);
glBegin(GL_LINE_STRIP);
glColor3f(1, 0, 255);
glVertex2f(350, 50);
glVertex2f(400, 200);
glVertex2f(480, 150);
glVertex2f(490, 60);
glEnd;
SwapBuffers(FDC); // ダブル バッファの内容を交換し、画面に描画されたばかりのグラフィックスをコピーします。
終わり;
最初の X ラインの色のグラデーションがデフォルトでこのスタイルになっていることがわかります。 OpenGL は、この異なる色の状況を処理する方法を決定する関数 glShadeModel を提供します。
glShadeModel(GL_SMOOTH); // opengl のデフォルトの処理方法でもあるスムーズ モードは、カラー グラデーションの効果を実現します。 glShadeModel(GL_FLAT); // 線分の色は特定の色に基づきます。頂点。特定の実装によって決定されます。不確実性を避けるために、ポリゴン全体で同じ色を使用するようにしてください。
テストの結果、GL_LINE_LOOP および GL_LINE_STRIP スタイルではグラデーション効果が無効であることが判明しました。具体的な理由はさらに解明する必要がある。
さらに、OpenGL はアンチエイリアシング機能を提供します。
glEnable(GL_LINE_SMOOTH); //glHint(GL_LINE_SMOOTH,GL_NICEST); //閉じる
使ってみたところ、アンチエイリアシング効果はあまり感じられませんでした。それはさらに研究される必要があります。
完全なコードをダウンロードするにはここをクリックしてください