2011-07-11 40 views
1

私は、高調波を描くためにglDrawArrays(GL_POINTS、...)を使用します。 頂点に基づいてレンダリングしている間に、サーフェス(三角形?)がOpenGLによって生成される順序を知りたいですか? このようにしてサーフェス領域を計算しますか? 私はそれを行うことができますか?表面積計算


私は (私は次高調波を発生させる)。私は値の2D配列を持っており、それにUVマッピングを行うより良い

それを説明しようとすると、表面がglDrawArraysを使用して受け入れられて描画します。 私は可視化する表面積を計算したいと思います。 ポイントを描画するのに適した という三角形のグリッドを作成することで、このような計算を簡単にするために問題を「翻訳」する必要があると思います。これで計算が簡単になります。

+0

あなたは、OpenGLレンダリングを使用して(数である)表面の面積を計算したいですか?どのようにしたいですか? – mouser

+0

これは再投稿です – Ulterior

答えて

2

私は高調波を描画するためにglDrawArrays(GL_POINTS、...)を使用します。

ポイントには表面がありません。

頂点に基づいてレンダリングしながらサーフェス領域を計算する際に、サーフェス(三角形?)がOpenGLによって生成される順序を知りたいですか?私はそれを行うことができますか?

OpenGLはtraianglesを生成しません。送信する三角形をラスタライズします。あなたが指定したのと同じ順序で。 glDrawArrays(mode, first, count)正確

myDrawArrays(GLenum mode, GLuint first, GLuint count) 
{ 
    GLuint *indices = malloc(count * sizeof(GLuint)); 
    /* just assume malloc never fails, OpenGL doesn't have to alloc here, of course) */ 
    for(int i=0; i<count; i++) 
     indices[i] = first + i; 
    glDrawElements(mode, count, GL_UNSIGNED_INT, indices); 
    free(indices); 
} 

のようなプリミティブは、彼らが指定されている順序でラスタライズされ動作します。

表面積を知りたいが、描画点です。すでに述べたように、ポイント(数学的に)には表面はありません。しかし、それらは少なくとも1つの(サブ)ピクセルをカバーする。実際にのピクセルカバレッジを知りたいと思うかもしれませんか?

OpenGLには、「オクルージョンクエリ」と呼ばれるメソッドがあります。このメソッドは、返すもの、クエリ内のプリミティブを描画することで何ピクセル(画面/フレームバッファ)のピクセルが表示されたかを示します。

http://www.opengl.org/registry/specs/ARB/occlusion_query.txt

+0

私の質問を編集しましたありがとうございました – Yakov

+0

@ヤコフ:私はまだあなたがしたいことを明確に理解していませんか?あなたはグリッドのような歪みやそのようなものとして波を使用しますか?とにかく:OpenGLは描画のものだけを扱います。それはある種のジオメトリライブラリではなく、そこにお手伝いできません。あなたの問題は実際には微分幾何学に根ざしているので、問題を解決するため微分法の方法を適用したいと思います。具体的には、サンプリング関数を微分して、拡散面要素を積分する必要があります。 http://www.usna。edu /ユーザー/ math/wdj/teach/sm221_surface_area1.html – datenwolf

1

ジオメトリシェーディングステージには描画されたポリゴンに関する情報が含まれているため、そこからサーフェスの量を計算できます。その合計を得るには、1x1のR_32Fフレームバッファオブジェクトに加算ブレンドでレンダリングしてから、その値をシステムメモリに読み込みます。

関連する問題