spheremesh.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // mesh.h
  2. // 
  3. // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _SPHEREMESH_H_
  10. #define _SPHEREMESH_H_
  11. #include <celmath/vecmath.h>
  12. #include <celmath/frustum.h>
  13. #include <celengine/mesh.h>
  14. #include <celengine/dispmap.h>
  15. /*! The SphereMesh class is used to generate displacement mapped
  16.  *  spheres when loading the now-deprecated .cms geometry files.
  17.  *  It remains in the Celestia code base for backward compatibility,
  18.  *  and it's use is discouraged.
  19.  */
  20. class SphereMesh
  21. {
  22. public:
  23.     SphereMesh(float radius, int _nRings, int _nSlices);
  24.     SphereMesh(Vec3f size, int _nRings, int _nSlices);
  25.     SphereMesh(Vec3f size,
  26.                const DisplacementMap& dispmap,
  27.                float height = 1.0f);
  28.     SphereMesh(Vec3f size,
  29.                int _nRings, int _nSlices,
  30.                DisplacementMapFunc func,
  31.                void* info);
  32.     ~SphereMesh();
  33.     //! Convert this object into a standard Celestia mesh.
  34.     Mesh* convertToMesh() const;
  35.  private:
  36.     void createSphere(float radius, int nRings, int nSlices);
  37.     void generateNormals();
  38.     void scale(Vec3f);
  39.     void fixNormals();
  40.     void displace(const DisplacementMap& dispmap, float height);
  41.     void displace(DisplacementMapFunc func, void* info);
  42.     int nRings;
  43.     int nSlices;
  44.     int nVertices;
  45.     float* vertices;
  46.     float* normals;
  47.     float* texCoords;
  48.     float* tangents;
  49.     int nIndices;
  50.     unsigned short* indices;
  51. };
  52. #endif // _SPHEREMESH_H_