I managed to using pbuffer to take screen shot and save to a tga file according to the camera’s position.
So I implement CreateReflectionPlane(&camera);CreateRefractionPlane(&camera);
two functions for rendering reflection and refraction texture for water rendering, i test it , it works.
However, it seems in my shader i can’t bind these two pbuffer textures.
here is my rendering function:
ShaderCreator::getSingletonPtr()->ChooseShader(“Simple”);
water->CreateReflectionPlane(&camera);
water->CreateRefractionPlane(&camera);
PBUFFER *pbuffer,*pbuffer2;
pbuffer = RenderToTextureMgr::getSingletonPtr()->getBuffer(“Reflection”);
pbuffer2 = RenderToTextureMgr::getSingletonPtr()->getBuffer(“Refraction”);
mWindow.MakeCurrent();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glActiveTexture(GL_TEXTURE0);
SkyBox::Render(texarray);
ShaderCreator::getSingletonPtr()->ChooseShader(“Water”);
GLuint eye3 = glGetUniformLocation(ShaderCreator::getSingletonPtr()->GetShader(“Water”),“eyePosition”);
glUniform3f(eye3,camera.Position().x,camera.Position().y,camera.Position().z);
glActiveTexture(GL_TEXTURE0);
pbuffer->MakeCurrent();
glBindTexture(GL_TEXTURE_2D,pbuffer->pbufferTexture);
//wglBindTexImageARB(pbuffer->hBuffer, WGL_FRONT_LEFT_ARB);
GLuint loc = glGetUniformLocation(ShaderCreator::getSingletonPtr()->GetShader(“Water”),“refMap”);
glUniform1i(loc,pbuffer->pbufferTexture);
glActiveTexture(GL_TEXTURE1);
pbuffer2->MakeCurrent();
glBindTexture(GL_TEXTURE_2D, pbuffer2->pbufferTexture);
//wglBindTexImageARB(pbuffer2->hBuffer, WGL_BACK_LEFT_ARB);
GLuint loc2 = glGetUniformLocation(ShaderCreator::getSingletonPtr()->GetShader(“Water”),“fraMap”);
glUniform1i(loc2,pbuffer2->pbufferTexture);
…
Can some one give some suggestions? I am frustrated now.