Ejemplo n.º 1
0
void Camera::turn(vec3& v1, vec3& v2, float amount)
{
   double cosTheta = std::cos(amount);
   double sinTheta = std::sin(amount);

   float vX =  cosTheta*v1[0] + sinTheta*v2[0]; 
   float vY =  cosTheta*v1[1] + sinTheta*v2[1]; 
   float vZ =  cosTheta*v1[2] + sinTheta*v2[2]; 

   float nX = -sinTheta*v1[0] + cosTheta*v2[0]; 
   float nY = -sinTheta*v1[1] + cosTheta*v2[1]; 
   float nZ = -sinTheta*v1[2] + cosTheta*v2[2]; 

   v1.set(vX, vY, vZ);
   v2.set(nX, nY, nZ);
}
Ejemplo n.º 2
0
bool getPosition(const TiXmlElement *root, vec3 &pos) {
  bool ok1, ok2, ok3;
  if (root == NULL) {
    QTWARNING("The given root is not a Position Element");
    return false;
  }
  QString rootValue = root->Value();
  rootValue = rootValue.stripWhiteSpace();
  if (!(rootValue == "position" || rootValue == "orientation")) {
    QTWARNING("The given root is not a Position Element");
    return false;
  }
  QString valueStr = root->GetText();
  valueStr = valueStr.simplifyWhiteSpace().stripWhiteSpace();
  QStringList l;
  l = QStringList::split(' ', valueStr);
  if (l.count() != 3) {
    QTWARNING("Invalid position input");
    return false;
  }
  double x, y, z;
  x = l[0].toDouble(&ok1);
  y = l[1].toDouble(&ok2);
  z = l[2].toDouble(&ok3);
  if (!ok1 || !ok2 || !ok3) {
    QTWARNING("Invalid position input");
    return false;
  }
  pos.set(x, y, z);
  return true;
}
Ejemplo n.º 3
0
bool Camera::screenToWorld(int screenX, int screenY, vec3& worldCoords)
{
   double x, y, z;
   GLint result = gluUnProject(screenX, screenY, 0.0, 
                               myModelMatrix, myProjMatrix, myViewport, 
                               &x, &y, &z);

   worldCoords.set(x, y, z);
   return result == GL_TRUE;
}
Ejemplo n.º 4
0
//--------------------------------------------------------------------------------
// get target look at
//--------------------------------------------------------------------------------
bool zz_camera_follow::get_target_dir (vec3& dir)
{
	if (!target_) {
		dir.set(0, 1, 0);
		return false;
	}
	dir = target_->get_look_at();
	dir.normalize();
	return true;
}
Ejemplo n.º 5
0
/////////////////////////////////////////////////////////////////////
// get the closest point to pt in the primative
bool
sphere::
closestPtIn ( vec3& dest, ValueType xval, ValueType yval, ValueType zval ) const
{
	if ( isEmpty () )
		return false;

	if ( contains ( xval, yval, zval ) )
		dest.set ( xval, yval, zval );
	else
	{
		dest.set ( xval, yval, zval );
		dest -= center;
		dest.normalize ();
		dest *= radius;
		dest += center;
	}
	
	return true;
}
Ejemplo n.º 6
0
void ToIntColour(const vec3<F32>& floatColour, vec3<I32>& colourOut) noexcept {
    colourOut.set(to_U32(FLOAT_TO_SCHAR_SNORM(floatColour.r)),
                  to_U32(FLOAT_TO_SCHAR_SNORM(floatColour.g)),
                  to_U32(FLOAT_TO_SCHAR_SNORM(floatColour.b)));
}
Ejemplo n.º 7
0
void ToByteColour(const vec3<F32>& floatColour, vec3<U8>& colourOut) noexcept {
    colourOut.set(FLOAT_TO_CHAR_SNORM(floatColour.r),
                  FLOAT_TO_CHAR_SNORM(floatColour.g),
                  FLOAT_TO_CHAR_SNORM(floatColour.b));
}
Ejemplo n.º 8
0
void ToFloatColour(const vec3<U32>& uintColour, vec3<F32>& colourOut) noexcept {
    colourOut.set(uintColour.r / 255.0f,
                  uintColour.g / 255.0f,
                  uintColour.b / 255.0f);
}
Ejemplo n.º 9
0
void ToFloatColour(const vec3<U8>& byteColour, vec3<F32>& colourOut) noexcept {
    colourOut.set(CHAR_TO_FLOAT_SNORM(byteColour.r),
                  CHAR_TO_FLOAT_SNORM(byteColour.g),
                  CHAR_TO_FLOAT_SNORM(byteColour.b));
}