スポンサーリンク

glm::intersectRaySphereでレイと球の交点を求める

glm::intersectRaySphereで球とレイの交点を算出できる。

この関数があるので自前実装にはあまり意味がない。

欠点はレイの始点に近い方の点しか取れない所。ただし普通の用途では問題ない。

#include <iostream>

#include <gl/glm-0.9.9/gtx/string_cast.hpp>

#include <gl/glm-0.9.9/glm.hpp>

// 球とRay , 面とRayの交差判定に必要
#include <gl/glm-0.9.9/gtx/intersect.hpp>

int main()
{
  /////////////////////////////
  ////// 球と線分の交点 ///////
  /////////////////////////////

  // テスト値を設定
  const glm::vec3 center{ -2.72692 ,-2.51743,3.0258 };
  const float r = 2.44975f;
  const glm::vec3 from{ 1.69882,-1.63121,3.75584 };
  const glm::vec3 to{ -7.42946 ,-4.48611 ,2.84412 };

  const glm::vec3 raynorm = glm::normalize(to - from);

  // 球と線分の交点を格納
  glm::vec3 CROSS;

  float direction;// fromからの距離
  if (glm::intersectRaySphere(from, raynorm, center, glm::pow(r, 2), direction) == true) {

    // fromに近い方の頂点が取得可能
    CROSS = from + raynorm * direction;

    std::cout << glm::to_string(CROSS);

    // 出力結果
    // vec3(-0.346964, -2.271036, 3.551510)
  }
  else {

    std::cout << "交差していない";

  }


}

コメントを残す

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

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


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