void render_fire(float left) { int x,y,i; int w = 256; int h = 256; for(i=0; i<2; i++) { int *p = &mbuf[h-1][0]; for (x=0;x<256;x++) { if (left > 0.7 && (random() % 100) > 60) *p++ = 1024; else *p++ = 0; } if (left > 2.0 && random() % 32 == 0) mbuf[h-1][random()%w] = random()%120000; for (y=254;y>=0;y--) { p = &mbuf[y][0]; *p++ = 0; for (x=1;x<255;x++) { *p = (*p + p[w-1] + p[w] + p[w+1]) / 4; if (*p) (*p)--; p++; } *p++ = 0; } } olPushMatrix(); olScale(1, -1); olTranslate(-1.0f, -1.0f); olScale(2.0f/256.0f, 2.0f/256.0f); olPushColor(); olMultColor(C_RED+C_GREEN_I(150)); trace(&mbuf[0][0], &mtmp[0][0], 200, 256, 235, 2); olPopColor(); olPushColor(); olMultColor(C_RED+C_GREEN_I(100)); trace(&mbuf[0][0], &mtmp[0][0], 250, 256, 235, 2); olPopColor(); olPushColor(); olMultColor(C_RED+C_GREEN_I(50)); trace(&mbuf[0][0], &mtmp[0][0], 300, 256, 235, 2); olPopColor(); olPushColor(); olMultColor(C_RED+C_GREEN_I(0)); trace(&mbuf[0][0], &mtmp[0][0], 400, 256, 235, 2); olPopColor(); olPopMatrix(); }
void render_slide(int num, float stime, int bcolor, float state) { int scolor = (VANISH - fabsf(cubepos)) / VANISH * 400; if (fabsf(cubepos) < VANISH) { olSetPixelShader(NULL); olSetVertex3Shader(NULL); olLoadIdentity(); olLoadIdentity3(); olResetColor(); if (scolor < 255) olMultColor(C_GREY(scolor)); if (bcolor > 0) { // make sure the corners of the slide-rect are always nice and sharp // even when the whole frame gets resampled to maintain framerate OLRenderParams old, params; olGetRenderParams(&old); params = old; params.start_dwell = 40; params.corner_dwell = 40; params.end_dwell = 40; olSetRenderParams(¶ms); olRect(-1, -ASPECT, 1, ASPECT, C_GREY(bcolor > 255 ? 255 : bcolor)); olSetRenderParams(&old); } slides[num].render(slides[num].context, stime, state * ST_VANISH); } }
void DoEuskal(void) { IldaFile *ild; ild = olLoadIlda("euskal18.ild"); params.off_speed = 2.0/20.0; params.start_wait = 8; params.end_wait = 1; params.render_flags |= RENDER_NOREORDER; olSetRenderParams(¶ms); include_dark_points = 0; int count = count_active_points(ild); float cur_draw = 0; olSetVertexShader(cutoff); while(1) { int obj; float w; points_left = cur_draw; olDrawIlda(ild); render(); cur_draw += ftime * count / 5.0; if (cur_draw > count) { break; } } olSetVertexShader(NULL); float bright = 300.0f; while(1) { uint32_t col; if (bright > 255.0f) col = C_WHITE; else col = C_GREY((int)bright); olPushColor(); olMultColor(col); olDrawIlda(ild); olPopColor(); render(); bright -= ftime * 40.0; if (bright < 0) break; } }
void circle(float x, float y, float r, uint32_t color) { olPushMatrix(); olPushColor(); olMultColor(color); olTranslate(x, y); olRotate((x+y)*123); /*olBegin(OL_BEZIERSTRIP); olVertex(0, r, color); int i; for (i=0; i<2; i++) { olVertex(CP*r, r, C_WHITE); olVertex(r, CP*r, C_WHITE); olVertex(r, 0, C_WHITE); olVertex(r, -CP*r, C_WHITE); olVertex(CP*r, -r, C_WHITE); olVertex(0, -r, C_WHITE); olVertex(-CP*r, -r, C_WHITE); olVertex(-r, -CP*r, C_WHITE); olVertex(-r, 0, C_WHITE); olVertex(-r, CP*r, C_WHITE); olVertex(-CP*r, r, C_WHITE); olVertex(0, r, C_WHITE); }*/ /* olVertex(0, r, color); olVertex(0, r, color); olVertex(r*0.1, r, color); olVertex(r*0.1, r, color);*/ float circum = 2 * M_PI * r; int segments = circum / (1/30.0); if (segments < 50) segments = 50; int i; olBegin(OL_POINTS); olVertex(r, 0); for (i=0; i<=(2*segments+10); i++) { float w = i * M_PI * 2.0 / segments; uint32_t c = C_WHITE; if (i > 2*segments) c = C_GREY((10-(i-segments)) * 28); else if (i < 3) c = C_GREY(i * 85); olVertex(r*cosf(w), r*sinf(w)); } olEnd(); olPopColor(); olPopMatrix(); }
void DoTunnel(float limit) { params.on_speed = 2.0/100.0; params.start_dwell = 2; params.curve_dwell = 0; params.corner_dwell = 2; params.curve_angle = cosf(30.0*(M_PI/180.0)); // 30 deg params.end_dwell = 2; params.snap = 1/100000.0; params.flatness = 0.000005; params.start_wait = 6; params.off_speed = 2.0/30.0; params.end_wait = 3; params.render_flags &= ~RENDER_NOREORDER; olSetRenderParams(¶ms); float ctime = 0; int i,j; olLoadIdentity(); float z = 0.0f; float rz = 0.0f; float dz=1.2; int id=0; while (audiotime < limit) { float left = (limit-audiotime)/AB; olResetColor(); if (ctime < 2.0) olMultColor(C_GREY((int)(255*ctime/2))); else if (left < 2.0) olMultColor(C_GREY((int)(255*left/2))); olLoadIdentity3(); olPerspective(45, 1, 1, 100); while(z > dz) { z -= dz; id++; } olScale3(0.6, 0.6, 1.0); olTranslate3(0, 0, 1.5); olTranslate3(0, 0, -z); tunnel_revxform(rz); for(i=0;i<10;i++) { if ((id+i) > 5) { olPushMatrix3(); olTranslate3(0,0,dz*i); tunnel_xform(rz+dz*(i+id)); olBegin(OL_LINESTRIP); for(j=0;j<11;j++) { float theta = j/5.0*M_PI; uint32_t c = C_RED; if(i==9) { c = C_RED_I((int)(255 * z/dz)); } olVertex3(sinf(theta), cosf(theta), 0, c); //olVertex3(j/11.0,0,0,C_WHITE); } olEnd(); olPopMatrix3(); } } for(j=0;j<10;j++) { float theta = j/5.0*M_PI; olBegin(OL_LINESTRIP); for(i=0;i<9;i++) { if ((id+i) > 5) { olPushMatrix3(); olTranslate3(0,0,dz*i); tunnel_xform(rz+dz*(i+id)); olVertex3(sinf(theta), cosf(theta), 0, C_GREEN_I((int)(255 * i/8.0)) | C_BLUE_I((int)(255 * (1-(i/8.0))))); olPopMatrix3(); } } olEnd(); } ctime += render(); z += ftime*3.2; rz += ftime*3.2; } }
void DoTitle(float limit) { IldaFile *ild; ild = olLoadIlda("lase_title.ild"); include_dark_points = 1; int count = count_active_points(ild); float cur_draw = 0; float ctime = 0; olSetVertexShader(cutoff); params.render_flags |= RENDER_NOREORDER; olSetRenderParams(¶ms); while(1) { int obj; float w; points_left = cur_draw; olDrawIlda(ild); ctime += render(); cur_draw += ftime * count / 3.0; if (cur_draw > count) { break; } } olSetVertexShader(NULL); while(AB*ctime < 8) { olDrawIlda(ild); ctime += render(); } wipe_center = -1.0; wipe_w = 0.4; wipe_inv = 1; const char *s="A realtime laser demo"; float s_x = -olGetStringWidth(font, 0.2, s) / 2; float s_y = -0.5; float s_h = 0.2; while(1) { olDrawIlda(ild); olSetPixelShader(hwipe); olDrawString(font, s_x, s_y, s_h, C_WHITE, s); olSetPixelShader(NULL); ctime += render(); wipe_center += 1.7*ftime; if(wipe_center > 1.0f) break; } float bright = 300.0f; while(audiotime < limit) { uint32_t col; if (bright > 255.0f) col = C_WHITE; else col = C_GREY((int)bright); olPushColor(); olMultColor(col); olDrawIlda(ild); olDrawString(font, s_x, s_y, s_h, C_WHITE, s); olPopColor(); render(); bright -= ftime * 130.0; if (bright < 0) bright = 0; } }
void render_cubes(float time) { int i; OLRenderParams mpar; memcpy(&mpar, ¶ms, sizeof(OLRenderParams)); if (time > 32) { time += 1.0; mpar.on_speed = 0.022 + (1-usin(time, 2.0)) * 0.02; mpar.corner_dwell = 8*usin(time, 2.0); mpar.start_dwell = 2+3*usin(time, 2.0); mpar.start_wait = 3+5*usin(time, 2.0); mpar.end_dwell = 2+3*usin(time, 2.0); mpar.end_wait = 2*usin(time, 2.0); olSetRenderParams(&mpar); time -= 1.0; } printf("%f %d %d %d %d %d\n", mpar.on_speed, mpar.corner_dwell, mpar.start_dwell, mpar.start_wait, mpar.end_dwell, mpar.end_wait); olLoadIdentity3(); olPerspective(60, 1, 1, 100); olTranslate3(0, 0, -2.1); for(i=0; i<3; i++) { if (i>0) olPushMatrix3(); olScale3(0.6, 0.6, 0.6); if (i>0) { float tx = sinf(time + (i-1)*M_PI); float ty = cosf(time + (i-1)*M_PI); float tz = sinf(time + (i-1)*M_PI); float s = sinf(0.6*time); olTranslate3(tx*s,ty*s,tz*s); //olScale3(s,s,s); olScale3(0.3,0.3,0.3); } float mult; if (i==0) mult = 1; else if (i==1) mult = 1.5; else if (i==2) mult = -1.5; if (i==0) olMultColor(C_GREY(120)); else olResetColor(); olRotate3Z(mult*time * M_PI * 0.1 / 3.0); olRotate3Y(mult*time * M_PI * 0.8 / 3.0); olRotate3X(mult*time * M_PI * 0.73 / 3.0); olBegin(OL_LINESTRIP); olVertex3(-1, -1, -1, C_RED); olVertex3( 1, -1, -1, C_RED); olVertex3( 1, 1, -1, C_RED); olVertex3(-1, 1, -1, C_RED); olVertex3(-1, -1, -1, C_RED); olVertex3(-1, -1, 1, C_RED); olEnd(); olBegin(OL_LINESTRIP); olVertex3( 1, 1, 1, C_GREEN); olVertex3(-1, 1, 1, C_GREEN); olVertex3(-1, -1, 1, C_GREEN); olVertex3( 1, -1, 1, C_GREEN); olVertex3( 1, 1, 1, C_GREEN); olVertex3( 1, 1, -1, C_GREEN); olEnd(); olBegin(OL_LINESTRIP); olVertex3( 1, -1, -1, C_RED); olVertex3( 1, -1, 1, C_RED); olEnd(); olBegin(OL_LINESTRIP); olVertex3(-1, 1, 1, C_GREEN); olVertex3(-1, 1, -1, C_GREEN); olEnd(); /*olBegin(OL_BEZIERSTRIP); olVertex3(-1, 1, 0, C_WHITE); olVertex3(0, -1, 0, C_WHITE); olVertex3(0, -1, 0, C_WHITE); olVertex3(1, 1, 0, C_WHITE); olVertex3(-1, 0, 0, C_WHITE); olVertex3(-1, 0, 0, C_WHITE); olVertex3(1, -1, 0, C_WHITE); olVertex3(0, 1, 0, C_WHITE); olVertex3(0, 1, 0, C_WHITE); olVertex3(-1, -1, 0, C_WHITE); olVertex3(1, 0, 0, C_WHITE); olVertex3(1, 0, 0, C_WHITE); olVertex3(-1, 1, 0, C_WHITE); olEnd();*/ if (i>0) olPopMatrix3(); } olLoadIdentity3(); olLoadIdentity(); olSetRenderParams(¶ms); olResetColor(); }