⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgctubesurfaceg.h

📁 《3D游戏引擎设计》的源码
💻 H
字号:
// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement.  The various license agreements may be found at
// the Magic Software web site.  This file is subject to the license
//
// FREE SOURCE CODE
// http://www.magic-software.com/License/free.pdf

#ifndef MGCTUBESURFACEG_H
#define MGCTUBESURFACEG_H

#include "MgcVector3.h"
#include "MgcSurface.h"
class MgcMultipleCurve3;


class MgcTubeSurfaceG : public MgcSurface
{
public:
    typedef MgcReal (*RadialFunction)(MgcReal);

    // Construction and destruction.  MgcTubeSurfaceG accepts responsibility
    // for deleting the input curve.
    MgcTubeSurfaceG (MgcMultipleCurve3* pkMedial, RadialFunction oRadial,
        bool bClosed, unsigned int uiMedialSamples,
        unsigned int uiSliceSamples, bool bSampleByArcLength,
        bool bWantNormals, const MgcVector3* pkUpVector);

    virtual ~MgcTubeSurfaceG ();

    // curve data
    MgcMultipleCurve3*& Medial ();
    const MgcMultipleCurve3* Medial () const;
    RadialFunction& Radial ();
    RadialFunction Radial () const;
    bool& Closed ();
    bool Closed () const;

    // mesh data
    unsigned int GetVertexQuantity () const;
    MgcVector3* GetVertices ();
    MgcVector3* GetNormals ();
    unsigned int GetTriangleQuantity () const;
    const unsigned int* GetConnectivity () const;

    // Tessellation.  If no up vector is specified, the tessellation uses
    // the Frenet frame to generate the surface.  Otherwise the up vector
    // and tangent vector are used to generate frames.
    void Tessellate (unsigned int uiMedialSamples,
        unsigned int uiSliceSamples, bool bSampleByArcLength,
        bool bWantNormals, const MgcVector3* pkUpVector);

    unsigned int GetMedialSamples () const;
    unsigned int GetSliceSamples () const;
    bool GetSampleByArcLength () const;
    bool GetWantNormals () const;
    const MgcVector3* GetUpVector () const;

protected:
    MgcTubeSurfaceG ();

    // tessellation
    unsigned int Index (unsigned short uiS, unsigned short uiM);
    void ComputeVertices ();
    void ComputeNormals ();
    void ComputeConnectivity ();

    // curve data
    MgcMultipleCurve3* m_pkMedial;
    RadialFunction m_oRadial;
    bool m_bClosed;

    // mesh data
    unsigned int m_uiVertexQuantity;
    MgcVector3* m_akVertex;
    MgcVector3* m_akNormal;
    unsigned int m_uiTriangleQuantity;
    unsigned int* m_auiConnect;

    // tessellation data
    unsigned int m_uiMedialSamples;
    unsigned int m_uiSliceSamples;
    bool m_bSampleByArcLength;
    bool m_bWantNormals;
    const MgcVector3* m_pkUpVector;
};

#include "MgcTubeSurfaceG.inl"

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -