X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/b8c3dcf5e075cc961b2693b1fcb8d1b8604e8f7c..2c7ea0058473eb98219ff87c64e28f31fac34b90:/cubelooks.cpp?ds=inline diff --git a/cubelooks.cpp b/cubelooks.cpp deleted file mode 100644 index f6b02ef..0000000 --- a/cubelooks.cpp +++ /dev/null @@ -1,347 +0,0 @@ -#include "cubelooks.h" -#include -#include -#include - -using namespace std; - -vector< pair > Envs; - -bool cubelooks::initDone = false; -GLXDrawable cubelooks::gDrawable; -Display *cubelooks::gDisplay; - -int cubelooks::cube::allid = 0; - -void cubelooks::cube::drawBox() -{ - glBegin(GL_LINES); - - glVertex3f(-1.0f, 1.0f, -1.0f); - glVertex3f( 1.0f, 1.0f, -1.0f); - glVertex3f(-1.0f, -1.0f, -1.0f); - glVertex3f( 1.0f, -1.0f, -1.0f); - glVertex3f(-1.0f, 1.0f, 1.0f); - glVertex3f( 1.0f, 1.0f, 1.0f); - glVertex3f(-1.0f, -1.0f, 1.0f); - glVertex3f( 1.0f, -1.0f, 1.0f); - - glVertex3f( 1.0f, 1.0f, -1.0f); - glVertex3f( 1.0f, -1.0f, -1.0f); - glVertex3f( -1.0f, 1.0f, -1.0f); - glVertex3f( -1.0f, -1.0f, -1.0f); - glVertex3f( 1.0f, 1.0f, 1.0f); - glVertex3f( 1.0f, -1.0f, 1.0f); - glVertex3f( -1.0f, 1.0f, 1.0f); - glVertex3f( -1.0f, -1.0f, 1.0f); - - glVertex3f( -1.0f, -1.0f, 1.0f); - glVertex3f( -1.0f, -1.0f, -1.0f); - glVertex3f( -1.0f, 1.0f, 1.0f); - glVertex3f( -1.0f, 1.0f, -1.0f); - glVertex3f( 1.0f, -1.0f, 1.0f); - glVertex3f( 1.0f, -1.0f, -1.0f); - glVertex3f( 1.0f, 1.0f, 1.0f); - glVertex3f( 1.0f, 1.0f, -1.0f); - - glEnd(); -} - -void cubelooks::cube::drawAll() -{ - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - - glTranslatef(-1,-1,-1); - - for (int iz=0; izw / Env->layout[0]); - int row = Env->layout[1] - y / ((float)Env->h / Env->layout[1]); - - return col + row*Env->layout[0]; - } - - static void idleFunc() - { - glutPostRedisplay(); - } - - static void motionFunc(int x, int y) - { - cubelooks::env *Env = getEnv(); - - Env->cubes.at(rotcube[0]).az += rotcube[1] - x; - Env->cubes.at(rotcube[0]).alt += rotcube[2] - y; - - rotcube[1] = x; - rotcube[2] = y; - - glutPostRedisplay(); - } - - static void mouseFunc(int button, int state, int x, int y) - { - cubelooks::env *Env = getEnv(); - - if (button == 0) { - rotcube[0] = getCubeFromPos(x,y); - rotcube[1] = x; - rotcube[2] = y; - } - - if (button == 4) { - Env->cubes.at(getCubeFromPos(x,y)).zoom *= 1.1; - glutPostRedisplay(); - } - else if (button == 3) { - Env->cubes.at(getCubeFromPos(x,y)).zoom *= 0.9; - glutPostRedisplay(); - } - } - - static void reshapeFunc(int w, int h) - { - cubelooks::env *Env = getEnv(); - - int neww; - int newh; - - if ( w == Env->w ) { - newh = h; - neww = Env->aspect*h; - } - else if ( h == Env->h ) { - neww = w; - newh = w / Env->aspect; - } - else { - neww = ( pow(Env->aspect,2)*w + Env->aspect*h ) / ( pow(Env->aspect,2) + 1 ); - newh = ( Env->aspect*w + h ) / ( pow(Env->aspect,2) + 1 ); - } - - glutReshapeWindow(neww,newh); - glViewport(0,0,neww,newh); - - Env->w = neww; - Env->h = newh; - } - - static void displayFunc() - { - cubelooks::env *Env = getEnv(); - - glClearColor(0,0,0,0); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glScalef(1.0/Env->layout[0],1.0/Env->layout[1],1.0); - glTranslatef(-Env->layout[0]+1, -Env->layout[1]+1, 0); - - for (int icube=0; icube < Env->cubes.size(); icube++) { - //glScalef(1.0/Env->layout[0],1.0/Env->layout[1],1.0); - //glRotatef(2, 1, 0, 0); - Env->cubes.at(icube).draw(); - if ((icube+1)%Env->layout[0] == 0) { - glTranslatef(-2*Env->layout[0]+2, 2, 0); - } - else { - glTranslatef(2, 0, 0); - } - } - - glutSwapBuffers(); - } - - static void* glutThread(void *_Env) - { - cubelooks::env *Env = (cubelooks::env *)_Env; - - //glXMakeCurrent(0, glutCreateWindow("cubelooks")); - - //glXCrateContext(0, - - //cout << Env->layout[1] << endl; - - glXMakeCurrent( Env->gDisplay, Env->gDrawable, Env->gContext ); - - //cout << "da" << endl; - - glutDisplayFunc(&displayFunc); - glutReshapeFunc(&reshapeFunc); - glutMotionFunc(&motionFunc); - glutMouseFunc(&mouseFunc); - //glutIdleFunc(&idleFunc); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable( GL_BLEND ); - - Envs.push_back( pair(pthread_self(), Env) ); - - glutMainLoop(); - } -}; - -cubelooks::cube::cube(int _l) -{ - l = _l; - link = new float[l*l*l*3 * 4]; - plaq = new float[l*l*l*3 * 4]; - az = 30; - alt = -20; - zoom = 0.6; - id = allid; - allid++; - - for (int i=0; iargc = argc; - Env->argv = argv; - Env->layout[0] = xcubes; - Env->layout[1] = ycubes; - Env->aspect = (double)xcubes/ycubes; - for (int icube=0; icubecubes.push_back(newCube); - } - - if ( !initDone ) { - glutInit( Env->argc, Env->argv ); - glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); - } - - if( Env->layout[0] >= Env->layout[1] ) { - winsize[0] = 640; - winsize[1] = (640.0/Env->layout[0])*Env->layout[1]; - } - else { - winsize[1] = 640; - winsize[0] = (640.0/Env->layout[1])*Env->layout[0]; - } - - Env->w = winsize[0]; - Env->h = winsize[1]; - - glutInitWindowSize(winsize[0], winsize[1]); - glutInitWindowPosition(0,0); - glutCreateWindow("cubelooks"); - - if ( !initDone ) { - gDisplay = glXGetCurrentDisplay(); - gDrawable = glXGetCurrentDrawable(); - initDone = true; - } - - Env->gContext = glXGetCurrentContext(); - Env->gDisplay = gDisplay; - Env->gDrawable = glXGetCurrentDrawable(); - - glXMakeCurrent(0,0,0); - - pthread_create(&glThreadId, 0, &mygl::glutThread, Env); -}