]> git.treefish.org Git - phys/latlib.git/commitdiff
...
authorAlex Schmidt <alex@treefish.org>
Wed, 20 Feb 2013 13:19:55 +0000 (14:19 +0100)
committerAlex Schmidt <alex@treefish.org>
Wed, 20 Feb 2013 13:19:55 +0000 (14:19 +0100)
culooks.cpp
culooks.h
culooks_cube.cpp
culooks_drawing.cpp

index a1f386f601f3887d8e486e5339bead399ea7d066..647f7be319933287ad89ffff3c6806ab60333257 100644 (file)
@@ -7,6 +7,7 @@
 
 vector< pair<int,culooks::window*> > culooks::Windows;
 pthread_t culooks::glThreadId;
+culooks::comarg culooks::comArg;
 
 int culooks::windowid = 0;
 
@@ -42,14 +43,12 @@ culooks::culooks (const char* name, const int& xcubes, const int& ycubes, const
   Win->initialized = false;
 
   Windows.push_back( pair<int,culooks::window*>(0, Win) );
-  
+
   if (windowid == 0) {
-    comarg comArg;
     comArg.argc = argc;
     comArg.argv = argv;
     pthread_create(&glThreadId, 0, &drawing::glutThread, &comArg);
   }
-
   mywid = windowid;
   windowid++;
 }
@@ -99,3 +98,9 @@ void culooks::setBgColor(const float& red, const float& green, const float& blue
   Windows[mywid].second->bgcolor[2] = blue;
   Windows[mywid].second->bgcolor[3] = alpha;
 }
+
+void culooks::setWireColor(const float& r, const float& g, const float& b, const float& a)
+{
+  for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++)
+    Windows[mywid].second->cubes[icube].setWireColor(r, g, b, a);
+}
index fe6ca11df6520cf0d5552eddd83d16c2baf92ca6..3e47fde760efebd481615916b40a51a79408749e 100644 (file)
--- a/culooks.h
+++ b/culooks.h
@@ -27,6 +27,7 @@ class culooks
   void hideLinks(const int& cubeid);
   void hideLinks();
   void setBgColor(const float& red, const float& green, const float& blue, const float& alpha);
+  void setWireColor(const float& r, const float& g, const float& b, const float& a);
 
  private:
 
@@ -34,6 +35,8 @@ class culooks
     int *argc;
     char **argv;
   };
+
+  static comarg comArg;
   
   class cube {
   public:
@@ -41,6 +44,7 @@ class culooks
     void draw();
     int id;
     float az, alt;
+    float azRotSpeed;
     float zoom;
     void setLink (const int& posdir, 
                  const float& red, const float& green, const float& blue, const float& alpha);
@@ -50,7 +54,9 @@ class culooks
     void swapPlaqBuffer();
     void hidePlaqs();
     void hideLinks();
+    void setWireColor(const float& r, const float& g, const float& b, const float& a);
   private:
+    float wireColor[4];
     void drawAll();
     void drawBox();
     static void drawFrame();
@@ -62,6 +68,8 @@ class culooks
     int plaqbuf_active;
     int linkbuf_active;
     static int allid;
+    bool hideplaquettes;
+    bool hidelinks;
   };
   
   struct window {
index a1d0744e47a606f648eaae409f2b5e8f1e85e9fb..2bf8804cd07202e2674d7b9097fe00badf5d5dcc 100644 (file)
@@ -2,6 +2,13 @@
 
 #include <GL/glut.h>
 
+#include <iostream>
+#include <cmath>
+
+using namespace std;
+
+using namespace std;
+
 int culooks::cube::allid = 0;
 
 void culooks::cube::setLink (const int& posdir,
@@ -22,24 +29,12 @@ void culooks::cube::setPlaq (const int& posdir,
 
 void culooks::cube::hidePlaqs()
 {
-  for (int ibuf=0; ibuf<2; ibuf++)
-    for (int i=0; i<l*l*l*3; i++) {
-      plaqbuf[ibuf][i*4+0]=0; 
-      plaqbuf[ibuf][i*4+1]=0;
-      plaqbuf[ibuf][i*4+2]=0; 
-      plaqbuf[ibuf][i*4+3]=0;
-    }
+  hideplaquettes = true;
 }
 
 void culooks::cube::hideLinks()
 {
-  for (int ibuf=0; ibuf<2; ibuf++)
-    for (int i=0; i<l*l*l*3; i++) {
-      linkbuf[ibuf][i*4+0]=0; 
-      linkbuf[ibuf][i*4+1]=0;
-      linkbuf[ibuf][i*4+2]=0; 
-      linkbuf[ibuf][i*4+3]=0;
-    }
+  hidelinks = true;
 }
 
 void culooks::cube::swapLinkBuffer()
@@ -58,20 +53,29 @@ void culooks::cube::draw()
 {
   glMatrixMode(GL_MODELVIEW);
 
+  /* draw frame */
+  glEnable(GL_DEPTH_TEST);
+  glDepthMask(GL_TRUE);
+  glDisable(GL_BLEND);
   glPushMatrix();
-  glScalef(zoom, zoom, zoom);
+  glScalef(zoom*1.01, zoom*1.01, zoom*1.01);
   glRotatef(az, 0, 1, 0);
   glRotatef(alt, 1, 0, 0);
-  drawAll();
+  glColor4f(wireColor[0], wireColor[1], wireColor[2], wireColor[3]);
+  glutWireCube(2);
   glPopMatrix();
 
-  /* draw frame */
+  glEnable(GL_DEPTH_TEST);
+  glDepthMask(GL_FALSE);
+  glEnable(GL_BLEND);
   glPushMatrix();
-  glScalef(zoom*1.01, zoom*1.01, zoom*1.01);
+  glScalef(zoom, zoom, zoom);
   glRotatef(az, 0, 1, 0);
   glRotatef(alt, 1, 0, 0);
-  drawFrame();
+  drawAll();
   glPopMatrix();
+
+  glDepthMask(GL_TRUE);
 }
 
 void culooks::cube::drawAll()
@@ -89,43 +93,46 @@ void culooks::cube::drawAll()
        glScalef(2.0/l,2.0/l,2.0/l);
 
        /* draw links */
-       glBegin(GL_LINES);
-       glColor4f(link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 0],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 1],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 2],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 3]);
-       glVertex3f(0,0,0); glVertex3f(1,0,0);
-       glColor4f(link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 0],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 1],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 2],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 3]);
-       glVertex3f(0,0,0); glVertex3f(0,1,0);
-       glColor4f(link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 0],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 1],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 2],
-                 link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 3]);
-       glVertex3f(0,0,0); glVertex3f(0,0,1);
-       glEnd();
+       if (!hidelinks) {
+         glBegin(GL_LINES);
+         glColor4f(link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 0],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 1],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 2],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 3]);
+         glVertex3f(0,0,0); glVertex3f(1,0,0);
+         glColor4f(link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 0],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 1],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 2],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 3]);
+         glVertex3f(0,0,0); glVertex3f(0,1,0);
+         glColor4f(link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 0],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 1],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 2],
+                   link[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 3]);
+         glVertex3f(0,0,0); glVertex3f(0,0,1);
+         glEnd();
+       }
 
        /* draw plaquettes */
