📄 main.c
字号:
glBegin(GL_LINE_STRIP); for ( x=0;x<numsamples;x++) { glVertex3f((x*texsize)/(double)numsamples, pcmdataR[x]*20*fWaveScale+texsize*(wave_y_temp-(wave_y*wave_y*.5)),-1); } glEnd(); glPopMatrix(); break; default: glBegin(GL_LINE_LOOP); for ( x=0;x<512;x++) { theta=(x)*(6.28/512.0); r= (texsize/5.0+pcmdataL[x]*.002); glVertex3f(r*cos(theta)+(wave_x*texsize),r*sin(theta)+(wave_y*texsize),-1); } glEnd(); glBegin(GL_LINE_STRIP); for ( x=0;x<512;x++) { glVertex3f(x*scale, pcmdataL[x]*20*fWaveScale+(texsize*(wave_x+.1)),-1); } glEnd(); glBegin(GL_LINE_STRIP); for ( x=0;x<512;x++) { glVertex3f(x*scale, pcmdataR[x]*20*fWaveScale+(texsize*(wave_x-.1)),-1); } glEnd(); break; if (bWaveThick==1) glLineWidth(2*texsize/512); } glLineWidth(texsize/512); glDisable(GL_LINE_STIPPLE);}void maximize_colors(){ float wave_r_switch=0,wave_g_switch=0,wave_b_switch=0; //wave color brightening // //forces max color value to 1.0 and scales // the rest accordingly if (bMaximizeWaveColor==1) { if(wave_r>=wave_g && wave_r>=wave_b) //red brightest { wave_b_switch=wave_b*(1/wave_r); wave_g_switch=wave_g*(1/wave_r); wave_r_switch=1.0; } else if (wave_b>=wave_g && wave_b>=wave_r) //blue brightest { wave_r_switch=wave_r*(1/wave_b); wave_g_switch=wave_g*(1/wave_b); wave_b_switch=1.0; } else if (wave_g>=wave_b && wave_g>=wave_r) //green brightest { wave_b_switch=wave_b*(1/wave_g); wave_r_switch=wave_r*(1/wave_g); wave_g_switch=1.0; } glColor4f(wave_r_switch, wave_g_switch, wave_b_switch, wave_o); } else { glColor4f(wave_r, wave_g, wave_b, wave_o); }}void modulate_opacity_by_volume(){ //modulate volume by opacity // //set an upper and lower bound and linearly //calculate the opacity from 0=lower to 1=upper //based on current volume if (bModWaveAlphaByVolume==1) {if (vol<=fModWaveAlphaStart) wave_o=0.0; else if (vol>=fModWaveAlphaEnd) wave_o=fWaveAlpha; else wave_o=fWaveAlpha*((vol-fModWaveAlphaStart)/(fModWaveAlphaEnd-fModWaveAlphaStart));} else wave_o=fWaveAlpha;}void draw_motion_vectors(){ int x,y; double offsetx=mv_dx*texsize, intervalx=texsize/(double)mv_x; double offsety=mv_dy*texsize, intervaly=texsize/(double)mv_y; glPointSize(mv_l); glColor4f(mv_r, mv_g, mv_b, mv_a); glBegin(GL_POINTS); for (x=0;x<mv_x;x++){ for(y=0;y<mv_y;y++){ glVertex3f(offsetx+x*intervalx,offsety+y*intervaly,-1); }} glEnd();}void draw_borders(){ //no additive drawing for borders glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glTranslatef(0,0,-1); //Draw Borders double of=texsize*ob_size*.5; double iff=(texsize*ib_size*.5); double texof=texsize-of; glColor4d(ob_r,ob_g,ob_b,ob_a); glRectd(0,0,of,texsize); glRectd(of,0,texof,of); glRectd(texof,0,texsize,texsize); glRectd(of,texsize,texof,texof); glColor4d(ib_r,ib_g,ib_b,ib_a); glRectd(of,of,of+iff,texof); glRectd(of+iff,of,texof-iff,of+iff); glRectd(texof-iff,of,texof,texof); glRectd(of+iff,texof,texof-iff,texof-iff);}//Here we render the interpolated mesh, and then apply the texture to it.//Well, we actually do the inverse, but its all the same.void render_interpolation(){ int x,y; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslated(0, 0, -9); glColor4f(0.0, 0.0, 0.0,decay); glEnable(GL_TEXTURE_2D); for (x=0;x<gx-1;x++) { glBegin(GL_TRIANGLE_STRIP); for(y=0;y<gy;y++) { glTexCoord4f(x_mesh[x][y], y_mesh[x][y],-1,1); glVertex4f(gridx[x][y], gridy[x][y],-1,1); glTexCoord4f(x_mesh[x+1][y], y_mesh[x+1][y],-1,1); glVertex4f(gridx[x+1][y], gridy[x+1][y],-1,1); } glEnd(); } glDisable(GL_TEXTURE_2D);}void do_per_frame(){ //Texture wrapping( clamp vs. wrap) if (bTexWrap==0) { glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); } else { glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); } // glRasterPos2i(0,0); // glClear(GL_COLOR_BUFFER_BIT); // glColor4d(0.0, 0.0, 0.0,1.0); // glMatrixMode(GL_TEXTURE); // glLoadIdentity(); glRasterPos2i(0,0); glClear(GL_COLOR_BUFFER_BIT); glColor4d(0.0, 0.0, 0.0,1.0); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(cx,cy, 0); if(correction) glScalef(1,vw/(double)vh,1); if(!isPerPixelEqn(ROT_OP)) { // printf("ROTATING: rot = %f\n", rot); glRotatef(rot*90, 0, 0, 1); } if(!isPerPixelEqn(SX_OP)) glScalef(1/sx,1,1); if(!isPerPixelEqn(SY_OP)) glScalef(1,1/sy,1); if(correction) glScalef(1,vh/(double)vw,1); glTranslatef((-cx) ,(-cy),0); if(!isPerPixelEqn(DX_OP)) glTranslatef(-dx,0,0); if(!isPerPixelEqn(DY_OP)) glTranslatef(0 ,-dy,0);}//Actually draws the texture to the screen////The Video Echo effect is also applied herevoid render_texture_to_screen(){ glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0, 0, -9); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); // glClear(GL_ACCUM_BUFFER_BIT); glColor4d(0.0, 0.0, 0.0,1.0f); glBegin(GL_QUADS); glVertex4d(-vw*.5,-vh*.5,-1,1); glVertex4d(-vw*.5, vh*.5,-1,1); glVertex4d(vw*.5, vh*.5,-1,1); glVertex4d(vw*.5, -vh*.5,-1,1); glEnd(); // glBindTexture( GL_TEXTURE_2D, tex2 ); glEnable(GL_TEXTURE_2D); // glAccum(GL_LOAD,0); // if (bDarken==1) glBlendFunc(GL_SRC_COLOR,GL_ZERO); //Draw giant rectangle and texture it with our texture! glBegin(GL_QUADS); glTexCoord4d(0, 1,0,1); glVertex4d(-vw*.5,-vh*.5,-1,1); glTexCoord4d(0, 0,0,1); glVertex4d(-vw*.5, vh*.5,-1,1); glTexCoord4d(1, 0,0,1); glVertex4d(vw*.5, vh*.5,-1,1); glTexCoord4d(1, 1,0,1); glVertex4d(vw*.5, -vh*.5,-1,1); glEnd(); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); // if (bDarken==1) glBlendFunc(GL_SRC_COLOR,GL_ONE_MINUS_SRC_ALPHA); // if (bDarken==1) { glAccum(GL_ACCUM,1-fVideoEchoAlpha); glBlendFunc(GL_SRC_COLOR,GL_ZERO); } glMatrixMode(GL_TEXTURE); //draw video echo glColor4f(0.0, 0.0, 0.0,fVideoEchoAlpha); glTranslated(.5,.5,0); glScaled(1/fVideoEchoZoom,1/fVideoEchoZoom,1); glTranslated(-.5,-.5,0); int flipx=1,flipy=1; switch (((int)nVideoEchoOrientation)) { case 0: flipx=1;flipy=1;break; case 1: flipx=-1;flipy=1;break; case 2: flipx=1;flipy=-1;break; case 3: flipx=-1;flipy=-1;break; default: flipx=1;flipy=1; break; } glBegin(GL_QUADS); glTexCoord4d(0, 1,0,1); glVertex4f(-vw*.5*flipx,-vh*.5*flipy,-1,1); glTexCoord4d(0, 0,0,1); glVertex4f(-vw*.5*flipx, vh*.5*flipy,-1,1); glTexCoord4d(1, 0,0,1); glVertex4f(vw*.5*flipx, vh*.5*flipy,-1,1); glTexCoord4d(1, 1,0,1); glVertex4f(vw*.5*flipx, -vh*.5*flipy,-1,1); glEnd(); glDisable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); // if (bDarken==1) { glAccum(GL_ACCUM,fVideoEchoAlpha); glAccum(GL_RETURN,1);} if (bInvert==1) { glColor4f(1.0, 1.0, 1.0,1.0); glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO); glBegin(GL_QUADS); glVertex4f(-vw*.5*flipx,-vh*.5*flipy,-1,1); glVertex4f(-vw*.5*flipx, vh*.5*flipy,-1,1); glVertex4f(vw*.5*flipx, vh*.5*flipy,-1,1); glVertex4f(vw*.5*flipx, -vh*.5*flipy,-1,1); glEnd(); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); }}void render_texture_to_studio(){ glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0, 0, -9); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); // glClear(GL_ACCUM_BUFFER_BIT); glColor4f(0.0, 0.0, 0.0,0.04); glVertex4d(-vw*.5,-vh*.5,-1,1); glVertex4d(-vw*.5, vh*.5,-1,1); glVertex4d(vw*.5, vh*.5,-1,1); glVertex4d(vw*.5, -vh*.5,-1,1); glEnd(); glColor4f(0.0, 0.0, 0.0,1.0); glBegin(GL_QUADS); glVertex4d(-vw*.5,0,-1,1); glVertex4d(-vw*.5, vh*.5,-1,1); glVertex4d(vw*.5, vh*.5,-1,1); glVertex4d(vw*.5, 0,-1,1); glEnd(); glBegin(GL_QUADS); glVertex4d(0,-vh*.5,-1,1); glVertex4d(0, vh*.5,-1,1); glVertex4d(vw*.5, vh*.5,-1,1); glVertex4d(vw*.5, -vh*.5,-1,1); glEnd(); glPushMatrix(); glTranslatef(.25*vw, .25*vh, 0); glScalef(.5,.5,1); // glBindTexture( GL_TEXTURE_2D, tex2 ); glEnable(GL_TEXTURE_2D); // glAccum(GL_LOAD,0); // if (bDarken==1) glBlendFunc(GL_SRC_COLOR,GL_ZERO); //Draw giant rectangle and texture it with our texture! glBegin(GL_QUADS); glTexCoord4d(0, 1,0,1); glVertex4d(-vw*.5,-vh*.5,-1,1); glTexCoord4d(0, 0,0,1); glVertex4d(-vw*.5, vh*.5,-1,1); glTexCoord4d(1, 0,0,1); glVertex4d(vw*.5, vh*.5,-1,1); glTexCoord4d(1, 1,0,1); glVertex4d(vw*.5, -vh*.5,-1,1); glEnd(); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); // if (bDarken==1) glBlendFunc(GL_SRC_COLOR,GL_ONE_MINUS_SRC_ALPHA); // if (bDarken==1) { glAccum(GL_ACCUM,1-fVideoEchoAlpha); glBlendFunc(GL_SRC_COLOR,GL_ZERO); } glMatrixMode(GL_TEXTURE); //draw video echo glColor4f(0.0, 0.0, 0.0,fVideoEchoAlpha); glTranslated(.5,.5,0); glScaled(1/fVideoEchoZoom,1/fVideoEchoZoom,1); glTranslated(-.5,-.5,0); int flipx=1,flipy=1; switch (((int)nVideoEchoOrientation)) { case 0: flipx=1;flipy=1;break; case 1: flipx=-1;flipy=1;break; case 2: flipx=1;flipy=-1;break; case 3: flipx=-1;flipy=-1;break; default: flipx=1;flipy=1; break; } glBegin(GL_QUADS); glTexCoord4d(0, 1,0,1); glVertex4f(-vw*.5*flipx,-vh*.5*flipy,-1,1); glTexCoord4d(0, 0,0,1); glVertex4f(-vw*.5*flipx, vh*.5*flipy,-1,1); glTexCoord4d(1, 0,0,1); glVertex4f(vw*.5*flipx, vh*.5*flipy,-1,1); glTexCoord4d(1, 1,0,1); glVertex4f(vw*.5*flipx, -vh*.5*flipy,-1,1); glEnd(); glDisable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); // if (bDarken==1) { glAccum(GL_ACCUM,fVideoEchoAlpha); glAccum(GL_RETURN,1);} if (bInvert==1) { glColor4f(1.0, 1.0, 1.0,1.0); glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO); glBegin(GL_QUADS); glVertex4f(-vw*.5*flipx,-vh*.5*flipy,-1,1); glVertex4f(-vw*.5*flipx, vh*.5*flipy,-1,1); glVertex4f(vw*.5*flipx, vh*.5*flipy,-1,1); glVertex4f(vw*.5*flipx, -vh*.5*flipy,-1,1); glEnd(); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); } // glTranslated(.5,.5,0); // glScaled(1/fVideoEchoZoom,1/fVideoEchoZoom,1); // glTranslated(-.5,-.5,0); //glTranslatef(0,.5*vh,0); //per_pixel monitor //glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO); int x,y; glMatrixMode(GL_MODELVIEW); glPopMatrix(); glPushMatrix(); glTranslatef(.25*vw, -.25*vh, 0); glScalef(.5,.5,1); glColor4f(1,1,1,.6); for (x=0;x<gx;x++) { glBegin(GL_LINE_STRIP); for(y=0;y<gy;y++) { glVertex4f((x_mesh[x][y]-.5)* vw, (y_mesh[x][y]-.5)*vh,-1,1); //glVertex4f((origx[x+1][y]-.5) * vw, (origy[x+1][y]-.5) *vh ,-1,1); } glEnd(); } for (y=0;y<gy;y++) { glBegin(GL_LINE_STRIP); for(x=0;x<gx;x++) { glVertex4f((x_mesh[x][y]-.5)* vw, (y_mesh[x][y]-.5)*vh,-1,1); //glVertex4f((origx[x+1][y]-.5) * vw, (origy[x+1][y]-.5) *vh ,-1,1); } glEnd(); } /* for (x=0;x<gx-1;x++){ glBegin(GL_POINTS); for(y=0;y<gy;y++){ glVertex4f((origx[x][y]-.5)* vw, (origy[x][y]-.5)*vh,-1,1); glVertex4f((origx[x+1][y]-.5) * vw, (origy[x+1][y]-.5) *vh ,-1,1); } glEnd(); } */ // glTranslated(-.5,-.5,0); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glPushMatrix(); glTranslatef(-.5*vw,0, 0); glTranslatef(0,-vh*.10, 0); glBegin(GL_LINE_STRIP); glColor4f(0,1.0,1.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw, treb_att*-7,-1); glColor4f(1.0,1.0,1.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw,0 ,-1); glColor4f(.5,1.0,1.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw, treb*7,-1); glEnd(); glTranslatef(0,-vh*.13, 0); glBegin(GL_LINE_STRIP); glColor4f(0,1.0,0.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw, mid_att*-7,-1); glColor4f(1.0,1.0,1.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw,0 ,-1); glColor4f(.5,1.0,0.0,0.5); glVertex3f((((totalframes%256)/551.0))*vw, mid*7,-1); glEnd(); glTranslatef(0,-vh*.13, 0); glBegin(GL_LINE_STRIP); glColor4f(1.0,0.0,0.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw, bass_att*-7,-1); glColor4f(1.0,1.0,1.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw,0 ,-1); glColor4f(.7,0.2,0.2,1.0); glVertex3f((((totalframes%256)/551.0))*vw, bass*7,-1); glEnd(); glTranslatef(0,-vh*.13, 0); glBegin(GL_LINES); glColor4f(1.0,1.0,1.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw,0 ,-1); glColor4f(1.0,0.6,1.0,1.0); glVertex3f((((totalframes%256)/551.0))*vw, vol*7,-1); glEnd(); glPopMatrix();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -