这个C++函数声明是什么



我是C++的新手,我在文档中所做的工作告诉我只看示例代码,它没有解释任何东西,所以我试图破译它。

我偶然发现了一个函数的声明,但我并不完全理解。

只是第一个功能

我在MHWRender::MPxShaderOverride(obj)后面找到了我没有得到的部分,然后它开始作为一个参数列表(或者它叫什么我不知道)

我想我会在哪里找到指定的输入。

再一次,我不知道这是在做什么,所以我有点不知道如何解释它。

完整的代码可以在这里找到:http://help.autodesk.com/view/MAYAUL/2016/ENU/?guid=__cpp_ref_hw_phong_shader_2hw_phong_shader_8cpp_example_html

    hwPhongShaderOverride(const MObject& obj)
: MHWRender::MPxShaderOverride(obj)
, fShaderNode(NULL)
, fTextureData(NULL)
, fDrawUsingShader(true) // Disabling this will use fixed-function which only has an OpenGL implementation
, fShaderBound(false)
, fTexture(NULL)
, fInColorPass(false)
, fColorShaderInstance(NULL)
, fInShadowPass(false)
, fShadowShaderInstance(NULL)
, fTransparency(0.0f)
{
    // Create a shader instance to use for drawing
    //
    if (fDrawUsingShader)
    {
        createShaderInstance();
    }
    fAmbient[0] = fAmbient[1] = fAmbient[2] = 0.0f;
    fDiffuse[0] = fDiffuse[1] = fDiffuse[2] = fDiffuse[3] = 0.0f;
    fSpecular[0] = fSpecular[1] = fSpecular[2] = 0.0f;
    fShininess[0] = fShininess[1] = fShininess[2] = 500.0f;
}
// override blend state when there is blending
static const MHWRender::MBlendState *sBlendState;
// Current hwPhongShader node associated with the shader override.
// Updated during doDG() time.
hwPhongShader *fShaderNode;
// Shader inputs values including transparency
float fTransparency;
float fAmbient[3];
float fDiffuse[4];
float fSpecular[3];
float fShininess[3];
// Temporary system buffer for creating textures
unsigned char* fTextureData;
// Pass tracking
bool fInColorPass;
bool fInShadowPass;
// Draw with texture or shader flag
bool fDrawUsingShader;
// VP2 texture
MHWRender::MTexture *fTexture;
// VP2 color shader
MHWRender::MShaderInstance *fColorShaderInstance;
// VP2 shadow shader
MHWRender::MShaderInstance *fShadowShaderInstance;
mutable bool fShaderBound;

这是一个类构造函数。该类名为hwPhongShaderOverrideMObject,它源自MHWRender::MPxShaderOverride,例如:

class hwPhongShaderOverrideMObject : public MHWRender::MPxShaderOverride
{
    ...
};

hwPhongShaderOverride(const MObject& obj)指定此构造函数接受一个参数作为输入,即对MObject实例的常量引用。构造函数是在类声明本身内部内联声明和实现的,而不是与其声明分开实现。这两种方法在C++中都是允许的。

:{之间的所有内容都是构造函数的初始化列表。它初始化类的成员。

:开始初始化列表。

MHWRender::MPxShaderOverride(obj)正在将输入对象传递给基类构造函数。基类必须始终首先构造。

, fShaderNode(NULL)正在将fShaderNode成员初始化为NULL。

CCD_ 11正在将CCD_ 12成员初始化为NULL。

依此类推,直到到达{以结束初始化列表。然后,在类成员首先初始化后,像任何其他函数一样,输入构造函数的主体

下面是一个构造函数。

hwPhongShaderOverride(const MObject& obj)
: MHWRender::MPxShaderOverride(obj)
, fShaderNode(NULL)
, fTextureData(NULL)
, fDrawUsingShader(true) // Disabling this will use fixed-function which only has an OpenGL implementation
, fShaderBound(false)
, fTexture(NULL)
, fInColorPass(false)
, fColorShaderInstance(NULL)
, fInShadowPass(false)
, fShadowShaderInstance(NULL)
, fTransparency(0.0f)
{
    // Create a shader instance to use for drawing
    //
    if (fDrawUsingShader)
    {
        createShaderInstance();
    }
    fAmbient[0] = fAmbient[1] = fAmbient[2] = 0.0f;
    fDiffuse[0] = fDiffuse[1] = fDiffuse[2] = fDiffuse[3] = 0.0f;
    fSpecular[0] = fSpecular[1] = fSpecular[2] = 0.0f;
    fShininess[0] = fShininess[1] = fShininess[2] = 500.0f;
}

它使用初始值设定项列表通过调用其构造函数来初始化其成员变量。hwPhongShaderOverride继承自MHWRender::MPxShaderOverride,因此它调用MHWRender::MPxShaderOverride的构造函数作为初始值设定项列表中的第一个元素(即MHWRender::MPxShaderOverride(obj).

可以切换fDrawUsingShader以创建着色器的实例(如构造函数主体中所示)。之后,它将一些初始值添加到四个阵列fAmbientfDiffusefSpecularfShininess

相关内容

  • 没有找到相关文章

最新更新