Function:ds2vbb

From S2PLOT

(Difference between revisions)
Jump to: navigation, search
Revision as of 23:11, 28 October 2007
S2plot admin (Talk | contribs)

← Previous diff
Revision as of 06:16, 6 March 2008
S2plot admin (Talk | contribs)

Next diff →
Line 39: Line 39:
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
 +#include <time.h>
#include "s2plot.h" #include "s2plot.h"
Line 45: Line 46:
void cb(double *t, int *kc) void cb(double *t, int *kc)
{ {
- XYZ xyz = {0.0, 0.3, 0.4}; /* Location */+ XYZ xyz = {0.0, 0.3, 0.4}; /* Location */
- float isize = 0.02; /* Texture scale */+ float isize = 0.02; /* Texture scale */
- XYZ str = { 0.0, 0.0, 0.0}; /* No stretch */+ XYZ str = { 0.0, 0.0, 0.0}; /* No stretch */
- COLOUR col = { 1.0, 1.0, 0.0 }; /* Yellow */+ COLOUR col = { 1.0, 1.0, 0.0 }; /* Yellow */
- float alpha = 0.9; /* Alpha channel */+ float alpha = 0.9; /* Alpha channel */
- char trans = 's'; /* Transparency */+ char trans = 's'; /* Transparency */
- + 
- ds2vbb(xyz, str, isize, col, tid, alpha, trans); /* Draw the billboard */+ ds2vbb(xyz, str, isize, col, tid, alpha, trans); /* Draw the billboard */
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
- int width = 16, height = 16; /* Dimensions of texture */+ int width = 16, height = 16; /* Dimensions of texture */
- int i, j; /* Loop variables */+ int i, j; /* Loop variables */
- int idx; /* Index into texture array */+ int idx; /* Index into texture array */
- char *tex; /* Array of texture values */+ char *tex; /* Array of texture values */
- s2opend("/?",argc,argv); /* Open the display */+ srand48((long)time(NULL)); /* Seed random numbers */
- s2svp(-1.0,1.0, -1.0,1.0, -1.0,1.0); /* Set the viewport coords */+ s2opend("/?",argc,argv); /* Open the display */
- s2swin(-1.0,1.0, -1.0,1.0, -1.0,1.0); /* Set the window coordinates */+ s2svp(-1.0,1.0, -1.0,1.0, -1.0,1.0); /* Set the viewport coords */
- s2box("BCDE",0,0,"BCDE",0,0,"BCDE",0,0); /* Draw a bounding box */+ s2swin(-1.0,1.0, -1.0,1.0, -1.0,1.0); /* Set the window coordinates */
 + s2box("BCDE",0,0,"BCDE",0,0,"BCDE",0,0); /* Draw a bounding box */
- tid = ss2ct(width, height); /* Create a new texture */+ tid = ss2ct(width, height); /* Create a new texture */
- tex = ss2gt(tid, &width, &height); /* Get the texture */+ tex = ss2gt(tid, &width, &height); /* Get the texture */
for (j=0;j<height;j++) { for (j=0;j<height;j++) {
for (i=0;i<width;i++) { for (i=0;i<width;i++) {
- idx = (j*width + i) * 4; /* Stored as (r,g,b,alpha) */+ idx = (j*width + i) * 4; /* Stored as (r,g,b,alpha) */
- tex[idx ] = 127*drand48()+128; /* Randomish red */+ tex[idx ] = 127*drand48()+128; /* Randomish red */
- tex[idx+1] = 0; /* Green */+ tex[idx+1] = 0; /* Green */
- tex[idx+2] = 0; /* Blue */+ tex[idx+2] = 0; /* Blue */
- /* Do nothing to alpha */+ /* Do nothing to alpha */
} }
} }
- ss2pt(tid); /* Push texture for usage */+ ss2pt(tid); /* Push texture for usage */
- cs2scb(&cb); /* Install a callback */+ cs2scb(&cb); /* Install a callback */
- s2show(1); /* Open the s2plot window */+ s2show(1); /* Open the s2plot window */
return 1; return 1;

Revision as of 06:16, 6 March 2008

ds2vbb

Draw a (dynamic) billboard: a textured facet that always faces the camera - vector input

Prototype

void ds2vbb(XYZ iP, XYZ iStretch, float isize, COLOUR iC, unsigned int itextid, float alpha, char trans);

Description

Draw a (dynamic) billboard using vector inputs. This is a textured facet (4 vertex) that sits at a given location and always faces the camera. By using small, rotationally symmetric texture maps, the appearance of soft, 3d objects can be produced at low frame-rate cost. This function should only be called from a dynamic callback: billboards cannot be cached static geometry as they typically change with every refresh.

The billboard texture is at coordinates iP, and can be stretched towards the coordinates given by iStretch (for no stretching, set these coordinates to 0.0). The overall scale of the billboard texture is controlled by isize.

The RGB texture colour is specified by iC, and the texture to use is identified by itextid.

Transparency is controlled by the alpha channel, with value in the range [0,1] and trans:

  • trans = 'o' opaque;
  • trans = 't' transparent; and
  • trans = 's' transparency + absorption.


See Also

ds2bb Draw a (dynamic) billboard: a textured facet that always faces the camera
ds2tb Draw text that always faces the camera
ds2vtb Draw text that always faces the camera - vector input
ss2lt Load a texture for future (generally repeated) use.
ss2ct Create a texture with specified width and height
struct_COLOUR Data structure for (r,g,b) colour indices.
struct_XYZ Data structure for (x,y,z) coordinates.


Code Example

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "s2plot.h"

unsigned int tid;

void cb(double *t, int *kc)
{
   XYZ xyz = {0.0, 0.3, 0.4};                           /* Location */
   float isize = 0.02;                                  /* Texture scale */
   XYZ str = { 0.0, 0.0, 0.0};                          /* No stretch */
   COLOUR col = { 1.0, 1.0, 0.0 };                      /* Yellow */
   float alpha = 0.9;                                   /* Alpha channel */
   char trans = 's';                                    /* Transparency */

   ds2vbb(xyz, str, isize, col, tid, alpha, trans);     /* Draw the billboard */
}

int main(int argc, char *argv[])
{
   int width = 16, height = 16;         /* Dimensions of texture */
   int i, j;                            /* Loop variables */
   int idx;                             /* Index into texture array */
   char *tex;                           /* Array of texture values */

   srand48((long)time(NULL));                   /* Seed random numbers */
   s2opend("/?",argc,argv);                     /* Open the display */
   s2svp(-1.0,1.0, -1.0,1.0, -1.0,1.0);         /* Set the viewport coords */
   s2swin(-1.0,1.0, -1.0,1.0, -1.0,1.0);        /* Set the window coordinates */
   s2box("BCDE",0,0,"BCDE",0,0,"BCDE",0,0);     /* Draw a bounding box */

   tid = ss2ct(width, height);          /* Create a new texture */
   tex = ss2gt(tid, &width, &height);   /* Get the texture */

   for (j=0;j<height;j++) {
      for (i=0;i<width;i++) {
         idx = (j*width + i) * 4;               /* Stored as (r,g,b,alpha) */
         tex[idx  ] = 127*drand48()+128;        /* Randomish red */
         tex[idx+1] = 0;                        /* Green */
         tex[idx+2] = 0;                        /* Blue */
                                                /* Do nothing to alpha */
      }
   }
   ss2pt(tid);                          /* Push texture for usage */

   cs2scb(&cb);                         /* Install a callback */

   s2show(1);                           /* Open the s2plot window */

   return 1;
}

Back to S2PLOT function list.


Personal tools