2

マルチサンプル テクスチャを使用したい。

フラグメント シェーダーとは何ですか? また、複数のサンプラーをシェーダーに渡す方法は?

また、テクセル データの読み込みに使用できる API はどれですか。

これにはデフォルトの FBO を使用したいと考えています。

4

1 に答える 1

5

あなたのトピックはまだかなり広く、ここで深い答えを出すのは難しいでしょう。実際、あなたはここで関連文献を読むべき3つのそれほど些細な質問をしませんが、あなたにとって最良のことはここから始めておそらく習得することですこの本も。私の答えは、あなたが最新の(プログラム可能な)OpenGLを使用していることを前提としています:

マルチサンプルテクスチャを使用したい。

デフォルトのフレームバッファを使用するために独自のフレームバッファを使用する場合に必要であると仮定すると、マルチサンプリングは自動的に行われるため、マルチサンプリングは必要ありません。必要なのは、OpenGLコンテキスト(GLFW libなど)を作成するときにいくつかのサンプルを定義することだけです。したがって、カスタムフレームバッファオブジェクト(FBO)があり、エイリアスエッジを取り除くためにテクスチャをマルチサンプリングする場合は、マルチサンプリングされたテクスチャオブジェクトを作成する必要があります。

glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, GL_TRUE);

FBOにアタッチすると、実際のレンダリングプロセスは次のように機能します。

FBOをMSテクスチャアタッチメントでバインドします。ジオメトリをレンダリングします。次に、マルチサンプリングされたテクスチャを通常のテクスチャに、またはブリッティングによってデフォルトのバックバッファに直接解決します。

glBlitFramebuffer(
    0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 
    0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 
    GL_COLOR_BUFFER_BIT, GL_NEAREST);

全体的なレンダリング手順は次のようになります。

void display()
{
glProgramUniform1i(ProgramName, UniformDiffuse, 0);

// Clear the framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]);

glUseProgram(ProgramName);

// Pass 1
// Render the scene in a multisampled framebuffer
glEnable(GL_MULTISAMPLE);
renderFBO(ProgramName, FramebufferRenderName);
glDisable(GL_MULTISAMPLE);

// Resolved multisampling
glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferRenderName);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBlitFramebuffer(
    0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 
    0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 
    GL_COLOR_BUFFER_BIT, GL_NEAREST);





swapBuffers();
}

ちなみに、これらのコードスニペットは 、多くの一般的な問題(あなたを含む)の解決策を示すOpenGLコード例を見つけることができるこの素晴らしいサイトから取られています。

フラグメントシェーダーとは何ですか?複数のサンプラーをシェーダーに渡す方法は?

上記のサイトから例をダウンロードし、ogl-330-fbo-multisample.cppと同封のフラグメントシェーダーを確認してください。

また、テクセルデータの読み込みに使用できるAPIはどれですか?このテクスチャを適用するために使用するAPIはどれですか?

GLFWを使用してTGAテクスチャを簡単にロードできます。また、考えられるあらゆる画像形式をロードしたい場合は、DevILをご覧ください。

于 2012-12-24T12:16:03.197 に答える