本文整理汇总了C++中Quaternion::GetRotationMatrix方法的典型用法代码示例。如果您正苦于以下问题:C++ Quaternion::GetRotationMatrix方法的具体用法?C++ Quaternion::GetRotationMatrix怎么用?C++ Quaternion::GetRotationMatrix使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Quaternion
的用法示例。
在下文中一共展示了Quaternion::GetRotationMatrix方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DrawDebugCircle
/**
* Render a debug circle on the screen (Y axis is normal to the circle)
*
* @param inLocation World space location of the circle
* @param inRotation Rotation of the circle (Y axis is normal to the circle)
* @param inRadius The radius of the circle
* @param withColor The color of the circle
* @param inSegments Number of segments to divide the circle into
* @param bShaded Whether to shade the inside of the circle
*/
void RenderManager::DrawDebugCircle(const Vec4f& inLocation, const Quaternion& inRotation, const float inRadius, const ColorVector& withColor, const int inSegments, const bool bShaded)
{
const Matrix4x4 rotMatrix = inRotation.GetRotationMatrix();
const Vec4f xAxis = rotMatrix.GetXAxis();
const Vec4f zAxis = rotMatrix.GetZAxis();
const float theta = 2*PI/inSegments;
// Generate the circle vertices
Vec4f* circleVerts = new Vec4f[inSegments];
float currTheta = 0.f;
for(int i=0; i<inSegments; i++, currTheta+=theta)
{
circleVerts[i] = inLocation + inRadius*cos(currTheta)*xAxis + inRadius*sin(currTheta)*zAxis;
}
for(int i=0; i<inSegments; i++)
{
DrawDebugLine(circleVerts[i], circleVerts[(i+1)%inSegments], withColor);
}
if(bShaded)
{
for(int i=0; i<inSegments; i++)
{
DrawDebugLine(inLocation, circleVerts[i], ColorVector::Black);
}
}
delete[] circleVerts;
}
示例2: DrawDebugCube
/**
* Render a debug cube on the screen
*
* @param inLocation World space location of the cube
* @param inRotation Rotation of the cube
* @param inSize The length, width and height of the cube
* @param withColor The color of the cube
*/
void RenderManager::DrawDebugCube(const Vec4f& inLocation, const Quaternion& inRotation, const Vec3f& inSize, const ColorVector& withColor)
{
const Matrix4x4 rotMatrix = inRotation.GetRotationMatrix();
const Vec4f xAxis = rotMatrix.GetXAxis();
const Vec4f yAxis = rotMatrix.GetYAxis();
const Vec4f zAxis = rotMatrix.GetZAxis();
const Vec3f halfSize = inSize/2.f;
// Generate the cube vertices
Vec4f cubeVerts[8];
cubeVerts[0] = inLocation - halfSize.x*xAxis - halfSize.y*yAxis - halfSize.z*zAxis;
cubeVerts[1] = inLocation - halfSize.x*xAxis - halfSize.y*yAxis + halfSize.z*zAxis;
cubeVerts[2] = inLocation + halfSize.x*xAxis - halfSize.y*yAxis + halfSize.z*zAxis;
cubeVerts[3] = inLocation + halfSize.x*xAxis - halfSize.y*yAxis - halfSize.z*zAxis;
cubeVerts[4] = inLocation - halfSize.x*xAxis + halfSize.y*yAxis - halfSize.z*zAxis;
cubeVerts[5] = inLocation - halfSize.x*xAxis + halfSize.y*yAxis + halfSize.z*zAxis;
cubeVerts[6] = inLocation + halfSize.x*xAxis + halfSize.y*yAxis + halfSize.z*zAxis;
cubeVerts[7] = inLocation + halfSize.x*xAxis + halfSize.y*yAxis - halfSize.z*zAxis;
// Render the cube edges
DrawDebugLine(cubeVerts[0], cubeVerts[1], withColor);
DrawDebugLine(cubeVerts[1], cubeVerts[2], withColor);
DrawDebugLine(cubeVerts[2], cubeVerts[3], withColor);
DrawDebugLine(cubeVerts[3], cubeVerts[0], withColor);
DrawDebugLine(cubeVerts[4], cubeVerts[5], withColor);
DrawDebugLine(cubeVerts[5], cubeVerts[6], withColor);
DrawDebugLine(cubeVerts[6], cubeVerts[7], withColor);
DrawDebugLine(cubeVerts[7], cubeVerts[4], withColor);
DrawDebugLine(cubeVerts[0], cubeVerts[4], withColor);
DrawDebugLine(cubeVerts[1], cubeVerts[5], withColor);
DrawDebugLine(cubeVerts[2], cubeVerts[6], withColor);
DrawDebugLine(cubeVerts[3], cubeVerts[7], withColor);
}
示例3:
Transform::Transform( const Vec3& position, const Vec3& scale,const Quaternion& rotation )
{
m_ToWorld = rotation.GetRotationMatrix( );// m = R
m_ToWorld.MultScale( scale );// m = R S
m_ToWorld.SetToWorldPosition( position );// m = T R S
m_FromWorld = m_ToWorld.Inverse( );
m_IsFromWorldDirty = false;
}
示例4: DrawDebugAxes
/**
* Render debug coordinated axes on the screen (Color code: x - red, y - green, z - blue)
*
* @param inLocation World space location of the axes
* @param inRotation Rotation of the axes
* @param inSize The length, width and height of the axes
*/
void RenderManager::DrawDebugAxes(const Vec4f& inLocation, const Quaternion& inRotation, const Vec3f& inSize)
{
const Matrix4x4 rotMatrix = inRotation.GetRotationMatrix();
const Vec4f xAxis = rotMatrix.GetXAxis();
const Vec4f yAxis = rotMatrix.GetYAxis();
const Vec4f zAxis = rotMatrix.GetZAxis();
// Render the axes
DrawDebugLine(inLocation, inLocation + inSize.x*xAxis, ColorVector::Red);
DrawDebugLine(inLocation, inLocation + inSize.y*yAxis, ColorVector::Green);
DrawDebugLine(inLocation, inLocation + inSize.z*zAxis, ColorVector::Blue);
}
示例5: DrawDebugPlane
/**
* Render a debug plane on the screen (Y axis is normal to the plane)
*
* @param inLocation World space location of the plane
* @param inRotation Rotation of the plane (Y axis is normal to the plane)
* @param inSize The size of the plane
* @param withColor The color of the cube
* @param bShaded Shade the inside of the plane
* @param inGridDivs Number of grid lines to render inside the plane
* @param bShaded Whether to shade the inside of the plane
* @param inGridDivs Granularity of the shading
*/
void RenderManager::DrawDebugPlane(const Vec4f& inLocation, const Quaternion& inRotation, const float inSize, const ColorVector& withColor, const bool bShaded, const int inGridDivs)
{
const Matrix4x4 rotMatrix = inRotation.GetRotationMatrix();
const Vec4f xAxis = rotMatrix.GetXAxis();
const Vec4f zAxis = rotMatrix.GetZAxis();
const float halfSize = inSize/2.f;
// Generate the plane vertices
Vec4f planeVerts[4];
planeVerts[0] = inLocation - halfSize*xAxis - halfSize*zAxis;
planeVerts[1] = inLocation - halfSize*xAxis + halfSize*zAxis;
planeVerts[2] = inLocation + halfSize*xAxis + halfSize*zAxis;
planeVerts[3] = inLocation + halfSize*xAxis - halfSize*zAxis;
// Render the plane edges
DrawDebugLine(planeVerts[0], planeVerts[1], withColor);
DrawDebugLine(planeVerts[1], planeVerts[2], withColor);
DrawDebugLine(planeVerts[2], planeVerts[3], withColor);
DrawDebugLine(planeVerts[3], planeVerts[0], withColor);
if(bShaded)
{
const float gridSize = inSize/(float)inGridDivs;
// Generate the subdivided vertices
Vec4f* gridDivs = new Vec4f[4*(inGridDivs-1)];
for(int i=0; i<4; i++)
{
const Vec4f& start = planeVerts[i];
const Vec4f& end = planeVerts[(i+1)%4];
for(int j=0; j<inGridDivs-1; j++)
{
gridDivs[i*(inGridDivs-1) +j] = start + (j+1)*gridSize*((end-start).Normalize());
}
}
// Render the grid
DrawDebugLine(planeVerts[0], planeVerts[2], ColorVector::Black);
for(int edgeIndex=0; edgeIndex<4; edgeIndex+=2)
{
int nextEdgeIndex = (edgeIndex+1)%4;
for(int divIndex=0; divIndex<inGridDivs-1; divIndex++)
{
DrawDebugLine(gridDivs[edgeIndex*(inGridDivs-1) + divIndex], gridDivs[nextEdgeIndex*(inGridDivs-1) + (inGridDivs-2-divIndex)], ColorVector::Black);
}
}
delete[] gridDivs;
}
}
示例6: DrawDebugCylinder
/**
* Render a debug cylinder on the screen (The axis of the cylinder is along the Y axis)
*
* @param inLocation World space location of the cylinder
* @param inRotation Rotation of the cylinder (The axis of the cylinder is along the Y axis)
* @param inRadius The radius of the cylinder
* @param inHeight The height of the cylinder
* @param withColor The color of the cylinder
* @param inSegments Number of segments to divide the cylinder into
*/
void RenderManager::DrawDebugCylinder(const Vec4f& inLocation, const Quaternion& inRotation, const float inRadius, const float inHeight, const ColorVector& withColor, const int inSegments)
{
const Matrix4x4 rotMatrix = inRotation.GetRotationMatrix();
const Vec4f xAxis = rotMatrix.GetXAxis();
const Vec4f yAxis = rotMatrix.GetYAxis();
const Vec4f zAxis = rotMatrix.GetZAxis();
const float theta = 2*PI/inSegments;
const Vec4f topCircleCenter = inLocation + (inHeight/2.f)*yAxis;
const Vec4f bottomCircleCenter = inLocation - (inHeight/2.f)*yAxis;
// Generate the top circle vertices
Vec4f* topCircleVerts = new Vec4f[inSegments];
float currTheta = 0.f;
for(int i=0; i<inSegments; i++, currTheta+=theta)
{
topCircleVerts[i] = topCircleCenter + inRadius*cos(currTheta)*xAxis + inRadius*sin(currTheta)*zAxis;
}
// Generate the bottom circle vertices
Vec4f* bottomCircleVerts = new Vec4f[inSegments];
currTheta = 0.f;
for(int i=0; i<inSegments; i++, currTheta+=theta)
{
bottomCircleVerts[i] = bottomCircleCenter + inRadius*cos(currTheta)*xAxis + inRadius*sin(currTheta)*zAxis;
}
for(int i=0; i<inSegments; i++)
{
DrawDebugLine(topCircleVerts[i], topCircleVerts[(i+1)%inSegments], withColor);
DrawDebugLine(bottomCircleVerts[i], bottomCircleVerts[(i+1)%inSegments], withColor);
DrawDebugLine(topCircleVerts[i], bottomCircleVerts[i], withColor);
}
delete[] topCircleVerts;
delete[] bottomCircleVerts;
}