void Plot3DWidget::DrawBRDFHemisphere( brdfPackage pkg ) { DGLShader* shader = NULL; // if there's a BRDF, the BRDF pbject sets up and enables the shader if( pkg.brdf ) { shader = pkg.brdf->getUpdatedShader( SHADER_REFLECTOMETER, &pkg ); shader->setUniformFloat( "incidentVector", incidentVector[0], incidentVector[1], incidentVector[2] ); shader->setUniformFloat( "incidentTheta", inTheta ); shader->setUniformFloat( "incidentPhi", inPhi ); shader->setUniformFloat( "useLogPlot", useLogPlot ? 1.0 : 0.0 ); shader->setUniformFloat( "useNDotL", useNDotL ? 1.0 : 0.0 ); } // setup to draw the VBO glVertexPointer( 3, GL_FLOAT, 0, NULL ); glBindBuffer(GL_ARRAY_BUFFER, hemisphereVerticesVBO); glEnableClientState(GL_VERTEX_ARRAY); // ... draw it... glDrawArrays(GL_TRIANGLES, 0, numTrianglesInHemisphere*3); // ... and now we're done! glDisableClientState(GL_VERTEX_ARRAY); // if there was a shader, now we have to disable it if( pkg.brdf ) pkg.brdf->disableShader( SHADER_REFLECTOMETER ); }
void PlotPolarWidget::DrawBRDFHemisphere( brdfPackage pkg ) { DGLShader* shader = NULL; // if there's a BRDF, the BRDF pbject sets up and enables the shader if( pkg.brdf ) { shader = pkg.brdf->getUpdatedShader( SHADER_POLAR, &pkg ); if( shader ) { shader->setUniformFloat( "incidentVector", incidentVector[0], incidentVector[1], incidentVector[2] ); shader->setUniformFloat( "incidentTheta", inTheta ); shader->setUniformFloat( "incidentPhi", inPhi ); shader->setUniformFloat( "useLogPlot", useLogPlot ? 1.0 : 0.0 ); shader->setUniformFloat( "useNDotL", useNDotL ? 1.0 : 0.0 ); } } glLineWidth( 1 ); glBegin( GL_LINE_LOOP ); float inc = 3.14159265 / 360.; float angle = 0.0; for( int i = 0; i <= 360; i++ ) { glVertex3f( cos(angle), sin(angle), angle ); angle += inc; } glEnd(); // if there was a shader, now we have to disable it if( pkg.brdf ) pkg.brdf->disableShader( SHADER_POLAR ); }
void IBLWidget::drawObject() { DGLShader* shader = NULL; // if there's a BRDF, the BRDF pbject sets up and enables the shader if( brdfs.size() ) { shader = brdfs[0].brdf->getUpdatedShader( SHADER_IBL, &brdfs[0] ); if( shader ) { shader->setUniformMatrix4("projectionMatrix", glm::value_ptr(projectionMatrix)); shader->setUniformMatrix4("modelViewMatrix", glm::value_ptr(modelViewMatrix)); shader->setUniformMatrix3("normalMatrix", glm::value_ptr(normalMatrix)); shader->setUniformFloat( "incidentVector", incidentVector[0], incidentVector[1], incidentVector[2] ); shader->setUniformFloat( "gamma", gamma ); shader->setUniformFloat( "exposure", exposure ); shader->setUniformTexture( "envCube", envTexID, GL_TEXTURE_CUBE_MAP ); shader->setUniformTexture( "probTex", probTexID ); glf->glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); glf->glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); shader->setUniformTexture( "marginalProbTex", marginalProbTexID ); glf->glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); glf->glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); shader->setUniformFloat( "texDims", float(envTex.w), float(envTex.h) ); shader->setUniformMatrix4( "envRotMatrix", glm::value_ptr(envRotMatrix) ); shader->setUniformMatrix4( "envRotMatrixInverse", glm::value_ptr(envRotMatrixInverse) ); shader->setUniformInt( "totalSamples", totalSamples ); shader->setUniformInt( "stepSize", stepSize ); shader->setUniformInt( "passNumber", sampleGroupOrder[numSampleGroupsRendered] ); shader->setUniformFloat( "renderWithIBL", (renderWithIBL) ? 1.0 : 0.0 ); shader->setUniformFloat( "useIBLImportance", bool(iblRenderingMode == RENDER_IBL_IS) ? 1.0 : 0.0 ); shader->setUniformFloat( "useBRDFImportance", bool(iblRenderingMode == RENDER_BRDF_IS) ? 1.0 : 0.0 ); shader->setUniformFloat( "useMIS", bool(iblRenderingMode == RENDER_MIS) ? 1.0 : 0.0 ); } } CKGL(); model->drawVBO(shader); CKGL(); // if there was a shader, now we have to disable it if( brdfs[0].brdf ) { brdfs[0].brdf->disableShader( SHADER_IBL ); } }
void LitSphereWidget::drawSphere( double r, int lats, int longs ) { DGLShader* shader = NULL; // if there's a BRDF, the BRDF pbject sets up and enables the shader if( brdfs.size() ) { shader = brdfs[0].brdf->getUpdatedShader( SHADER_LITSPHERE, &brdfs[0] ); shader->setUniformMatrix4("projectionMatrix", glm::value_ptr(projectionMatrix)); shader->setUniformMatrix4("modelViewMatrix", glm::value_ptr(modelViewMatrix)); shader->setUniformFloat( "incidentVector", incidentVector[0], incidentVector[1], incidentVector[2] ); shader->setUniformFloat( "incidentTheta", inTheta ); shader->setUniformFloat( "incidentPhi", inPhi ); shader->setUniformFloat( "brightness", brightness ); shader->setUniformFloat( "gamma", gamma ); shader->setUniformFloat( "exposure", exposure ); shader->setUniformFloat( "useNDotL", useNDotL ? 1.0 : 0.0 ); } if(r!=sphere->radius() || sphere->lats()!=lats || sphere->longs()!=longs) { delete sphere; sphere = new Sphere(r,lats,longs); } sphere->draw(shader); // if there was a shader, now we have to disable it if( brdfs[0].brdf ) brdfs[0].brdf->disableShader( SHADER_LITSPHERE ); }
void LitSphereWidget::drawSphere( double, int lats, int longs ) { DGLShader* shader = NULL; // if there's a BRDF, the BRDF pbject sets up and enables the shader if( brdfs.size() ) { shader = brdfs[0].brdf->getUpdatedShader( SHADER_LITSPHERE, &brdfs[0] ); shader->setUniformFloat( "incidentVector", incidentVector[0], incidentVector[1], incidentVector[2] ); shader->setUniformFloat( "incidentTheta", inTheta ); shader->setUniformFloat( "incidentPhi", inPhi ); shader->setUniformFloat( "brightness", brightness ); shader->setUniformFloat( "gamma", gamma ); shader->setUniformFloat( "exposure", exposure ); shader->setUniformFloat( "useNDotL", useNDotL ? 1.0 : 0.0 ); } int i, j; for(i = 0; i <= lats; i++) { double lat0 = M_PI * (-0.5 + (double) (i - 1) / lats); double z0 = sin(lat0); double zr0 = cos(lat0); double lat1 = M_PI * (-0.5 + (double) i / lats); double z1 = sin(lat1); double zr1 = cos(lat1); glBegin(GL_QUAD_STRIP); for(j = 0; j <= longs; j++) { double lng = 2 * M_PI * (double) (j - 1) / longs; double x = cos(lng); double y = sin(lng); glNormal3f(x * zr0, y * zr0, z0); glVertex3f(x * zr0, y * zr0, z0); glNormal3f(x * zr1, y * zr1, z1); glVertex3f(x * zr1, y * zr1, z1); } glEnd(); } // if there was a shader, now we have to disable it if( brdfs[0].brdf ) brdfs[0].brdf->disableShader( SHADER_LITSPHERE ); }
DGLShader* PlotCartesianWidget::updateShader( brdfPackage pkg ) { if( !pkg.brdf ) return NULL; DGLShader* shader = NULL; int shaderType = 0; if( sliceType == THETA_V_PLOT ) { shaderType = SHADER_CARTESIAN; shader = pkg.brdf->getUpdatedShader( shaderType, &pkg ); if( shader ) shader->setUniformFloat( "phiV", angleParam ); } else if( sliceType == THETA_H_PLOT ) { shaderType = SHADER_CARTESIAN_THETA_H; shader = pkg.brdf->getUpdatedShader( shaderType, &pkg ); if( shader ) shader->setUniformFloat( "thetaD", angleParam ); } else if( sliceType == THETA_D_PLOT ) { shaderType = SHADER_CARTESIAN_THETA_D; shader = pkg.brdf->getUpdatedShader( shaderType, &pkg ); if( shader ) shader->setUniformFloat( "thetaH", angleParam ); } else if( sliceType == ALBEDO_PLOT ) { shaderType = SHADER_CARTESIAN_ALBEDO; shader = pkg.brdf->getUpdatedShader( shaderType, &pkg ); if( shader ) { shader->setUniformInt( "nSamples", nSamples ); shader->setUniformFloat( "sampleMultOn", useSampleMult ); shader->setUniformInt( "samplingMode", samplingMode ); } } if( shader ) { shader->setUniformMatrix4("projectionMatrix", glm::value_ptr(projectionMatrix)); shader->setUniformMatrix4("modelViewMatrix", glm::value_ptr(modelViewMatrix)); shader->setUniformFloat( "useLogPlot", useLogPlot ? 1.0 : 0.0 ); shader->setUniformFloat( "useNDotL", useNDotL ? 1.0 : 0.0 ); shader->setUniformFloat( "viewport_size", width()*devicePixelRatio(), height()*devicePixelRatio()); shader->setUniformFloat( "thickness", 3.f); shader->setUniformFloat( "incidentVector", incidentVector[0], incidentVector[1], incidentVector[2] ); shader->setUniformFloat( "incidentTheta", inTheta ); shader->setUniformFloat( "incidentPhi", inPhi ); } return shader; }