-1

テクスチャをロードする方法を知っています

std::unique_ptr<glimg::ImageSet> pImgSet(glimg::loaders::dds::LoadFromFile("test.dds"));
GLuint tex = glimg::CreateTexture(pImgSet.get(), 0);

しかし、このテクスチャをシェーダーに取り込むにはどうすればよいでしょうか? GL イメージ - 非公式の OpenGL SDK

4

1 に答える 1

2

テクスチャをユニット 0 などのテクスチャ ユニットにバインドします。

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);

シェーダーにユニフォームを追加sampler2Dします。

uniform sampler2D myTexture;

ユニフォームをテクスチャ ユニットの番号に整数として設定します。

glUseProgram(program);
GLint location = glGetUniformLocation(program, "myTexture");
glUniform1i(location, 0);

シェーダーで、次のように使用texture2Dしてサンプリングします。

gl_FragColor = texture2D(myTexture, texCoords);

知っておくべき重要なことは、sampler2D制服は整数として設定できるということです。1 に設定すると、 にバインドされたテクスチャが使用さGL_TEXTURE1れます。ユニフォームの値のデフォルトは 0 で、アクティブなテクスチャ ユニットのデフォルトはGL_TEXTURE0です。したがって、テクスチャ ユニットを 1 つしか使用しない場合は、ユニフォームを設定する必要さえありません。

于 2013-05-20T18:59:05.497 に答える