Setä oli väsäillyt pyörivän 3d kuution visualbasicilla...
tässä sama(ehkä) toteutettuna C:llä... kiitos sedälle :DD
binary(sekä windows että linux binary) + source löytyy osoitteesta : http://koti.mbnet.fi/al_e/programming/kuutio/
#include <stdio.h> #include <SDL.h> #include <SDL_gfxPrimitives.h> #define WINDOW_WIDTH 400 #define WINDOW_HEIGHT 300 int main(int argc, char *argv[]) { SDL_Surface *screen = NULL; SDL_Event event; int px[7], py[7], pz[7]; /* Kärkipisteiden koordinaatit */ int xx, yy, zz; /* Muunnoksen apuna */ int mx[7], mz[7]; /* projektiot */ float a, b; /* katselukulmat */ float c; /* särmän puolisko */ float d, k; /* perspektiivi */ float sa, sb; /* sinit */ float ca, cb; /* cosinit */ int i; /* Laskuri */ int mousex, mousey; /* Hiiren koordinaatit */ int mouse = 0; /* Hiiren nappi pohjassa? */ int plus = 0, minus = 0; /* Miinus tai plus pohjassa? */ /* Initialisoidaan SDL */ if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); exit(1); } atexit(SDL_Quit); /* Asetetaan caption */ SDL_WM_SetCaption("Kuutio", 0); /* Asetetaan resoluutio */ screen = SDL_SetVideoMode (WINDOW_WIDTH, WINDOW_HEIGHT, 16, SDL_SWSURFACE); /* ... */ c = WINDOW_HEIGHT; if (c > WINDOW_WIDTH) c = WINDOW_WIDTH; c = c / 4; d = 10 * c; a = 0.4; b = 0.3; sa = sin(a); ca = cos(a); sb = sin(b); cb = cos(b); px[0] = -c; py[0] = -c; pz[0] = -c; px[1] = c; py[1] = -c; pz[1] = -c; px[2] = c; py[2] = c; pz[2] = -c; px[3] = c; py[3] = c; pz[3] = c; px[4] = c; py[4] = -c; pz[4] = c; px[5] = -c; py[5] = -c; pz[5] = c; px[6] = -c; py[6] = c; pz[6] = c; px[7] = -c; py[7] = c; pz[7] = -c; /* Main loop */ while (SDL_PollEvent(&event) >= 0) { if (plus) d = d / 1.01; if (minus) d = d * 1.01; switch (event.type) { case SDL_KEYDOWN: { if (event.key.keysym.sym==SDLK_KP_PLUS) plus = 1; else if (event.key.keysym.sym==SDLK_KP_MINUS) minus = 1; break; } case SDL_KEYUP: { if (event.key.keysym.sym==SDLK_KP_PLUS) plus = 0; else if (event.key.keysym.sym==SDLK_KP_MINUS) minus = 0; break; } case SDL_MOUSEMOTION: { /* Kun hiirtä liikutetaan... */ if (mouse) { /* Ja hiiren nappi on pohjassa. */ a += (mousex - event.motion.x) / 3; b += (mousey - event.motion.y) / 3; sa = sin(a); ca = cos(a); sb = sin(b); cb = cos(b); mousex = event.motion.x; mousey = event.motion.y; } break; } /* Kun nappia painetaan */ case SDL_MOUSEBUTTONDOWN: { mousex = event.motion.x; mousey = event.motion.y; mouse = 1; break; } /* Kun nappi päästetään */ case SDL_MOUSEBUTTONUP: { mouse = 0; break; } /* Kun ikkuna suljetaan */ case SDL_QUIT: { printf("Quitting.\n"); exit(0); } } /* Tyhjennetään ikkuna */ SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0)); /* Piiretään neliö */ for (i=0; i <= 7; i++) { /* Lasketaan pisteiden projektiot */ xx = (int)((float)px[i] * ca + (float)py[i] * sa); yy = (int)(((float)py[i] * ca - (float)px[i] * sa) * cb - (float)pz[i] * sb); zz = (int)(((float)py[i] * ca - (float)px[i] * sa) * sb + (float)pz[i] * cb); k = d / (d + yy); mx[i] = k * xx; mz[i] = k * zz; } lineRGBA(screen, WINDOW_WIDTH/2 + mx[0], WINDOW_HEIGHT/2 + mz[0], WINDOW_WIDTH/2 + mx[1], WINDOW_HEIGHT/2 + mz[1], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[1], WINDOW_HEIGHT/2 + mz[1], WINDOW_WIDTH/2 + mx[2], WINDOW_HEIGHT/2 + mz[2], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[2], WINDOW_HEIGHT/2 + mz[2], WINDOW_WIDTH/2 + mx[3], WINDOW_HEIGHT/2 + mz[3], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[3], WINDOW_HEIGHT/2 + mz[3], WINDOW_WIDTH/2 + mx[4], WINDOW_HEIGHT/2 + mz[4], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[4], WINDOW_HEIGHT/2 + mz[4], WINDOW_WIDTH/2 + mx[5], WINDOW_HEIGHT/2 + mz[5], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[5], WINDOW_HEIGHT/2 + mz[5], WINDOW_WIDTH/2 + mx[6], WINDOW_HEIGHT/2 + mz[6], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[6], WINDOW_HEIGHT/2 + mz[6], WINDOW_WIDTH/2 + mx[7], WINDOW_HEIGHT/2 + mz[7], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[7], WINDOW_HEIGHT/2 + mz[7], WINDOW_WIDTH/2 + mx[0], WINDOW_HEIGHT/2 + mz[0], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[0], WINDOW_HEIGHT/2 + mz[0], WINDOW_WIDTH/2 + mx[5], WINDOW_HEIGHT/2 + mz[5], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[4], WINDOW_HEIGHT/2 + mz[4], WINDOW_WIDTH/2 + mx[1], WINDOW_HEIGHT/2 + mz[1], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[2], WINDOW_HEIGHT/2 + mz[2], WINDOW_WIDTH/2 + mx[7], WINDOW_HEIGHT/2 + mz[7], 0, 255, 255, 255); lineRGBA(screen, WINDOW_WIDTH/2 + mx[6], WINDOW_HEIGHT/2 + mz[6], WINDOW_WIDTH/2 + mx[3],WINDOW_HEIGHT/2 + mz[3], 0, 255, 255, 255); /* Päivitetään ikkuna */ SDL_Flip(screen); } return(0); }
"Pyöriteltävä" siis :DD ja sit tos voi samanlail(ehkä) suurentaa ja pienentää sitä eli "+" ja "-".....
entäs windows binayr? ;)
no kappas, olihan se windowski siellä :)
no jaa, jos toi "Tarvittavaa tiedosta SDL.dll ei löytynyt" on sun mielestä hieno 3d-kuutio niin... :D
no ei vaan, vaikka mää oon purkanu kaikki dll:t ja semmoset mitä siinä zipissä oli niin tää salittaa että ei löydy :/
aijaa mä testasin tota vnc:n yli faijan työkoneel ni kyl se siin toimi ku purki ton .zip paketin vaan...
voit tietysti kokeilla kopioida ne dll:ät c:\windows\system:iin...
no eikö sitä nyt edes palautetta tule :((
No mää pistin sinne windowsin system hakemistoon ja silti valitti :\
EI....ei toimi Dev-cpp:llä...vanha cpp. ei löydä riveillä 3 ja 4 olevia kirjastoja :(
Ainaki mulla sillee "lagaa" et ei oo portaaton se pyöritys, ja siksi näyttää rumalta. =(
Höh. Mulla ei oo tota SDL_gfxPrimitives.h, SDL.h kyl on ja muutenki täs sdl mut toi puuttuu eikä toimi ilman sitäkään näköjään :I
Toimii aivan vallan mainiosti..
http://mielikuvitus.be/kuutio.jpg
Noh jos tuota kuutioksi haluat sanoa :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.