-void
-screenhack (Display *d, Window w)
-{
- Window junk_win,in_win;
-
- int px,py,junk,kb/*,wai*/;
-/* int act,act1,tc;*/
- double vnorm;
- /* double var=0.0; */
- int color=0/*, dir=1*/;
-
- dpy = d;
- win = w;
- initialize();
-
- initColor(r,g,b);
- init_3d();
- zeit=(struct tm *)malloc(sizeof(struct tm));
- init_kugel();
-
- startx=scrnWidth/2;
- starty=scrnHeight/2;
- scrnH2=startx;
- scrnW2=starty;
- vspeed=0;
-
-
- vektorprodukt(x,y,v);
- viewpoint(/*m,v*/);
-
- setink (BlackPixel (dpy, screen));
- XFillRectangle (dpy, win, gc, 0, 0, scrnWidth, scrnHeight);
- XQueryPointer (dpy, win, &junk_win, &junk_win, &junk, &junk,
- &px, &py, &kb);
-
- for (;;)
- { double dtime;
-
- /*--------------- Zeichenteil --------------*/
-
- event_handler();
-
- vektorprodukt(x,y,v);
-
- vnorm=sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
- v[0]=v[0]*norm/vnorm;
- v[1]=v[1]*norm/vnorm;
- v[2]=v[2]*norm/vnorm;
- vnorm=sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);
- x[0]=x[0]*norm/vnorm;
- x[1]=x[1]*norm/vnorm;
- x[2]=x[2]*norm/vnorm;
- vnorm=sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]);
- y[0]=y[0]*norm/vnorm;
- y[1]=y[1]*norm/vnorm;
- y[2]=y[2]*norm/vnorm;
-
- projektion();
- t3d_sort (0,maxk-1);
-
- dtime=gettime();
-
- if(cycl)
- {
- color=(int)(64.0*(dtime/60-floor(dtime/60)))-32;
-
- if(color<0)
- color=-color;
-
- setink(colors[color/3].pixel);
- }
- else
- setink(BlackPixel (dpy, screen));
-
- XFillRectangle(dpy,buffer,gc,0,0,scrnWidth,scrnHeight);
-
- {
- int i;
-
- manipulate(dtime);
-
- for (i=0;i<maxk;i++)
- {
- if (kugeln[i].d>0.0)
- fill_kugel(i,buffer,1);
- }
- }
-
- XSync(dpy,0);
-
- /* manipulate(gettime());
- var+=PI/500;
- if (var>=TWOPI) var=PI/500; */
-
- /*event_handler();*/
-
- if(hsvcycl!=0.0)
- {
- dtime=hsvcycl*dtime/10.0+hue/360.0;
- dtime=360*(dtime-floor(dtime));
-
- hsv2rgb(dtime,sat,val,&r,&g,&b);
- changeColor(r,g,b);
- }
-
- XCopyArea (dpy, buffer, win, gc, 0, 0, scrnWidth, scrnHeight, 0, 0);
-
-
- /*-------------------------------------------------*/
- XSync(dpy,0);
-
- event_handler();
-
- (void)(XQueryPointer (dpy, win, &junk_win, &in_win, &junk, &junk,
- &px, &py, &kb));
-
- if ((px>0)&&(px<scrnWidth)&&(py>0)&&(py<scrnHeight) )
- {
- if ((px !=startx)&&(kb&Button2Mask))
- {
- /* printf("y=(%f,%f,%f)",y[0],y[1],y[2]);*/
- turn(y,x,((double)(px-startx))/(8000*mag));
- /* printf("->(%f,%f,%f)\n",y[0],y[1],y[2]);*/
- }
- if ((py !=starty)&&(kb&Button2Mask))
- {
- /* printf("x=(%f,%f,%f)",x[0],x[1],x[2]);*/
- turn(x,y,((double)(py-starty))/(-8000*mag));
- /* printf("->(%f,%f,%f)\n",x[0],x[1],x[2]);*/
- }
- if ((kb&Button1Mask))
- {
- if (vturn==0.0) vturn=.005; else if (vturn<2) vturn+=.01;
- turn(x,v,.002*vturn);
- turn(y,v,.002*vturn);
- }
- if ((kb&Button3Mask))
- {
- if (vturn==0.0) vturn=.005; else if (vturn<2) vturn+=.01;
- turn(x,v,-.002*vturn);
- turn(y,v,-.002*vturn);
- }
- }
- if (!(kb&Button1Mask)&&!(kb&Button3Mask))
- vturn=0;
-
- speed=speed+speed*vspeed;
- if ((speed<0.0000001) &&(vspeed>0.000001)) speed=0.000001;
- vspeed=.1*vspeed;
- if (speed>0.01) speed=.01;
- a[0]=a[0]+speed*v[0];
- a[1]=a[1]+speed*v[1];
- a[2]=a[2]+speed*v[2];
- }
-}