2012-01-09 13 views
9

私はMac OS XでOpenGL 3.2コアコンテキストを設定しています。画面上に濃い黒色の好きなものを描きたいと思っています。 OpenGLの以前のバージョンでは、私はちょうど設定することができましたOpenGL 3.2コアプロファイルglLineWidth

glLineWidth(10.0f); 

と私は10ピクセル幅を取得します。私は3.2のコア

GLint range[2]; 
glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, range); 
glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE, range); 

で線幅の範囲をチェックするときしかし、私はエイリアスラインと滑らかなラインのための0-1のための1の値を取得します。スクリーン・スペースで10.0ピクセル幅のラインを作るにはどうすればいいですか?各線分を矩形にする以外に簡単な方法がありますか?

答えて

7

(それを証明するためにglGetErrorを呼び出す)INVALID_VALUEエラーを与える1.0より大きい値でglLineWidthを呼び出し、OpenGLの3.2コアプロファイルを使用します。

確かに、線を描くために必要なクワッドを決定することによって、望ましい結果を得ることができます。

私はあなたがラインポイントからクワッドを生成できるはずだと思います:ねえ、大きなラインはクワッドです!たぶんthisのようなtechinquesを使用して、望む結果を得ることができます。

キーは次のとおりです:LineWidthに頼るのではなく、単位クワッドを入力(三角形ストリップを使って4つの頂点)し、シェーダー内の入っている頂点を適切なユニフォームに変換します。

もう1つのアプローチは、ジオメトリシェーダを使用してレンダリングすることです。ポイントからクワッドを生成することです。しかし、私はこの点については分かりません。ジオメトリシェーダ(可能な場合のみ)が最良のアプローチであるかどうかはわかりません。単一のクワッドを使用してラインストリップを描画するコストは、ストリップを構成する各ラインのシェーダ一式セットアップになります。

+0

これは、最初のジオメトリまたはジオメトリシェーダを介して2つの完全なジオメトリエーテルを描画することが、これを行うための最善の方法です。 – user1139069

1

これは、設定した投影の種類によって異なる場合があります。正投影または透視投影行列を使用していますか?

正投影を使用していない場合、プリミティブの最終的なラスタライズは、カメラ(ビューマトリックス)からオブジェクト(モデルマトリックス)までの距離に左右されます。

乾杯

+0

私は正射投影を使用しています。 – user1139069

関連する問題