当前位置: 首页>>代码示例>>C++>>正文


C++ Member::calcForwardVector方法代码示例

本文整理汇总了C++中Member::calcForwardVector方法的典型用法代码示例。如果您正苦于以下问题:C++ Member::calcForwardVector方法的具体用法?C++ Member::calcForwardVector怎么用?C++ Member::calcForwardVector使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Member的用法示例。


在下文中一共展示了Member::calcForwardVector方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: updateMember

void NGLScene::updateMember(Member &io_toUpdate)
{
  ngl::Vec3 alignment = calcAlignment(io_toUpdate) * 10;
  ngl::Vec3 cohesion = /*followSphere->getPosition() - */calcCohesion(io_toUpdate) *10;
  ngl::Vec3 separation = calcSeparation(io_toUpdate);
  ngl::Vec3 newVelocity = (followSphere->getPosition()) -
                          (io_toUpdate.getPosition() +
                          (ngl::Vec3(alignment + cohesion + separation)));
  for(unsigned int i = 0; i<ShapeStore.ShapeList.size(); i++)
  {
    float shapeDist = calcDistance(getMemberPosition(ShapeStore.ShapeList[i]), io_toUpdate.getPosition());

    if(abs(shapeDist) < 8.0f)
    {
      newVelocity += (io_toUpdate.getPosition() - getMemberPosition(ShapeStore.ShapeList[i])) * 100;
    }
  }

  if(newVelocity.lengthSquared() != 0.0f)
  {
    newVelocity.normalize();
  }
  //std::cout<<"x = "<<newVelocity.m_x<<" y = "<<newVelocity.m_y<<" z = "<<newVelocity.m_z<<"\n";

//  if(newVelocity.m_x < 0.0f)
//  {
//    newVelocity.m_x = -newVelocity.m_x;
//  }
//  if(newVelocity.m_y < 0.0f)
//  {
//    newVelocity.m_y = -newVelocity.m_y;
//  }
//  if(newVelocity.m_z < 0.0f)
//  {
//    newVelocity.m_z = -newVelocity.m_z;
//  }

  float dist = ngl::Vec3(followSphere->getPosition() - io_toUpdate.getPosition()).length();

  if (dist > 15.0f)
  {
    io_toUpdate.setForwardVector(followSphere->getPosition());
    io_toUpdate.calcSideVector();
  }
  else
  {
    io_toUpdate.setSideVector(followSphere->getPosition());
    io_toUpdate.calcForwardVector();
  }

  io_toUpdate.getForwardVector().normalize();
  if(io_toUpdate.getForwardVector().m_x <0.0f)
  {
    io_toUpdate.setForwardVector(ngl::Vec3(-io_toUpdate.getForwardVector().m_x,
                                           io_toUpdate.getForwardVector().m_y,
                                           io_toUpdate.getForwardVector().m_z));
  }

  if(io_toUpdate.getForwardVector().m_y <0.0f)
  {
    io_toUpdate.setForwardVector(ngl::Vec3(io_toUpdate.getForwardVector().m_x,
                                           -io_toUpdate.getForwardVector().m_y,
                                           io_toUpdate.getForwardVector().m_z));
  }

  if(io_toUpdate.getForwardVector().m_z <0.0f)
  {
    io_toUpdate.setForwardVector(ngl::Vec3(io_toUpdate.getForwardVector().m_x,
                                           io_toUpdate.getForwardVector().m_y,
                                           -io_toUpdate.getForwardVector().m_z));
  }


  io_toUpdate.setVelocity(newVelocity * 0.0001f * (io_toUpdate.getForwardVector() + io_toUpdate.getPosition()) , false);

  if(io_toUpdate.getVelocity().m_x > 0.5f)
  {
    io_toUpdate.setVelocity(ngl::Vec3(0.5f,
                                      io_toUpdate.getVelocity().m_y,
                                      io_toUpdate.getVelocity().m_z),
                                      true);
  }

  else if(io_toUpdate.getVelocity().m_x < -0.5f)
  {
    io_toUpdate.setVelocity(ngl::Vec3(-0.5f,
                                      io_toUpdate.getVelocity().m_y,
                                      io_toUpdate.getVelocity().m_z),
                                      true);
  }

  if(io_toUpdate.getVelocity().m_y > 0.5f)
  {
    io_toUpdate.setVelocity(ngl::Vec3(io_toUpdate.getVelocity().m_x,
                                      0.5f,
                                      io_toUpdate.getVelocity().m_z),
                                      true);
  }

  else if(io_toUpdate.getVelocity().m_y < -0.5f)
//.........这里部分代码省略.........
开发者ID:Elmatto753,项目名称:Specialist-Project,代码行数:101,代码来源:NGLScene.cpp


注:本文中的Member::calcForwardVector方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。