这个范例主要介绍了在有两个输出端的时候怎么在第二个输出端分离出一个几何体。关键点就是创建一个新的gdh给定一个新的gdp。
头文件 SOP_DualStar.h
#ifndef __SOP_DualStar_h__
#define __SOP_DualStar_h__
#include <SOP/SOP_Node.h>
namespace HDK_Sample {
class SOP_DualStar : public SOP_Node
{
public:
static OP_Node *myConstructor(OP_Network*, const char *,
OP_Operator *);
static PRM_Template myTemplateList[];
protected:
SOP_DualStar(OP_Network *net, const char *name, OP_Operator *op);
virtual ~SOP_DualStar();
/// cookMySop does the actual work of the SOP computing, in this
/// case, a star shape.
virtual OP_ERROR cookMySop(OP_Context &context);
virtual GU_DetailHandle cookMySopOutput(OP_Context &context, int outputidx, SOP_Node *interest);
/// Actually build a star in the given geometry
void buildStar(GU_Detail *dst, OP_Context &context);
private:
/// The following list of accessors simplify evaluating the parameters
/// of the SOP.
int DIVISIONS(fpreal t) { return evalInt ("divs", 0, t); }
fpreal XRADIUS(fpreal t) { return evalFloat("rad", 0, t); }
fpreal YRADIUS(fpreal t) { return evalFloat("rad", 1, t); }
int NEGRADIUS() { return evalInt ("nradius", 0, 0); }
fpreal CENTERX(fpreal t) { return evalFloat("t", 0, t); }
fpreal CENTERY(fpreal t) { return evalFloat("t", 1, t); }
fpreal CENTERZ(fpreal t) { return evalFloat("t", 2, t); }
int</