Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

One of the other three functions getProxyDisplay* should be implemented if the extension writer wants to draw an approximate proxy of the object in the Studio viewport. For example, the  MaxwellGrass extension uses  getProxyDisplayLines to draw some lines representing grass strands.

 

intersect

virtual

...

bool

...

intersect(

...

Cmaxwell::Cobject*

...

object,

...

const

...

Cpoint&

...

rayOrigin,

...

const

...

Cvector&

...

rayDir,

...

real

...

time,

...

const

...

dword

...

subVolumeIndex,

...

Cvector*

...

pNormal,

...

Cvector*

...

pLocalImpact,

...

CfVector

...

& data,

...

Cvector&

...

parametricUVW,

...

Cvector&

...

tangentU,

...

Cvector&

...

tangentV

...

)

...

=

...

0;

Given a ray (direction and origin), calculate and return a point and normal on the surface of the object.

Arguments

Cmaxwell::Cobject& object : input, reference to the extension object.

const Cpoint& rayOrigin : input, origin of the ray in local coordinates of the extension object.

const Cvector& rayDir : input, direction of the ray in local coordinates of the extension object.

real time : input, ranges from 0.0 to 1.0, time of the frame at which the intersection is evaluated.

const dword subVolumeIndex : input, index of the current subvolume.

Cvector* pNormal : output, return here the calculated normal direction to the surface at the intersection point, in local coordinates of the extension object.

Cvector* pLocalImpact : output, intersection point in local coordinates of the extension object.

CfVector& data : private, don't use.

Cvector& parametricUVW : output, in case of analytical surfaces, return here the natural parametric coordinates of the intersection point. Needed later to calculate texture coordinates if using custom UV generators.

Cvector& tangentU, tangentV : output, tangent vectors to the surface. If P=p(u,v), then tu = dP/du and tv = dP/dv;

...

true on intersection, false otherwise.

getBoundingBox

virtual

...

void

...

getBoundingBox(

...

Cpoint

...

* bboxPoints,

...

float

...

time

...

)

...

=

...

0;

Return the bounding box of the extension object, enclosing all subvolumes. This box should be arbitrarily oriented in order to be the smallest box that surrounds the object.

...

The points must be in local coordinates of the extension object.

Arguments

Cpoint* bboxPoints: output, 0-based array of eight points.

float time : input, time of evaluation of the box.

Returns

Nothing.

getNumSubVolumes

virtual

...

dword

...

getNumSubVolumes(

...

void

...

);

Return the number of subvolumes that the object is subdivided into.

...

Number of subvolumes.

getSubVolumeBoundingBox

virtual

...

void

...

getSubVolumeBoundingBox(

...

Cpoint

...

* bboxPoints,

...

dword

...

subVolumeIndex,

...

float

...

time

...

);

Return the bounding box of the subvolume, in local coordinates of the extension object, as a 0-based array of eight points, at the given time.

Arguments

Cpoint* bboxPoints : output, 0-based array of eight points. See getBoundingBox for the point ordering.

dword subVolumeIndex : input, index of the subvolume to return its box.

float time : input, time of evaluation of the box.

...

Nothing.

getNumberOfUVGenerators

virtual

...

byte

...

getNumberOfUVGenerators(

...

void

...

);

Returns the number of implemented custom UV generators.

...

Number of UV generators. Max 255.

getUVGeneratorName

virtual

...

const

...

char*

...

getUVGeneratorName(

...

byte

...

index

...

);

Return a string with the name of the UV generator.

Arguments

byte index : input, index of the generator, max 255.

...

String with the generator name. If index > numberOfUVGenerators or index < 0, return NULL.

getUVForChannel

virtual

...

byte

...

getUVForChannel(

...

CfVector&

...

uvw,

...

const

...

Cpoint&

...

point,

...

const

...

Cpoint&

...

normal,

...

dword

...

iGenerator,

...

dword

...

subVolIndex,

...

const

...

Cvector&

...

parametricUVW

...

);

...

Calculates the UV texture coordinates for the given point "point". When dealing with analytical surfaces, it's often more convenient to use "parametricUVW" as input data. "normal" is the normal at the intersection point.

Arguments

CfVector& uvw : output, calculated texture coordinates, values range from 0.0 to 1.0.

