Documentation/Ptc API

From PixieWiki

Jump to: navigation, search

An API has been added which allows both reading and writing of point cloud files. Point clouds can be turned into brickmaps via texmake -texture3d <in> <out>, so this also allows an external program to generate brickmaps for efficient rendering of 3d texture data.

To use the API, include ptcapi.h, and link with libri. The following functions are defined:

Contents

[edit] Reading

[edit] Open an existing point cloud

PtcPointCloud PtcOpenPointCloudFile(char *filename, int *nvars, char **vartypes, char **varnames);

Open filename, and retrieve the number of channels defined in the pointcloud. The types (color,float,point,normal,matrix and so on) of each named channel are returned in the varnames array:

int nv;
char *types[256];
char *names[256];
PtcPointCloud myPtc = PtcOpenPointCloudFile("cloud.ptc", int *nvars, types, names);
// nv = number of channels
// types[0] = first channel type
// names[1] = first channel name

[edit] Get info on the point cloud

int PtcGetPointCloudInfo(PtcPointCloud pointcloud, char *request, void *result);

Get information about a previously opened point cloud. Request may be one of:

"npoints"
the number of points in the file
"bbox"
the bounding box of the points
"datasize"
the size in floats of each point (the sum of all channel sizes)
"world2eye"
the world to eye transformation
"world2ndc"
the world to NDC transformation when the file was created

[edit] Read a single point

int PtcReadDataPoint(PtcPointCloud pointcloud, float *point, float *normal, float *radius, float *data);

This function will return the next point from a previously opened file point (3 floats) will recieve the position, normal (3 floats) gets the normal of the point, and the radius of the point is returned in radius. The data itself is returned in the data array which must be large enough to cope with datasize floats.

[edit] Close the file

void PtcClosePointCloudFile(PtcPointCloud pointcloud);

Close a previously read-opened file.

[edit] Writing

[edit] Create a blank point cloud with nvars channels

PtcPointCloud PtcCreatePointCloudFile(char *filename, int nvars, char **vartypes, char **varnames,
     float *world2eye, float *world2ndc, float *format);
Returns a handle to the newly opend file, which has nvars channels, described by vartypes and varnames.  You need to provide the world to eye transform world2eye, a 4x4 matrix of floats.  Also specify world2ndc for the transform to the normalized device coordinate system in which the cloud was generated.  Note that currently this NDC transformation is simply stored for informational purposes.    The format parameter is currently unused.

[edit] Write a point to the file

void PtcWriteDataPoint(PtcPointCloud pointcloud, float *point, float *normal, float radius, float *data);

Write data with the specified point, radius and normal to the file.

[edit] Finish an close the file

void PtcFinishPointCloudFile(PtcPointCloud pointcloud);

Finish and close a file which was opened for writing.

Personal tools