1
ポイントのセットを3Dテクスチャにレンダリングしたい。しかし、どういうわけか私はそれに書きません。 glGetTexImage()を使うと、すべてのエントリに対して0しか得られません。フレームバッファに3Dテクスチャを格納していますが、フレームバッファに格納されている3Dテクスチャから情報を読み出すために別のレンダーパスを使用しています。3Dテクスチャにレンダリングする
Initialization of the FrameBuffer.
glGenFramebuffers(1, &_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_3D, texture);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, GRID_SIZE, GRID_SIZE, GRID_SIZE, 0, GL_RGBA, GL_FLOAT, NULL);
glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_3D, texture, 0, 0);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE) {
std::cout << "FBO successfully loadet" << std::endl;
}else{
std::cout << "FBO had en ERROR" << std::endl;
}
頂点シェーダ:
#version 330 core
layout (location = 0) in vec3 position;
void main(){
gl_PointSize = 1.0;
gl_Position = vec4(position,1.0);
}
フラグメントシェーダ:その前に
#version 330 core
out vec4 fragColor;
void main(){
fragColor = vec4(1.0,1.0,1.0, 1.0);
}
私は通常のレンダーパスでそれを試してみましたが、3Dテクスチャに分けて、これらのポイントを保存します。それはうまくいくように見えました。しかし、今はフレームバッファでは0しか書いていません。
それはあなたが達成したいかは不明です(わからないGL_ALL_BARRIER_BITSを開始するには良い方法であるとき)あなたが意図するものにセットのparamビットフィールドと
だから、各レイヤーごとに別々にレンダリングする必要がありますか?それは256時間になります。そして、どのようにして特定のレイヤーにレンダリングするのですか? – Dominick
あなたはすでに特定のレイヤーにレンダリングしています。つまり、 'glFrameBufferTexture3D'の' layer'パラメータは、です。 _layered_フレームバッファを使用して何かを得ることができるかもしれませんが、1回のパスで256レイヤにレンダリングすることはできません。 – derhass