void VHParticlesRender::drawSlices() { batchSize = pSys->nParts / nSlices; glClearColor(0.0, 0.0, 0.0, 0.0); lightFbo->bind(); glClearColor(1.0 - lightColor[0], 1.0 - lightColor[1], 1.0 - lightColor[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); imageFbo->bind(); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); /*int at; glGetIntegerv ( GL_ACTIVE_TEXTURE, &at ); int mm; glGetIntegerv ( GL_MATRIX_MODE, &mm ); GLfloat texMat[16]; glGetFloatv(GL_TEXTURE_MATRIX, texMat);*/ glActiveTexture(GL_TEXTURE0); glMatrixMode(GL_TEXTURE); //glPushMatrix(); glLoadMatrixf((GLfloat *) shadowMatrix.get_value()); //--- for(int i=0; i<nSlices; i++) { // draw slice from camera view, sampling light buffer drawSlice(i); // draw slice from light view to light buffer, accumulating shadows drawSliceLightView(i); if (doBlur) { blurLightBuffer(); } } glActiveTexture(GL_TEXTURE0); glMatrixMode(GL_TEXTURE); //glPopMatrix(); glLoadIdentity(); //GLfloat texMat2[16]; //glGetFloatv(GL_TEXTURE_MATRIX, texMat2); glMatrixMode(GL_MODELVIEW); }
// draw particles as slices with shadowing void SmokeRenderer::drawSlices() { m_batchSize = mNumParticles / m_numSlices; // clear light buffer m_srcLightTexture = 0; m_lightFbo->Bind(); m_lightFbo->AttachTexture(GL_TEXTURE_2D, m_lightTexture[m_srcLightTexture], GL_COLOR_ATTACHMENT0_EXT); glClearColor(1.0 - m_lightColor[0], 1.0 - m_lightColor[1], 1.0 - m_lightColor[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); m_lightFbo->Disable(); // clear volume image m_imageFbo->Bind(); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); m_imageFbo->Disable(); glActiveTexture(GL_TEXTURE0); glMatrixMode(GL_TEXTURE); glLoadMatrixf((GLfloat *) m_shadowMatrix.get_value()); // render slices if (m_numDisplayedSlices > m_numSlices) m_numDisplayedSlices = m_numSlices; for(int i=0; i<m_numDisplayedSlices; i++) { // draw slice from camera view, sampling light buffer drawSlice(i); // draw slice from light view to light buffer, accumulating shadows drawSliceLightView(i); if (m_doBlur) { blurLightBuffer(); } } glActiveTexture(GL_TEXTURE0); glMatrixMode(GL_TEXTURE); glLoadIdentity(); }