예제 #1
0
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();
}