スポンサーリンク

UV Sphereを描画(1)

UV球は球を緯度、経度で表現したような球のことを言う。

参考文献に合わせてStep,Sectorで表現すると以下のような関係になる

glm::vec3 getPoint(
  const int sectorstep, const int sectorCount,
  const int stackstep, const int stackCount,
  const float r) {


  float theta = 2 * 3.14159 * (float(sectorstep) / sectorCount);
  float phi = 3.14159 / 2.f - 3.14159 * (float(stackstep) / stackCount);

  float x = (r * cos(phi)) * cos(theta);
  float y = (r * cos(phi)) * sin(theta);
  float z = r * sin(phi);
  return glm::vec3(x, y, z);
}

      
// 球を描画
void draw_uv_sphere(const int stackCount, const int SectorCount,const float r) {

  for (int stackStep = 0; stackStep < stackCount; stackStep++) {


    for (int sectorStep = 0; sectorStep < SectorCount; sectorStep++) {

      glm::vec3 k1 = getPoint(sectorStep, SectorCount, stackStep, stackCount, r);
      glm::vec3 k2 = getPoint(sectorStep, SectorCount, stackStep + 1, stackCount, r);
      glm::vec3 k3 = getPoint(sectorStep + 1, SectorCount, stackStep + 1, stackCount, r);
      glm::vec3 k4 = getPoint(sectorStep + 1, SectorCount, stackStep, stackCount, r);

      // 四角形で描画
      glBegin(GL_LINE_LOOP);
      glVertex3fv(glm::value_ptr(k1));
      glVertex3fv(glm::value_ptr(k2));
      glVertex3fv(glm::value_ptr(k3));
      glVertex3fv(glm::value_ptr(k4));
      glEnd();

      /*
      k1       k1+1 (k4)
      +-------+
      |      /|
      |     / |
      |    /  |
      |   /   |
      |  /    |
      | /     |
      |/      |
      +-------+
      k2        k2+1 (k3)

      */



    }

  }

}

参考文献

http://www.songho.ca/opengl/gl_sphere.html

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: