decided to rename 'atransform' back to 'transform'. added renderings by Geoffrey Irving to demonstrate the instance plugin (with permission)
parent
ddde0f655c
commit
511568c846
|
@ -292,7 +292,7 @@ and \emph{animated transformations} as parameters. The latter is useful to
|
||||||
render scenes involving motion blur. The syntax used to specify these
|
render scenes involving motion blur. The syntax used to specify these
|
||||||
is slightly different:
|
is slightly different:
|
||||||
\begin{xml}
|
\begin{xml}
|
||||||
<atransform name="trafoProperty">
|
<animation name="trafoProperty">
|
||||||
<transform time="0">
|
<transform time="0">
|
||||||
.. chained list of transformations as discussed above ..
|
.. chained list of transformations as discussed above ..
|
||||||
</transform>
|
</transform>
|
||||||
|
@ -302,7 +302,7 @@ is slightly different:
|
||||||
</transform>
|
</transform>
|
||||||
|
|
||||||
.. additional transformations (optional) ..
|
.. additional transformations (optional) ..
|
||||||
</atransform>
|
</animation>
|
||||||
\end{xml}
|
\end{xml}
|
||||||
Mitsuba then decomposes each transformation into a scale, translation, and
|
Mitsuba then decomposes each transformation into a scale, translation, and
|
||||||
rotation component and interpolates\footnote{Using linear interpolation
|
rotation component and interpolates\footnote{Using linear interpolation
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 326 KiB |
Binary file not shown.
After Width: | Height: | Size: 187 KiB |
|
@ -31,7 +31,7 @@
|
||||||
\newcommand{\order}[1]{} % Ignore
|
\newcommand{\order}[1]{} % Ignore
|
||||||
|
|
||||||
\newcommand{\Transform}{\texttt{transform}}
|
\newcommand{\Transform}{\texttt{transform}}
|
||||||
\newcommand{\ATransform}{\texttt{atransform}}
|
\newcommand{\Animation}{\texttt{animation}}
|
||||||
\newcommand{\Spectrum}{\texttt{spectrum}}
|
\newcommand{\Spectrum}{\texttt{spectrum}}
|
||||||
\newcommand{\Integer}{\texttt{integer}}
|
\newcommand{\Integer}{\texttt{integer}}
|
||||||
\newcommand{\String}{\texttt{string}}
|
\newcommand{\String}{\texttt{string}}
|
||||||
|
|
|
@ -116,7 +116,7 @@
|
||||||
medium,film,sampler,integrator,emitter,sensor,
|
medium,film,sampler,integrator,emitter,sensor,
|
||||||
translate,rotate,scale,lookat,point,vector,matrix,
|
translate,rotate,scale,lookat,point,vector,matrix,
|
||||||
include,fscat,volume,alias,rfilter,boolean,
|
include,fscat,volume,alias,rfilter,boolean,
|
||||||
subsurface,atransform
|
subsurface,animation
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@ private:
|
||||||
EBoolean, EString, ETranslate, ERotate,
|
EBoolean, EString, ETranslate, ERotate,
|
||||||
ELookAt, EScale, EMatrix, EPoint,
|
ELookAt, EScale, EMatrix, EPoint,
|
||||||
EVector, ERGB, ESRGB, EBlackBody,
|
EVector, ERGB, ESRGB, EBlackBody,
|
||||||
ESpectrum, ETransform, EATransform,
|
ESpectrum, ETransform, EAnimation,
|
||||||
EInclude, EAlias
|
EInclude, EAlias
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \icon{emitter_collimated}
|
* \icon{emitter_collimated}
|
||||||
* \order{5}
|
* \order{5}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional emitter-to-world transformation.
|
* Specifies an optional emitter-to-world transformation.
|
||||||
* \default{none (i.e. emitter space $=$ world space)}
|
* \default{none (i.e. emitter space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -25,7 +25,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \icon{emitter_directional}
|
* \icon{emitter_directional}
|
||||||
* \order{4}
|
* \order{4}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional emitter-to-world transformation.
|
* Specifies an optional emitter-to-world transformation.
|
||||||
* \default{none (i.e. emitter space $=$ world space)}
|
* \default{none (i.e. emitter space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -28,7 +28,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \icon{emitter_point}
|
* \icon{emitter_point}
|
||||||
* \order{1}
|
* \order{1}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional sensor-to-world transformation.
|
* Specifies an optional sensor-to-world transformation.
|
||||||
* \default{none (i.e. sensor space $=$ world space)}
|
* \default{none (i.e. sensor space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -71,7 +71,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* Specifies the relative amount of samples
|
* Specifies the relative amount of samples
|
||||||
* allocated to this emitter. \default{1}
|
* allocated to this emitter. \default{1}
|
||||||
* }
|
* }
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional sensor-to-world transformation.
|
* Specifies an optional sensor-to-world transformation.
|
||||||
* \default{none (i.e. sensor space $=$ world space)}
|
* \default{none (i.e. sensor space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -25,7 +25,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \icon{emitter_spot}
|
* \icon{emitter_spot}
|
||||||
* \order{3}
|
* \order{3}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional sensor-to-world transformation.
|
* Specifies an optional sensor-to-world transformation.
|
||||||
* \default{none (i.e. sensor space $=$ world space)}
|
* \default{none (i.e. sensor space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -100,7 +100,7 @@ ref<const AnimatedTransform> Properties::getAnimatedTransform(const std::string
|
||||||
const Transform *result2 = boost::get<Transform>(&it->second.data);
|
const Transform *result2 = boost::get<Transform>(&it->second.data);
|
||||||
|
|
||||||
if (!result1 && !result2)
|
if (!result1 && !result2)
|
||||||
SLog(EError, "The property \"%s\" has the wrong type (expected <atransform> or <transform>). The "
|
SLog(EError, "The property \"%s\" has the wrong type (expected <animation> or <transform>). The "
|
||||||
"complete property record is :\n%s", name.c_str(), toString().c_str());
|
"complete property record is :\n%s", name.c_str(), toString().c_str());
|
||||||
it->second.queried = true;
|
it->second.queried = true;
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ ref<const AnimatedTransform> Properties::getAnimatedTransform(const std::string
|
||||||
const Transform *result2 = boost::get<Transform>(&it->second.data);
|
const Transform *result2 = boost::get<Transform>(&it->second.data);
|
||||||
|
|
||||||
if (!result1 && !result2)
|
if (!result1 && !result2)
|
||||||
SLog(EError, "The property \"%s\" has the wrong type (expected <atransform> or <transform>). The "
|
SLog(EError, "The property \"%s\" has the wrong type (expected <animation> or <transform>). The "
|
||||||
"complete property record is :\n%s", name.c_str(), toString().c_str());
|
"complete property record is :\n%s", name.c_str(), toString().c_str());
|
||||||
|
|
||||||
it->second.queried = true;
|
it->second.queried = true;
|
||||||
|
@ -138,7 +138,7 @@ ref<const AnimatedTransform> Properties::getAnimatedTransform(const std::string
|
||||||
const Transform *result2 = boost::get<Transform>(&it->second.data);
|
const Transform *result2 = boost::get<Transform>(&it->second.data);
|
||||||
|
|
||||||
if (!result1 && !result2)
|
if (!result1 && !result2)
|
||||||
SLog(EError, "The property \"%s\" has the wrong type (expected <atransform> or <transform>). The "
|
SLog(EError, "The property \"%s\" has the wrong type (expected <animation> or <transform>). The "
|
||||||
"complete property record is :\n%s", name.c_str(), toString().c_str());
|
"complete property record is :\n%s", name.c_str(), toString().c_str());
|
||||||
it->second.queried = true;
|
it->second.queried = true;
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ SceneHandler::SceneHandler(const SAXParser *parser,
|
||||||
m_tags["blackbody"] = TagEntry(EBlackBody, (Class *) NULL);
|
m_tags["blackbody"] = TagEntry(EBlackBody, (Class *) NULL);
|
||||||
m_tags["spectrum"] = TagEntry(ESpectrum, (Class *) NULL);
|
m_tags["spectrum"] = TagEntry(ESpectrum, (Class *) NULL);
|
||||||
m_tags["transform"] = TagEntry(ETransform, (Class *) NULL);
|
m_tags["transform"] = TagEntry(ETransform, (Class *) NULL);
|
||||||
m_tags["atransform"] = TagEntry(EATransform, (Class *) NULL);
|
m_tags["animation"] = TagEntry(EAnimation, (Class *) NULL);
|
||||||
m_tags["include"] = TagEntry(EInclude, (Class *) NULL);
|
m_tags["include"] = TagEntry(EInclude, (Class *) NULL);
|
||||||
m_tags["alias"] = TagEntry(EAlias, (Class *) NULL);
|
m_tags["alias"] = TagEntry(EAlias, (Class *) NULL);
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ void SceneHandler::startElement(const XMLCh* const xmlName,
|
||||||
case ETransform:
|
case ETransform:
|
||||||
m_transform = Transform();
|
m_transform = Transform();
|
||||||
break;
|
break;
|
||||||
case EATransform: {
|
case EAnimation: {
|
||||||
m_animatedTransform = new AnimatedTransform();
|
m_animatedTransform = new AnimatedTransform();
|
||||||
ref<VectorTrack> translation = new VectorTrack(VectorTrack::ETranslationXYZ);
|
ref<VectorTrack> translation = new VectorTrack(VectorTrack::ETranslationXYZ);
|
||||||
ref<QuatTrack> rotation = new QuatTrack(VectorTrack::ERotationQuat);
|
ref<QuatTrack> rotation = new QuatTrack(VectorTrack::ERotationQuat);
|
||||||
|
@ -606,7 +606,7 @@ void SceneHandler::endElement(const XMLCh* const xmlName) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EATransform: {
|
case EAnimation: {
|
||||||
m_animatedTransform->sortAndSimplify();
|
m_animatedTransform->sortAndSimplify();
|
||||||
context.parent->properties.setAnimatedTransform(
|
context.parent->properties.setAnimatedTransform(
|
||||||
context.attributes["name"], m_animatedTransform);
|
context.attributes["name"], m_animatedTransform);
|
||||||
|
|
|
@ -84,7 +84,7 @@ static void setProperties(QDomDocument &doc, QDomElement &element,
|
||||||
std::set<Float> times;
|
std::set<Float> times;
|
||||||
trafo->collectKeyframes(times);
|
trafo->collectKeyframes(times);
|
||||||
|
|
||||||
property = doc.createElement("atransform");
|
property = doc.createElement("animation");
|
||||||
|
|
||||||
for (std::set<Float>::iterator it2 = times.begin(); it2 != times.end(); ++it2) {
|
for (std::set<Float>::iterator it2 = times.begin(); it2 != times.end(); ++it2) {
|
||||||
const Matrix4x4 &matrix = trafo->eval(*it2).getMatrix();
|
const Matrix4x4 &matrix = trafo->eval(*it2).getMatrix();
|
||||||
|
|
|
@ -26,7 +26,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{fluencemeter}{Fluence meter}
|
/*!\plugin{fluencemeter}{Fluence meter}
|
||||||
* \order{7}
|
* \order{7}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional sensor-to-world transformation.
|
* Specifies an optional sensor-to-world transformation.
|
||||||
* \default{none (i.e. sensor space $=$ world space)}
|
* \default{none (i.e. sensor space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -27,7 +27,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{orthographic}{Orthographic camera}
|
/*!\plugin{orthographic}{Orthographic camera}
|
||||||
* \order{3}
|
* \order{3}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional camera-to-world transformation.
|
* Specifies an optional camera-to-world transformation.
|
||||||
* \default{none (i.e. camera space $=$ world space)}
|
* \default{none (i.e. camera space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -26,7 +26,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{perspective}{Perspective pinhole camera}
|
/*!\plugin{perspective}{Perspective pinhole camera}
|
||||||
* \order{1}
|
* \order{1}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional camera-to-world transformation.
|
* Specifies an optional camera-to-world transformation.
|
||||||
* \default{none (i.e. camera space $=$ world space)}
|
* \default{none (i.e. camera space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -25,7 +25,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{radiancemeter}{Radiance meter}
|
/*!\plugin{radiancemeter}{Radiance meter}
|
||||||
* \order{6}
|
* \order{6}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional sensor-to-world transformation.
|
* Specifies an optional sensor-to-world transformation.
|
||||||
* \default{none (i.e. sensor space $=$ world space)}
|
* \default{none (i.e. sensor space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -25,7 +25,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{spherical}{Spherical camera}
|
/*!\plugin{spherical}{Spherical camera}
|
||||||
* \order{5}
|
* \order{5}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional camera-to-world transformation.
|
* Specifies an optional camera-to-world transformation.
|
||||||
* \default{none (i.e. camera space $=$ world space)}
|
* \default{none (i.e. camera space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -27,7 +27,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{telecentric}{Telecentric lens camera}
|
/*!\plugin{telecentric}{Telecentric lens camera}
|
||||||
* \order{4}
|
* \order{4}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional sensor-to-world transformation.
|
* Specifies an optional sensor-to-world transformation.
|
||||||
* \default{none (i.e. camera space $=$ world space)}
|
* \default{none (i.e. camera space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -29,7 +29,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{thinlens}{Perspective camera with a thin lens}
|
/*!\plugin{thinlens}{Perspective camera with a thin lens}
|
||||||
* \order{2}
|
* \order{2}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional camera-to-world transformation.
|
* Specifies an optional camera-to-world transformation.
|
||||||
* \default{none (i.e. camera space $=$ world space)}
|
* \default{none (i.e. camera space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -43,7 +43,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* Is the cylinder inverted, i.e. should the normal vectors
|
* Is the cylinder inverted, i.e. should the normal vectors
|
||||||
* be flipped? \default{\code{false}, i.e. the normals point outside}
|
* be flipped? \default{\code{false}, i.e. the normals point outside}
|
||||||
* }
|
* }
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional linear object-to-world transformation.
|
* Specifies an optional linear object-to-world transformation.
|
||||||
* Note that non-uniform scales are not permitted!
|
* Note that non-uniform scales are not permitted!
|
||||||
* \default{none (i.e. object space $=$ world space)}
|
* \default{none (i.e. object space $=$ world space)}
|
||||||
|
|
|
@ -31,7 +31,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{disk}{Disk intersection primitive}
|
/*!\plugin{disk}{Disk intersection primitive}
|
||||||
* \order{4}
|
* \order{4}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies a linear object-to-world transformation.
|
* Specifies a linear object-to-world transformation.
|
||||||
* Note that non-uniform scales are not permitted!
|
* Note that non-uniform scales are not permitted!
|
||||||
* \default{none (i.e. object space $=$ world space)}
|
* \default{none (i.e. object space $=$ world space)}
|
||||||
|
|
|
@ -25,15 +25,33 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{\Unnamed}{\ShapeGroup}{A reference to a
|
* \parameter{\Unnamed}{\ShapeGroup}{A reference to a
|
||||||
* shape group that should be instantiated}
|
* shape group that should be instantiated}
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional linear instance-to-world transformation.
|
* Specifies an optional linear instance-to-world transformation.
|
||||||
* \default{none (i.e. instance space $=$ world space)}
|
* \default{none (i.e. instance space $=$ world space)}
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
* \renderings{
|
||||||
|
* \rendering{Surface viewed from the top}{shape_instance_fractal_top}
|
||||||
|
* \rendering{Surface viewed from the bottom}{shape_instance_fractal_bot}
|
||||||
|
* \caption{
|
||||||
|
* A visualization of a fractal surface by Irving and Segerman.
|
||||||
|
* (a 2D Gospel curve developed up to level 5 along the third
|
||||||
|
* dimension). This scene makes use of instancing to replicate
|
||||||
|
* similar structures to cheaply render a structure that effectively
|
||||||
|
* consists of several hundred millions of triangles.
|
||||||
|
* }
|
||||||
|
* }
|
||||||
*
|
*
|
||||||
* This plugin implements a geometry instance used to efficiently replicate
|
* This plugin implements a geometry instance used to efficiently replicate
|
||||||
* geometry many times. For details, please refer to the \pluginref{shapegroup}
|
* geometry many times. For details on how to create instances, refer to
|
||||||
* plugin.
|
* the \pluginref{shapegroup} plugin.
|
||||||
|
* \remarks{
|
||||||
|
* \item Note that it is \emph{not} possible to assign a different
|
||||||
|
* material to each instance --- the material assignment specified within
|
||||||
|
* the shape group is the one that matters.
|
||||||
|
* \item Shape groups cannot be used to replicate shapes with
|
||||||
|
* attached emitters, sensors, or subsurface scattering models.
|
||||||
|
* }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Instance::Instance(const Properties &props) : Shape(props) {
|
Instance::Instance(const Properties &props) : Shape(props) {
|
||||||
|
|
|
@ -55,7 +55,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* this convention. \default{\code{true}, i.e. flip them to get the
|
* this convention. \default{\code{true}, i.e. flip them to get the
|
||||||
* correct coordinates}.
|
* correct coordinates}.
|
||||||
* }
|
* }
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional linear object-to-world transformation.
|
* Specifies an optional linear object-to-world transformation.
|
||||||
* Note that non-uniform scales are not permitted!
|
* Note that non-uniform scales are not permitted!
|
||||||
* \default{none (i.e. object space $=$ world space)}
|
* \default{none (i.e. object space $=$ world space)}
|
||||||
|
|
|
@ -62,7 +62,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* Optional flag to flip all normals. \default{\code{false}, i.e.
|
* Optional flag to flip all normals. \default{\code{false}, i.e.
|
||||||
* the normals are left unchanged}.
|
* the normals are left unchanged}.
|
||||||
* }
|
* }
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional linear object-to-world transformation.
|
* Specifies an optional linear object-to-world transformation.
|
||||||
* Note that non-uniform scales are not permitted!
|
* Note that non-uniform scales are not permitted!
|
||||||
* \default{none (i.e. object space $=$ world space)}
|
* \default{none (i.e. object space $=$ world space)}
|
||||||
|
|
|
@ -30,7 +30,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
/*!\plugin{rectangle}{Rectangle intersection primitive}
|
/*!\plugin{rectangle}{Rectangle intersection primitive}
|
||||||
* \order{3}
|
* \order{3}
|
||||||
* \parameters{
|
* \parameters{
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies a linear object-to-world transformation.
|
* Specifies a linear object-to-world transformation.
|
||||||
* It is allowed to use non-uniform scaling, but no shear.
|
* It is allowed to use non-uniform scaling, but no shear.
|
||||||
* \default{none (i.e. object space $=$ world space)}
|
* \default{none (i.e. object space $=$ world space)}
|
||||||
|
|
|
@ -55,7 +55,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* Optional flag to flip all normals. \default{\code{false}, i.e.
|
* Optional flag to flip all normals. \default{\code{false}, i.e.
|
||||||
* the normals are left unchanged}.
|
* the normals are left unchanged}.
|
||||||
* }
|
* }
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional linear object-to-world transformation.
|
* Specifies an optional linear object-to-world transformation.
|
||||||
* Note that non-uniform scales are not permitted!
|
* Note that non-uniform scales are not permitted!
|
||||||
* \default{none (i.e. object space $=$ world space)}
|
* \default{none (i.e. object space $=$ world space)}
|
||||||
|
|
|
@ -34,9 +34,9 @@ MTS_NAMESPACE_BEGIN
|
||||||
* so that they can efficiently be referenced many times using the
|
* so that they can efficiently be referenced many times using the
|
||||||
* \pluginref{instance} plugin. This is useful for rendering things like
|
* \pluginref{instance} plugin. This is useful for rendering things like
|
||||||
* forests, where only a few distinct types of trees have to be kept
|
* forests, where only a few distinct types of trees have to be kept
|
||||||
* in memory.
|
* in memory. An example is given below:
|
||||||
*
|
*
|
||||||
|
* \vspace{5mm}
|
||||||
* \begin{xml}[caption={An example of geometry instancing}, label=lst:instancing]
|
* \begin{xml}[caption={An example of geometry instancing}, label=lst:instancing]
|
||||||
* <!-- Declare a named shape group containing two objects -->
|
* <!-- Declare a named shape group containing two objects -->
|
||||||
* <shape type="shapegroup" id="myShapeGroup">
|
* <shape type="shapegroup" id="myShapeGroup">
|
||||||
|
@ -68,14 +68,6 @@ MTS_NAMESPACE_BEGIN
|
||||||
* </transform>
|
* </transform>
|
||||||
* </shape>
|
* </shape>
|
||||||
* \end{xml}
|
* \end{xml}
|
||||||
* \vspace{-2mm}
|
|
||||||
* \remarks{
|
|
||||||
* \item Note that it is not possible to assign a different
|
|
||||||
* material to each instance --- the material assignment specified within
|
|
||||||
* the shape group is the one that matters.
|
|
||||||
* \item Shape groups can not be used to replicate shapes with
|
|
||||||
* attached emitters, sensors, or subsurface scattering models.
|
|
||||||
* }
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ShapeGroup::ShapeGroup(const Properties &props) : Shape(props) {
|
ShapeGroup::ShapeGroup(const Properties &props) : Shape(props) {
|
||||||
|
|
|
@ -37,7 +37,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \parameter{radius}{\Float}{
|
* \parameter{radius}{\Float}{
|
||||||
* Radius of the sphere in object-space units \default{1}
|
* Radius of the sphere in object-space units \default{1}
|
||||||
* }
|
* }
|
||||||
* \parameter{toWorld}{\Transform\Or\ATransform}{
|
* \parameter{toWorld}{\Transform\Or\Animation}{
|
||||||
* Specifies an optional linear object-to-world transformation.
|
* Specifies an optional linear object-to-world transformation.
|
||||||
* Note that non-uniform scales are not permitted!
|
* Note that non-uniform scales are not permitted!
|
||||||
* \default{none (i.e. object space $=$ world space)}
|
* \default{none (i.e. object space $=$ world space)}
|
||||||
|
|
Loading…
Reference in New Issue