(no subject)

New Message Reply Date view Thread view Subject view Author view

Braun, Tom (tom.braun++at++lmco.com)
Wed, 18 Aug 1999 10:21:14 -0400


Hello all,
  This is a follow up to a previous posting that I had concerning what the
best way was to animate textures on a polygon. I think that I very nearly
have a successfully working animated texture series thanks to sample code
for OceanBump in Witches Brew. Currently, I can see a white polygon that I
defined with PFGS_COORD3, however, there isn't a succession of textures on
it as I expected. I have attempted numerous fixes but, as a novice to
Performer, I think that there is something simple that I don't know about
that I need to perform. Maybe someone can point out the simple mistake that
I am making.

Thanks in advance for the help.

Here is a snippet of the code:

// Update the Texture coordinate info for ceiling bump mapping
void UpdateWaveState(void)
{
  gstate->setAttr(PFSTATE_TEXTURE, TiTex[frame_count]);
  frame_count ++;
  if(frame_count >= NUM_FRAMES)
    frame_count = 0;
}

pfNode *MakeWaveState(void)
{
  int i, j;

    // Set up geoset
    int *lengths = (int *) new(NUM_PRIMS*sizeof(int)) pfMemory;

    pfTexEnv *tev = new pfTexEnv;
    tev->setMode(PFTE_MODULATE);
    tev->apply();
    frame_count = 0;

    for(i=0; i<NUM_FRAMES; i++)
    {
      char fname[80];
      TiTex[i] = new pfTexture;
      TiTex[i]->setFilter(PFTEX_MINFILTER, PFTEX_MIPMAP_TRILINEAR);
      TiTex[i]->setFilter(PFTEX_MAGFILTER, PFTEX_BILINEAR);
      TiTex[i]->setRepeat(PFTEX_WRAP_S, PFTEX_REPEAT);
      TiTex[i]->setRepeat(PFTEX_WRAP_T, PFTEX_REPEAT);
      if(i < 10)
        sprintf(fname, "Animations/Wave0%1d.bw", i);
      else
        sprintf(fname, "Animations/Wave%2d.bw", i);
      TiTex[i]->loadFile(fname);
      TiTex[i]->setFilter(PFTEX_MAGFILTER, PFTEX_BILINEAR);
      cout << "LOADING ANIMATION FILE : " << fname << endl;
    }

    gstate = new pfGeoState;
    gstate->setAttr(PFSTATE_TEXTURE, TiTex[frame_count]);
    gstate->setMode(PFSTATE_TRANSPARENCY, PFTR_OFF);
    gstate->setMode(PFSTATE_ENTEXTURE, PF_ON);
    gstate->setMode(PFSTATE_ENLIGHTING,0);
    gstate->setMode(PFSTATE_CULLFACE,PFCF_OFF);
    gstate->setAttr(PFSTATE_TEXENV, tev);

    pfGeode *geode = new pfGeode;
     
    pfVec3 *coords3 = (pfVec3*) new(4*sizeof(pfVec3) ) pfMemory;
    pfVec2 *Tcoords = (pfVec2*) new(4*sizeof(pfVec2), pfGetSharedArena())
pfMemory; // TB changed from 8 to 4

    coords3[0].set( -30.0f, -30.0f, 0.0f); // box verticies for text
    coords3[1].set( -30.0f, 30.0f, 0.0f );
    coords3[2].set( 30.0f, 30.0f, 0.0f );
    coords3[3].set( 30.0f, -30.0f, 0.0f );
    Tcoords[0].set( 0.0f, 0.0f);
    Tcoords[1].set( 0.0f, 1.0f);
    Tcoords[2].set( 1.0f, 1.0f);
    Tcoords[3].set( 1.0f, 0.0f);
     

    pfGeoSet *gset = new pfGeoSet;
    gset->setAttr(PFGS_COORD3, PFGS_PER_VERTEX, coords3, 0);
    gset->setAttr(PFGS_TEXCOORD2, PFGS_PER_VERTEX, Tcoords, 0);
    gset->setPrimLengths(lengths);
    gset->setPrimType(PFGS_QUADS);
    gset->setNumPrims(NUM_PRIMS);
    gset->setGState(gstate);
    /* Draw textured gset */
    gset->draw();

    geode->addGSet(gset);
    geode->setTravFuncs(PFTRAV_DRAW, PreDrawPass, PostDrawPass);

    pfGroup *group = new pfGroup;
    group->addChild(geode);

    return (pfNode *) group;
}

static int PreDrawPass(pfTraverser *, void *)
{
  pfDisable(PFEN_TEXTURE);
  pfOverride(PFSTATE_ENTEXTURE, PF_ON);

  return PFTRAV_CONT;
}

static int PostDrawPass(pfTraverser *, void *)
{
  pfOverride(PFSTATE_ENTEXTURE, PF_OFF);
  pfEnable(PFEN_TEXTURE);

  return PFTRAV_CONT;
}


New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Wed Aug 18 1999 - 11:25:41 PDT

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.