const Cpoint& point : input, intersection point.

const Cpoint& normal : input, normal at intersection point.

dword iGenerator : input, index of the chosen generator.

dword subVolIndex : input, index of the subvolume.

const Cvector& parametricUVW : input, natural parametric coordinates of the surface, calculated in intersect.

...

1 on success, 0 otherwise.

isOverlappingBoundingBox

virtual

...

bool

...

isOverlappingBoundingBox(

...

const

...

Cpoint

...

* bboxPoints,

...

dword

...

subVolumeIndex,

...

bool

...

forceHalfTime

...

);

Helper function for the render engine. Tests whether the box given by "bboxPoints" and that of the subvolume indexed by "subVolumeIndex" overlap.

Arguments

Cpoint* bboxPoints : input, 0-based array of eight points. See getBoundingBox for the point ordering.

dword subVolumeIndex : input, index of the subvolume to compare its box to.

bool forceHalfTime : input, type of subvolume box for evaluation. If forceHalfTime is true, the subvolume box to comapre is at time 0.5. If true, it is the smallest box that encloses the swept space of the object in the subvolume from time 0.0 to time 1.0. 

Returns

true on intersection, otherwise false;

getProxyDisplayPoints

virtual

...

bool

...

getProxyDisplayPoints(

...

const

...

dword&

...

percent,

...

const

...

dword& maxPoints, dword& nPoints, float*& points );

Allocates and fills the "points" array with the coordinates of points to be drawn in Studio viewports. Also sets "nPoints" to the actual number of points filled.

Arguments

const dword& percent : input, goes from 0 to 100, indicating the degree of desired precision to draw the proxy.

const dword& maxPoints : input, the maximum number of points allowed.

dword& nPoints : output, the actual number of points allocated. Must be <= maxPoints.

 float*& points : output, array with the points, x0y0z0x1y1z1x2y2z2....

Returns

true on success, otherwise false;

 

getProxyDisplayLines

virtual

...

bool

...

getProxyDisplayLines(

...

const

...

dword&

...

percent,

...

const

...

dword&

...

maxPoints,

...

const

...

dword&

...

maxLines, dword& nPoints, float*&

...

points,

...

dword&

...

nLines,

...

dword*&

...

pointsPerLine

...

);

Allocates and fills the "points" array and "pointsPerLine" array with with the coordinates of points, and number of points per line to be drawn in Studio. Also sets "nPoints" to the actual number of points created and nLines to the actual number of lines created.

Arguments

const dword& percent : input, goes from 0 to 100, indicating the degree of desired precision to draw the proxy.

const dword& maxPoints : input, the maximum number of points allowed.

const dword& maxLines : input, the maximum number of lines allowed.

dword& nPoints : output, the actual number of points allocated. Must be <= maxPoints.

float*& points : output, array with the points, x0y0z0x1y1z1x2y2z2....

dword& nLines : output, the actual number of lines created. Must be <= maxLines.

dword*& pointsPerLine : output, array with the number of points per line, n0n1n2.... If this array is NULL, then the number of points per line is constant, and is nPoints/nLines.

Returns

true on success, otherwise false; 

getProxyDisplayFaces

virtual

...

bool

...

getProxyDisplayFaces(

...

const

...

dword&

...

percent,

...

const

...

dword&

...

maxFaces,

...

dword&

...

nPoints,

...


...

float*&

...

points,

...

dword&

...

nFaces,

...

dword*&

...

faces

...

);

Allocates and fills the "points" array and "faces" array with with the coordinates of points, and indexes to vertices to be drawn in Studio. Also sets "nPoints" to the actual number of points created and "nFaces" to the actual number of triangles created.

Arguments

const dword& percent : input, goes from 0 to 100, indicating the degree of desired precision to draw the proxy.

const dword& maxPoints : input, the maximum number of points allowed.

const dword& maxFaces : input, the maximum number of faces allowed.

dword& nPoints : output, the actual number of points allocated. Must be <= maxPoints.

float*& points : output, array with the points, x0y0z0x1y1z1x2y2z2....

dword& nFaces : output, the actual number of faces created. Must be <= maxLines.

dword*& faces : output, array with the indices to vertices in the "points" array  v00v01v02v10v11v12v20v21v22....

Returns

true on success, otherwise false.

...