Beispiel #1
0
/* update blots, adjusting the offsets and rotation factors. */
static void updateWithFeeling (struct nerverotstate *st)
{
    int n, i, j;

    /* pick a new model if the time is right */
    st->itersTillNext--;

    if ((st->please_num!=-1)&&(st->cur_num!=st->please_num))
    {
	commandBlots (st);
	setupSegs (st);
    	renderSegs (st);
    }
    if (st->itersTillNext < 0)
    {
	st->itersTillNext = RAND_FLOAT_01 * st->maxIters;
	randomBlots (st);
	setupSegs (st);
	renderSegs (st);
    }

    /* update the rotation factors by moving them a bit toward the targets */
    st->xRot = st->xRot + (st->xRotTarget - st->xRot) * st->iterAmt; 
    st->yRot = st->yRot + (st->yRotTarget - st->yRot) * st->iterAmt;
    st->zRot = st->zRot + (st->zRotTarget - st->zRot) * st->iterAmt;

    /* similarly the scale factor */
    st->curScale = st->curScale + (st->scaleTarget - st->curScale) * st->iterAmt;

    /* and similarly the light position */
    st->lightX = st->lightX + (st->lightXTarget - st->lightX) * st->iterAmt; 
    st->lightY = st->lightY + (st->lightYTarget - st->lightY) * st->iterAmt; 
    st->lightZ = st->lightZ + (st->lightZTarget - st->lightZ) * st->iterAmt; 

    /* for each blot... */
    for (n = 0; n < st->blotCount; n++)
    {
	/* add a bit of random jitter to xoff/yoff */
	for (i = 0; i < 3; i++)
	{
	    for (j = 0; j < 3; j++)
	    {
		FLOAT newOff;

		newOff = st->blots[n].xoff[i][j] + RAND_FLOAT_PM1 * st->nervousness;
		if (newOff < -1) newOff = -(newOff + 1) - 1;
		else if (newOff > 1) newOff = -(newOff - 1) + 1;
		st->blots[n].xoff[i][j] = newOff;

		newOff = st->blots[n].yoff[i][j] + RAND_FLOAT_PM1 * st->nervousness;
		if (newOff < -1) newOff = -(newOff + 1) - 1;
		else if (newOff > 1) newOff = -(newOff - 1) + 1;
		st->blots[n].yoff[i][j] = newOff;
	    }
	}
    }

#include "factors"
}
Beispiel #2
0
/* set up the system */
static void setup (struct state *st)
{
    XWindowAttributes xgwa;

    XGetWindowAttributes (st->dpy, st->window, &xgwa);

    st->windowWidth = xgwa.width;
    st->windowHeight = xgwa.height;
    st->centerX = st->windowWidth / 2;
    st->centerY = st->windowHeight / 2;
    st->baseScale = (xgwa.height < xgwa.width) ? xgwa.height : xgwa.width;

    if (st->doubleBuffer)
    {
	st->drawable = XCreatePixmap (st->dpy, st->window, xgwa.width, xgwa.height,
				  xgwa.depth);
    }
    else
    {
	st->drawable = st->window;
    }

    setupColormap (st, &xgwa);
    setupBlots (st);
    setupSegs (st);

    /* set up the initial rotation, scale, and light values as random, but
     * with the targets equal to where it is */
    st->xRot = st->xRotTarget = RAND_FLOAT_01 * M_PI;
    st->yRot = st->yRotTarget = RAND_FLOAT_01 * M_PI;
    st->zRot = st->zRotTarget = RAND_FLOAT_01 * M_PI;
    st->curScale = st->scaleTarget = RAND_FLOAT_01 * (st->maxScale - st->minScale) + st->minScale;
    st->lightX = st->lightXTarget = RAND_FLOAT_PM1;
    st->lightY = st->lightYTarget = RAND_FLOAT_PM1;
    st->lightZ = st->lightZTarget = RAND_FLOAT_PM1;

    st->itersTillNext = RAND_FLOAT_01 * st->maxIters;
}
Beispiel #3
0
/* set up the system */
static void setup (struct nerverotstate *st,int w,int h)
{
    st->colorCount = 2000;
    st->windowWidth = w;
    st->windowHeight = h;
    st->centerX = st->windowWidth / 2;
    st->centerY = st->windowHeight / 2;
    st->baseScale = (st->windowHeight < st->windowWidth) ? st->windowHeight : st->windowWidth;
/*    setupColormap (st, &xgwa);*/
    randomBlots (st);
    setupSegs (st);

    /* set up the initial rotation, scale, and light values as random, but
     * with the targets equal to where it is */
    st->xRot = st->xRotTarget = RAND_FLOAT_01 * M_PI;
    st->yRot = st->yRotTarget = RAND_FLOAT_01 * M_PI;
    st->zRot = st->zRotTarget = RAND_FLOAT_01 * M_PI;
    st->curScale = st->scaleTarget = RAND_FLOAT_01 * (st->maxScale - st->minScale) + st->minScale;
    st->lightX = st->lightXTarget = RAND_FLOAT_PM1;
    st->lightY = st->lightYTarget = RAND_FLOAT_PM1;
    st->lightZ = st->lightZTarget = RAND_FLOAT_PM1;

    st->itersTillNext = RAND_FLOAT_01 * st->maxIters;
}
Beispiel #4
0
/* update blots, adjusting the offsets and rotation factors. */
static void updateWithFeeling (struct state *st)
{
    int n, i, j;

    /* pick a new model if the time is right */
    st->itersTillNext--;
    if (st->itersTillNext < 0)
    {
	st->itersTillNext = RAND_FLOAT_01 * st->maxIters;
	setupBlots (st);
	setupSegs (st);
	renderSegs (st);
    }

    /* update the rotation factors by moving them a bit toward the targets */
    st->xRot = st->xRot + (st->xRotTarget - st->xRot) * st->iterAmt; 
    st->yRot = st->yRot + (st->yRotTarget - st->yRot) * st->iterAmt;
    st->zRot = st->zRot + (st->zRotTarget - st->zRot) * st->iterAmt;

    /* similarly the scale factor */
    st->curScale = st->curScale + (st->scaleTarget - st->curScale) * st->iterAmt;

    /* and similarly the light position */
    st->lightX = st->lightX + (st->lightXTarget - st->lightX) * st->iterAmt; 
    st->lightY = st->lightY + (st->lightYTarget - st->lightY) * st->iterAmt; 
    st->lightZ = st->lightZ + (st->lightZTarget - st->lightZ) * st->iterAmt; 

    /* for each blot... */
    for (n = 0; n < st->blotCount; n++)
    {
	/* add a bit of random jitter to xoff/yoff */
	for (i = 0; i < 3; i++)
	{
	    for (j = 0; j < 3; j++)
	    {
		FLOAT newOff;

		newOff = st->blots[n].xoff[i][j] + RAND_FLOAT_PM1 * st->nervousness;
		if (newOff < -1) newOff = -(newOff + 1) - 1;
		else if (newOff > 1) newOff = -(newOff - 1) + 1;
		st->blots[n].xoff[i][j] = newOff;

		newOff = st->blots[n].yoff[i][j] + RAND_FLOAT_PM1 * st->nervousness;
		if (newOff < -1) newOff = -(newOff + 1) - 1;
		else if (newOff > 1) newOff = -(newOff - 1) + 1;
		st->blots[n].yoff[i][j] = newOff;
	    }
	}
    }

    /* depending on random chance, update one or more factors */
    if (RAND_FLOAT_01 <= st->eventChance)
    {
	int which = RAND_FLOAT_01 * 14;
	switch (which)
	{
	    case 0:
	    {
		st->xRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		break;
	    }
	    case 1:
	    {
		st->yRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		break;
	    }
	    case 2:
	    {
		st->zRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		break;
	    }
	    case 3:
	    {
		st->xRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		st->yRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		break;
	    }
	    case 4:
	    {
		st->xRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		st->zRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		break;
	    }
	    case 5:
	    {
		st->yRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		st->zRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		break;
	    }
	    case 6:
	    {
		st->xRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		st->yRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		st->zRotTarget = RAND_FLOAT_PM1 * M_PI * 2;
		break;
	    }
	    case 7:
	    {
		st->centerXOff = RAND_FLOAT_PM1 * st->maxRadius;
		break;
	    }
	    case 8:
	    {
		st->centerYOff = RAND_FLOAT_PM1 * st->maxRadius;
		break;
	    }
	    case 9:
	    {
		st->centerXOff = RAND_FLOAT_PM1 * st->maxRadius;
		st->centerYOff = RAND_FLOAT_PM1 * st->maxRadius;
		break;
	    }
	    case 10:
	    {
		st->scaleTarget = 
		    RAND_FLOAT_01 * (st->maxScale - st->minScale) + st->minScale;
		break;
	    }
	    case 11:
	    {
		st->curScale = 
		    RAND_FLOAT_01 * (st->maxScale - st->minScale) + st->minScale;
		break;
	    }
	    case 12:
	    {
		st->lightX = RAND_FLOAT_PM1;
		st->lightY = RAND_FLOAT_PM1;
		st->lightZ = RAND_FLOAT_PM1;
		break;
	    }
	    case 13:
	    {
		st->lightXTarget = RAND_FLOAT_PM1;
		st->lightYTarget = RAND_FLOAT_PM1;
		st->lightZTarget = RAND_FLOAT_PM1;
		break;
	    }
	}
    }
}