-       glColor4f(1,1,1,0.5);
-       glBegin(GL_QUADS);
-       glColor4f(plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 0],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 1],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 2],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 3]);
-       glVertex3f(0, 0, 0); glVertex3f(1, 0, 0); glVertex3f(1, 1, 0); glVertex3f(0, 1, 0);
-       glColor4f(plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 0],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 1],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 2],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 3]);
-       glVertex3f(0, 0, 0); glVertex3f(1, 0, 0); glVertex3f(1, 0, 1); glVertex3f(0, 0, 1);
-       glColor4f(plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 0],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 1],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 2],
-                 plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 3]);
-       glVertex3f(0, 0, 0); glVertex3f(0, 1, 0); glVertex3f(0, 1, 1); glVertex3f(0, 0, 1);
-       glEnd();
+       if (!hideplaquettes) {
+         glBegin(GL_QUADS);
+         glColor4f(plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 0],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 1],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 2],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 2*4 + 3]);
+         glVertex3f(0, 0, 0); glVertex3f(1, 0, 0); glVertex3f(1, 1, 0); glVertex3f(0, 1, 0);
+         glColor4f(plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 0],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 1],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 2],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 1*4 + 3]);
+         glVertex3f(0, 0, 0); glVertex3f(1, 0, 0); glVertex3f(1, 0, 1); glVertex3f(0, 0, 1);
+         glColor4f(plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 0],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 1],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 2],
+                   plaq[iz*l*l*3*4 + iy*l*3*4 + ix*3*4 + 0*4 + 3]);
+         glVertex3f(0, 0, 0); glVertex3f(0, 1, 0); glVertex3f(0, 1, 1); glVertex3f(0, 0, 1);
+         glEnd();
+       }
 
        glPopMatrix();
       }
@@ -137,6 +144,8 @@ void culooks::cube::drawAll()
 
 culooks::cube::cube(int _l)
 {
+  azRotSpeed = 0;
+
   l = _l;
   plaqbuf[0] = new float[l*l*l*3 * 4];
   plaqbuf[1] = new float[l*l*l*3 * 4];
@@ -159,40 +168,15 @@ culooks::cube::cube(int _l)
       linkbuf[ibuf][i*4+0]=1; linkbuf[ibuf][i*4+3]=0.6;
       plaqbuf[ibuf][i*4+1]=1; plaqbuf[ibuf][i*4+3]=0.2;
     }
+  
+  hideplaquettes = 0;
+  hidelinks = 0;
 }
 
-void culooks::cube::drawFrame()
+void culooks::cube::setWireColor(const float& r, const float& g, const float& b, const float& a)
 {
-  glBegin(GL_LINES);
-
-  glColor4f(0, 0, 0, 1);
-
-  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();
+  wireColor[0] = r;
+  wireColor[1] = g;
+  wireColor[2] = b;
+  wireColor[3] = a;
 }
index 61dc30a59ab6224617f1434f070c0f339448d428..65c7644f61671f500750e18b2a9fa730989b9d1e 100644 (file)
@@ -93,7 +93,7 @@ void culooks::drawing::reshapeFunc(int w, int h)
 void culooks::drawing::displayFunc()
 {
   culooks::window *Win = getWin();
-   
+
   glClearColor(Win->bgcolor[0], Win->bgcolor[1], Win->bgcolor[2], Win->bgcolor[3]);
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     
@@ -119,13 +119,13 @@ void culooks::drawing::displayFunc()
 void culooks::drawing::initWindow(int winid)
 {
   
-  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
+  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
   glutInitWindowSize(culooks::Windows[winid].second->w, culooks::Windows[winid].second->h);
   glutInitWindowPosition(winid*100,winid*100);
   glutCreateWindow( ("culooks / " + culooks::Windows[winid].second->name).c_str() );
 
   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-  glEnable(GL_BLEND);
+
   glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);      
   glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);     
   glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
@@ -161,7 +161,6 @@ void culooks::drawing::idleFunc()
 void* culooks::drawing::glutThread(void *_comArg)
 {
   comarg *comArg = (comarg*)_comArg;
-
   glutInit(comArg->argc, comArg->argv);
   initWindow(0);
   glutMainLoop();