Function:ds2bb
From S2PLOT
Revision as of 23:11, 28 October 2007 S2plot admin (Talk | contribs) ← Previous diff |
Current revision S2plot admin (Talk | contribs) |
||
Line 28: | Line 28: | ||
<table> | <table> | ||
<tr><td>[[Function:ds2vbb | ds2vbb ]]</td><td>Draw a (dynamic) billboard: a textured facet that always faces the camera - vector input </td></tr> | <tr><td>[[Function:ds2vbb | ds2vbb ]]</td><td>Draw a (dynamic) billboard: a textured facet that always faces the camera - vector input </td></tr> | ||
+ | <tr><td>[[Function:ds2vbbr | ds2vbbr ]]</td><td>Draw a (dynamic) billboard texture with specified rotation.</td></tr> | ||
<tr><td>[[Function:ds2tb | ds2tb ]]</td><td>Draw text that always faces the camera </td></tr> | <tr><td>[[Function:ds2tb | ds2tb ]]</td><td>Draw text that always faces the camera </td></tr> | ||
<tr><td>[[Function:ds2vtb | ds2vtb ]]</td><td>Draw text that always faces the camera - vector input </td></tr> | <tr><td>[[Function:ds2vtb | ds2vtb ]]</td><td>Draw text that always faces the camera - vector input </td></tr> | ||
+ | <tr><td>[[Function:ds2vbbp | ds2vbbp ]]</td><td>Draw a billboard with aspect ratio - vector input. </td></tr> | ||
+ | <tr><td>[[Function:ds2vbbpr | ds2vbbpr]]</td><td>Billboard with aspect ratio, offset in screen coords, and rotation of texture - vector input.</td></tr> | ||
+ | <tr><td>[[Function:ds2bbset | ds2bbset ]]</td><td>Draw a set of billboards. </td></tr> | ||
<tr><td>[[Function:ss2lt | ss2lt ]]</td><td>Load a texture for future (generally repeated) use. </td></tr> | <tr><td>[[Function:ss2lt | ss2lt ]]</td><td>Load a texture for future (generally repeated) use. </td></tr> | ||
<tr><td>[[Function:ss2ct | ss2ct ]]</td><td>Create a texture with specified width and height </td></tr> | <tr><td>[[Function:ss2ct | ss2ct ]]</td><td>Create a texture with specified width and height </td></tr> | ||
Line 39: | Line 43: | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
+ | #include <time.h> | ||
#include "s2plot.h" | #include "s2plot.h" | ||
Line 45: | Line 50: | ||
void cb(double *t, int *kc) | void cb(double *t, int *kc) | ||
{ | { | ||
- | float x = 0.0, y = 0.3, z = 0.4; /* Location */ | + | float x = 0.0, y = 0.3, z = 0.4; /* Location */ |
- | float isize = 0.02; /* Texture scale */ | + | float isize = 0.02; /* Texture scale */ |
- | float str_x = 0.0, str_y = 0.0, str_z = 0.0; /* No stretch */ | + | float str_x = 0.0, str_y = 0.0, str_z = 0.0; /* No stretch */ |
- | float r = 1.0, g = 1.0, b = 0.0; /* Yellow */ | + | float r = 1.0, g = 1.0, b = 0.0; /* Yellow */ |
- | float alpha = 0.9; /* Alpha channel */ | + | float alpha = 0.9; /* Alpha channel */ |
- | char trans = 's'; /* Transparency */ | + | char trans = 's'; /* Transparency */ |
- | + | ||
ds2bb(x,y,z, str_x,str_y,str_z, isize, r,g,b, tid, alpha, trans); | ds2bb(x,y,z, str_x,str_y,str_z, isize, r,g,b, tid, alpha, trans); | ||
- | /* Draw the billboard */ | + | /* 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 */ | + | |
- | 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 */ | + | s2opend("/?",argc,argv); /* Open the display */ |
- | tex = ss2gt(tid, &width, &height); /* Get the texture */ | + | 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 (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; | ||
} | } | ||
+ | |||
</pre></code> | </pre></code> | ||
[[S2PLOT:Function List | Back]] to S2PLOT function list. | [[S2PLOT:Function List | Back]] to S2PLOT function list. | ||
__NOTOC__ | __NOTOC__ | ||
__NOEDITSECTION__ | __NOEDITSECTION__ |
Current revision
ds2bb
Draw a (dynamic) billboard: a textured facet that always faces the camera
Prototype
void ds2bb(float x, float y, float z, float str_x, float str_y, float str_z, float isize,
float r, float g, float b, unsigned int itextid, float alpha, char trans);
Description
Draw a (dynamic) billboard. 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 (x,y,z), and can be stretched towards the coordinates (str_x, str_y, str_z) (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 parameters (r, g, b), 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
ds2vbb | Draw a (dynamic) billboard: a textured facet that always faces the camera - vector input |
ds2vbbr | Draw a (dynamic) billboard texture with specified rotation. |
ds2tb | Draw text that always faces the camera |
ds2vtb | Draw text that always faces the camera - vector input |
ds2vbbp | Draw a billboard with aspect ratio - vector input. |
ds2vbbpr | Billboard with aspect ratio, offset in screen coords, and rotation of texture - vector input. |
ds2bbset | Draw a set of billboards. |
ss2lt | Load a texture for future (generally repeated) use. |
ss2ct | Create a texture with specified width and height |
Code Example
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "s2plot.h"
unsigned int tid;
void cb(double *t, int *kc)
{
float x = 0.0, y = 0.3, z = 0.4; /* Location */
float isize = 0.02; /* Texture scale */
float str_x = 0.0, str_y = 0.0, str_z = 0.0; /* No stretch */
float r = 1.0, g = 1.0, b = 0.0; /* Yellow */
float alpha = 0.9; /* Alpha channel */
char trans = 's'; /* Transparency */
ds2bb(x,y,z, str_x,str_y,str_z, isize, r,g,b, 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.