void LoadPoint(FILE *f, vcg::Point3f &p){ LoadFloat(f, p.X() ); LoadFloat(f, p.Z() ); LoadFloat(f, p.Y() ); //printf("(%f,%f,%f) ",p[0],p[1],p[2]); }
static void norm2int(vcg::Point3f res, Byte &zenb,Byte &azib){ double zen = atan2(res.Z(), res.X() ); double azi = acos(res.Y() ); int zeni = int( zen / (2 * M_PI ) * 255.0); int azii = int( azi / (2 * M_PI ) * 255.0); if (zeni>255) zeni -= 255; if (zeni<0) zeni += 255; if (azii>255) azii -= 255; if (azii<0) azii += 255; zenb = zeni; azib = azii; }
void SdfGpuPlugin::calculateObscurance(FramebufferObject* fboFront, FramebufferObject* fboBack, FramebufferObject* nextBack, const vcg::Point3f& cameraDir, float bbDiag) { mFboResult->bind(); glEnable(GL_SCISSOR_TEST); glScissor(0,0,mResTextureDim,mNumberOfTexRows); GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT }; glDrawBuffers(2, buffers); glViewport(0, 0, mResTextureDim, mResTextureDim); GLfloat mv_pr_Matrix_f[16]; // modelview-projection matrix glGetFloatv(GL_MODELVIEW_MATRIX, mv_pr_Matrix_f); glMatrixMode(GL_PROJECTION); glMultMatrixf(mv_pr_Matrix_f); glGetFloatv(GL_PROJECTION_MATRIX, mv_pr_Matrix_f); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glDepthMask(GL_FALSE); glDisable(GL_DEPTH_TEST); glEnable (GL_BLEND); glBlendFunc (GL_ONE, GL_ONE); glBlendEquation(GL_FUNC_ADD); glUseProgram(mObscuranceProgram->id()); assert(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)==GL_FRAMEBUFFER_COMPLETE_EXT && "before draw"); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, fboFront->getAttachedId(GL_DEPTH_ATTACHMENT)); mObscuranceProgram->setUniform1i("depthTextureFront",0); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, fboBack->getAttachedId(GL_DEPTH_ATTACHMENT)); mObscuranceProgram->setUniform1i("depthTextureBack",1); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, mVertexCoordsTexture->id()); mObscuranceProgram->setUniform1i("vTexture",2); glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, mVertexNormalsTexture->id()); mObscuranceProgram->setUniform1i("nTexture",3); //next depth layer, see TraceRays function for an explanation if(nextBack != NULL) { glActiveTexture(GL_TEXTURE4); glBindTexture(GL_TEXTURE_2D, nextBack->getAttachedId(GL_DEPTH_ATTACHMENT)); mObscuranceProgram->setUniform1i("depthTextureNextBack",4); } // Set view direction mObscuranceProgram->setUniform3f("viewDirection", cameraDir.X(), cameraDir.Y(), cameraDir.Z()); // Set ModelView-Projection Matrix mObscuranceProgram->setUniformMatrix4fv( "mvprMatrix", mv_pr_Matrix_f, 1, GL_FALSE ); // Set texture Size mObscuranceProgram->setUniform1f("texSize", mPeelingTextureSize); // Set viewport Size mObscuranceProgram->setUniform1f("viewpSize", mResTextureDim ); mObscuranceProgram->setUniform1f("tau", mTau); mObscuranceProgram->setUniform1f("maxDist", bbDiag); //just a flag to know how many layers to use for z-fighting removal if(nextBack == NULL) mObscuranceProgram->setUniform1i("firstRendering",1); else mObscuranceProgram->setUniform1i("firstRendering",0); // Screen-aligned Quad glBegin(GL_QUADS); glVertex3f(-1.0f, -1.0f, 0.0f); //L-L glVertex3f( 1.0f, -1.0f, 0.0f); //L-R glVertex3f( 1.0f, 1.0f, 0.0f); //U-R glVertex3f(-1.0f, 1.0f, 0.0f); //U-L glEnd(); assert(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)==GL_FRAMEBUFFER_COMPLETE_EXT && "after draw"); mFboResult->unbind(); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDisable(GL_BLEND); glDisable(GL_SCISSOR_TEST); }
void SdfGpuPlugin::calculateSdfHW(FramebufferObject* fboFront, FramebufferObject* fboBack, FramebufferObject* fboPrevBack, const vcg::Point3f& cameraDir) { mFboResult->bind(); glEnable(GL_SCISSOR_TEST); glScissor(0,0,mResTextureDim,mNumberOfTexRows); GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT }; glDrawBuffers(2, buffers); glViewport(0, 0, mResTextureDim, mResTextureDim); GLfloat mv_pr_Matrix_f[16]; // modelview-projection matrix glGetFloatv(GL_MODELVIEW_MATRIX, mv_pr_Matrix_f); glMatrixMode(GL_PROJECTION); glMultMatrixf(mv_pr_Matrix_f); glGetFloatv(GL_PROJECTION_MATRIX, mv_pr_Matrix_f); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glDisable(GL_DEPTH_TEST); // glDepthMask(GL_FALSE); glEnable (GL_BLEND); glBlendFunc (GL_ONE, GL_ONE); glBlendEquation(GL_FUNC_ADD); glUseProgram(mSDFProgram->id()); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, fboFront->getAttachedId(GL_DEPTH_ATTACHMENT)); mSDFProgram->setUniform1i("depthTextureFront",0); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, fboBack->getAttachedId(GL_DEPTH_ATTACHMENT)); mSDFProgram->setUniform1i("depthTextureBack",1); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, fboBack->getAttachedId(GL_COLOR_ATTACHMENT0)); mSDFProgram->setUniform1i("normalTextureBack",2); glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, mVertexCoordsTexture->id()); mSDFProgram->setUniform1i("vTexture",3); glActiveTexture(GL_TEXTURE4); glBindTexture(GL_TEXTURE_2D, mVertexNormalsTexture->id()); mSDFProgram->setUniform1i("nTexture",4); //previous depth layer, see TraceRays function for an explanation if(fboPrevBack) { glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_2D, fboPrevBack->getAttachedId(GL_DEPTH_ATTACHMENT)); mSDFProgram->setUniform1i("depthTexturePrevBack",5); } // Set view direction mSDFProgram->setUniform3f("viewDirection", cameraDir.X(), cameraDir.Y(), cameraDir.Z()); // Set ModelView-Projection Matrix mSDFProgram->setUniformMatrix4fv( "mvprMatrix", mv_pr_Matrix_f, 1, GL_FALSE ); vcg::Matrix44f mvprINV(mv_pr_Matrix_f); mvprINV.transposeInPlace(); vcg::Invert(mvprINV); mSDFProgram->setUniformMatrix4fv( "mvprMatrixINV", mvprINV.V(), 1, GL_TRUE ); // Set texture Size mSDFProgram->setUniform1f("texSize", mPeelingTextureSize); // Set viewport Size mSDFProgram->setUniform1f("viewpSize", mResTextureDim ); mSDFProgram->setUniform1f("minCos", mMinCos); //just a flag to know how many layers to use for z-fighting removal if(fboPrevBack == NULL) mSDFProgram->setUniform1i("firstRendering",1); else mSDFProgram->setUniform1i("firstRendering",0); if(mRemoveFalse) mSDFProgram->setUniform1i("removeFalse",1); else mSDFProgram->setUniform1i("removeFalse",0); if(mRemoveOutliers) mSDFProgram->setUniform1i("removeOutliers",1); else mSDFProgram->setUniform1i("removeOutliers",0); // Screen-aligned Quad glBegin(GL_QUADS); glVertex3f(-1.0f, -1.0f, 0.0f); //L-L glVertex3f( 1.0f, -1.0f, 0.0f); //L-R glVertex3f( 1.0f, 1.0f, 0.0f); //U-R glVertex3f(-1.0f, 1.0f, 0.0f); //U-L glEnd(); mFboResult->unbind(); glEnable(GL_DEPTH_TEST); // glDepthMask(GL_TRUE); glDisable(GL_BLEND); glDisable(GL_SCISSOR_TEST); }
void SavePoint16(FILE *f, vcg::Point3f p) { SaveShort(f, int(p.X()*RATIO*64) ); SaveShort(f, int(p.Z()*RATIO*64) ); SaveShort(f, int(p.Y()*RATIO*64) ); }
void SavePoint(FILE *f, vcg::Point3f p) { SaveFloat(f, p.X() ); SaveFloat(f, p.Z() ); SaveFloat(f, p.Y() ); }