本文整理汇总了C++中MDrawRequest::multiPath方法的典型用法代码示例。如果您正苦于以下问题:C++ MDrawRequest::multiPath方法的具体用法?C++ MDrawRequest::multiPath怎么用?C++ MDrawRequest::multiPath使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MDrawRequest
的用法示例。
在下文中一共展示了MDrawRequest::multiPath方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getDrawRequests
void BaseShapeUI::getDrawRequests( const MDrawInfo & info, bool objectAndActiveOnly, MDrawRequestQueue & requests ) {
MStatus status;
MDrawData data;
BaseShape *shape = (BaseShape *) surfaceShape();
MDrawRequest request = info.getPrototype(*this);
M3dView view = info.view();
getDrawData(shape, data);
request.setDrawData(data);
MDagPath path = request.multiPath();
MMaterial material = MPxSurfaceShapeUI::material(path);
if (!(status = material.evaluateMaterial(view, path)))
status.perror("MMaterial::evaluateMaterial");
if (!(status = material.evaluateDiffuse()))
status.perror("MMaterial::evaluateDiffuse");
request.setMaterial(material);
request.setToken(info.displayStyle());
requests.add(request);
}
示例2: textureNode
// Load the file textures for the cube maps.
//
MStatus hwRefractReflectShader_NV20::loadTextures(const MDrawRequest& request, M3dView& view)
{
// Get the cube map file names
//
MStringArray decalNames;
MString decalName;
// Find the cubemap textures by tracing through the connection from the color atttribute
//
ShadingConnection colorConnection(thisMObject(), request.multiPath().partialPathName(), "color");
// If the color attribute is ultimately connected to a environment,
// find its filenames, otherwise use the default color texture.
//
bool gotAllEnvironmentMaps = TRUE;
if (colorConnection.type() == ShadingConnection::TEXTURE &&
colorConnection.texture().hasFn(MFn::kEnvCube))
{
// Get the filenames of the texture.
MFnDependencyNode textureNode(colorConnection.texture());
MString attributeName;
MString envNames[6] = { "top", "bottom", "left", "right", "front", "back" };
// Scan for connected file textures to the environment map node
//
for (int i=0; i<6; i++)
{
ShadingConnection conn(colorConnection.texture(), request.multiPath().partialPathName(),
envNames[i]);
if (conn.type() == ShadingConnection::TEXTURE &&
conn.texture().hasFn(MFn::kFileTexture))
{
MFnDependencyNode envNode(conn.texture());
MPlug filenamePlug( conn.texture(), envNode.attribute(MString("fileTextureName")) );
filenamePlug.getValue(decalName);
if (decalName.length() == 0) decalName = "internalDefaultTexture";
// Append next environment map name
decalNames.append( decalName );
}
// If any of the environment maps are not mapped put in a fake texture
else
{
decalName = "internalDefaultTexture";
decalNames.append( decalName );
}
}
}
else
{
// Put in a fake texture for each side
decalName = "internalDefaultTexture";
for (int i=0; i<6; i++)
{
decalNames.append( decalName );
}
}
// Reload cube maps if the name of the textures
// for any of the cube maps changes
//
bool reload = FALSE;
for (int i=0; i<6; i++)
{
if (currentTextureNames[i] != decalNames[i])
{
reload = TRUE;
break;
}
}
view.beginGL();
{
if ( reload )
{
MString ypTexName(decalNames[0]); // y+ == top
MString ynTexName(decalNames[1]); // y- == bottom
MString xpTexName(decalNames[2]); // x+ == left
MString xnTexName(decalNames[3]); // x- == right
MString zpTexName(decalNames[4]); // z+ == front
MString znTexName(decalNames[5]); // z- == back
MStatus stat;
if (! (stat = theImage_XP.readFromFile(xpTexName)) ) return MS::kFailure;
if (! (stat = theImage_XN.readFromFile(xnTexName)) ) return MS::kFailure;
if (! (stat = theImage_YP.readFromFile(ypTexName)) ) return MS::kFailure;
if (! (stat = theImage_YN.readFromFile(ynTexName)) ) return MS::kFailure;
if (! (stat = theImage_ZP.readFromFile(zpTexName)) ) return MS::kFailure;
if (! (stat = theImage_ZN.readFromFile(znTexName)) ) return MS::kFailure;
// Only create texture names the first time
if (fTextureName == -1) glGenTextures(1, &fTextureName);
glBindTexture( GL_TEXTURE_CUBE_MAP_ARB, fTextureName );
//.........这里部分代码省略.........
示例3: currentPathName
/* virtual */
MStatus hwUnlitShader::bind(const MDrawRequest& request,
M3dView& view)
{
MStatus status;
// white, opaque.
float bgColor[4] = {1,1,1,1};
// Get path of current object in draw request
currentObjectPath = request.multiPath();
MString currentPathName( currentObjectPath.partialPathName() );
updateTransparencyFlags(currentPathName);
// Get decal texture name
MString decalName = "";
ShadingConnection colorConnection(thisMObject(), currentPathName, "color");
// If the color attribute is ultimately connected to a file texture, find its filename.
// otherwise use the default color texture.
if (colorConnection.type() == ShadingConnection::TEXTURE &&
colorConnection.texture().hasFn(MFn::kFileTexture))
{
// Get the filename of the texture.
MFnDependencyNode textureNode(colorConnection.texture());
MPlug filenamePlug( colorConnection.texture(), textureNode.attribute(MString("fileTextureName")) );
filenamePlug.getValue(decalName);
if (decalName == "")
getFloat3(color, bgColor);
}
else
{
decalName = "";
getFloat3(color, bgColor);
}
assert(glGetError() == GL_NO_ERROR);
view.beginGL();
glPushAttrib( GL_ALL_ATTRIB_BITS );
glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
// Set the standard OpenGL blending mode.
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// Change the constant alpha value.
float alpha = 1.0f - fConstantTransparency;
// Set a color (with alpha). This color will be used directly if
// the shader is not textured. Otherwise, the texture will get modulated
// by the alpha.
glColor4f(bgColor[0], bgColor[1], bgColor[2], alpha);
// If the shader is textured...
if (decalName.length() != 0)
{
// Enable 2D texturing.
glEnable(GL_TEXTURE_2D);
assert(glGetError() == GL_NO_ERROR);
// Bind the 2D texture through the texture cache. The cache will keep
// the texture around, so that it will only be loaded in video
// memory once. In this example, the third parameter (mipmapping) is
// false, so no mipmaps are generated. Note that mipmaps only work if
// the texture has even dimensions.
if(m_pTextureCache)
m_pTextureCache->bind(colorConnection.texture(), MTexture::RGBA, false);
// Set minification and magnification filtering to linear interpolation.
// For better quality, you could enable mipmapping while binding and
// use GL_MIPMAP_LINEAR_MIPMAP in for minification filtering.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
}
// Disable lighting.
glDisable(GL_LIGHTING);
view.endGL();
return MS::kSuccess;
}
示例4: diffuse
//.........这里部分代码省略.........
// Don't use a vertex program to set up shading
//
else
{
// Set up the material state
//
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT);
glColor4fv(&ambient.r);
if (fInTexturedMode)
{
glEnable( GL_TEXTURE_2D );
MDrawData drawData = request.drawData();
material.applyTexture( view, drawData );
float scaleS, scaleT, translateS, translateT, rotate;
material.getTextureTransformation(scaleS, scaleT, translateS,
translateT, rotate);
rotate = DEG_TO_RAD(-rotate);
float c = cosf(rotate);
float s = sinf(rotate);
translateS += ((c+s)/2.0F);
translateT += ((c-s)/2.0F);
glMatrixMode(GL_TEXTURE);
glPushMatrix();
glLoadIdentity();
if(scaleS != 1.0f || scaleT != 1.0f)
glScalef(1.0f/scaleS, 1.0f/scaleT, 1.0f);
if(translateS != 0.0f || translateT != 0.0f)
glTranslatef(0.5f-translateS, 0.5f-translateT, 0.0f);
else
glTranslatef(0.5f, 0.5f, 0.0f);
if(rotate != 0.0f)
glRotatef(-rotate, 0.0f, 0.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
}
if (!useInternalMaterialSetting)
{
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
glColor4fv(&diffuse.r);
glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
glColor4fv(&specular.r);
glColorMaterial(GL_FRONT_AND_BACK, GL_EMISSION);
glColor4fv(&emission.r);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
}
else
{
const MDagPath dagPath = request.multiPath();
material.evaluateMaterial( view, dagPath );
material.setMaterial(dagPath, hasTransparency);
}
}
// Do PN triangles in hardware, or do nothing
// if LOD = 0
if (fExtensionSupported[kPNTriangesEXT] || (fSubdivisions == 0))
{
if (fSubdivisions != 0)
{
glEnable( GL_PN_TRIANGLES_ATI );
// Set point mode
//
if (fPointMode == kPointLinear)
glPNTrianglesiATI( GL_PN_TRIANGLES_POINT_MODE_ATI,
GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI);
else
glPNTrianglesiATI( GL_PN_TRIANGLES_POINT_MODE_ATI,
GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI);
// Set normal mode
//
if (fNormalMode == kNormalLinear)
glPNTrianglesiATI( GL_PN_TRIANGLES_NORMAL_MODE_ATI,
GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI);
else
glPNTrianglesiATI( GL_PN_TRIANGLES_NORMAL_MODE_ATI,
GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI);
// Set tessellation level
//
glPNTrianglesiATI( GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI,
fSubdivisions );
}
}
view.endGL();
return MS::kSuccess;
}
示例5: colorConnection
/* virtual */
MStatus hwDecalBumpShader_NV20::bind(const MDrawRequest& request, M3dView& view)
{
MStatus status;
// Get the diffuse color
//
float diffuse_color[4];
status = getFloat3(color, diffuse_color);
diffuse_color[3] = 1.0;
if (!status)
return status;
// Get the light color
//
float light_color[4];
light_color[3] = 1.0f;
status = getFloat3(lightColor, light_color);
if (!status)
return status;
// Get the light direction (for directionalLight)
//
status = getFloat3(light, &lightRotation[0]);
if (!status)
return status;
// Get the bumpScale value
//
float bumpScaleValue = 2.0f;
// Get the bumpMap type
//
bool isHeightFieldMap = true;
// Direction of the directional light
//
// Convert the light direction (which is assumed in originally be in world space, in euler coordinates)
// into an eye space vector.
//
double scale = M_PI/180.0; // Internal rotations are in radian and not in degrees
MEulerRotation lightRot( lightRotation[0] * scale, lightRotation[1] * scale, lightRotation[2] * scale );
MVector light_v = MVector(0, 0, -1).rotateBy( lightRot ); // WS light vector
MDagPath camDag;
view.getCamera(camDag);
light_v = light_v * camDag.inclusiveMatrixInverse();
lightRotation[0] = (float) light_v[0];
lightRotation[1] = (float) light_v[1];
lightRotation[2] = (float) light_v[2];
// Get the camera position
//
status = getFloat3(camera, &cameraPos[0]);
if (!status)
return status;
// Get the decal and bump map file names
//
MString decalName = "";
MString bumpName = "";
ShadingConnection colorConnection(thisMObject(), request.multiPath().partialPathName(), "color");
ShadingConnection bumpConnection (thisMObject(), request.multiPath().partialPathName(), "bump");
// If the color attribute is ultimately connected to a file texture, find its filename.
// otherwise use the default color texture.
if (colorConnection.type() == ShadingConnection::TEXTURE &&
colorConnection.texture().hasFn(MFn::kFileTexture))
{
// Get the filename of the texture.
MFnDependencyNode textureNode(colorConnection.texture());
MPlug filenamePlug( colorConnection.texture(), textureNode.attribute(MString("fileTextureName")) );
filenamePlug.getValue(decalName);
}
// If the bump attribute is ultimately connected to a file texture, find its filename.
// otherwise use the default bump texture.
if (bumpConnection.type() == ShadingConnection::TEXTURE &&
bumpConnection.texture().hasFn(MFn::kFileTexture))
{
// Get the filename of the texture.
MFnDependencyNode textureNode(colorConnection.texture());
MPlug filenamePlug( bumpConnection.texture(), textureNode.attribute(MString("fileTextureName")) );
filenamePlug.getValue(bumpName);
}
// Fail safe quit
//
if (bumpName.length() == 0 ||
decalName.length() == 0)
{
view.beginGL();
glPushAttrib( GL_ALL_ATTRIB_BITS ); // This might be too conservative
glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
//.........这里部分代码省略.........