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

OpenGL

开发平台:

Visual C++

  1. // vertexlist.h
  2. //
  3. // Copyright (C) 2001, Chris Laurel
  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 _CELENGINE_VERTEXLIST_H_
  10. #define _CELENGINE_VERTEXLIST_H_
  11. #include <celutil/basictypes.h>
  12. #include <celutil/color.h>
  13. #include <celutil/reshandle.h>
  14. #include <celmath/vecmath.h>
  15. #include <celmath/aabox.h>
  16. #include <celmath/ray.h>
  17. class VertexList
  18. {
  19.  public:
  20.     enum {
  21.         VertexNormal   = 0x01,
  22.         VertexColor    = 0x02,
  23.         VertexColor0   = 0x02,
  24.         VertexColor1   = 0x04,
  25.         TexCoord0      = 0x08,
  26.         TexCoord1      = 0x10,
  27.     };
  28.     class Vertex
  29.     {
  30.     public:
  31.         Point3f point;
  32.         Vec3f normal;
  33.         Color color;
  34.         Point2f texCoords[2];
  35.     };
  36.     union VertexPart
  37.     {
  38.         float f;
  39.         unsigned char c[4];
  40.     };
  41.  public:
  42.     VertexList(uint32 _parts, uint32 initialVertexPoolSize = 0);
  43.     ~VertexList();
  44.     void addVertex(const Vertex& v);
  45.     Color getDiffuseColor() const;
  46.     void setDiffuseColor(Color);
  47.     Color getSpecularColor() const;
  48.     void setSpecularColor(Color);
  49.     float getShininess() const;
  50.     void setShininess(float);
  51.     ResourceHandle getTexture() const;
  52.     void setTexture(ResourceHandle);
  53.     void render();
  54.     bool pick(const Ray3d& ray, double& distance);
  55.     AxisAlignedBox getBoundingBox() const;
  56.     void transform(Vec3f translation, float scale);
  57.     uint32 getVertexParts() const;
  58.     void* getVertexData() const;
  59.     uint32 getVertexCount() const;
  60.  private:
  61.     uint32 parts;
  62.     uint32 vertexSize;
  63.     uint32 nVertices;
  64.     uint32 maxVertices;
  65.     VertexPart* vertices;
  66.     Color diffuseColor;
  67.     Color specularColor;
  68.     float shininess;
  69.     ResourceHandle texture;
  70.     AxisAlignedBox bbox;
  71. };
  72. #endif // _CELENGINE_VERTEXLIST_H_