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


C++ Matrix4::TransformPoint方法代码示例

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


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

示例1: Roll

void Camera::Roll(float theta)
{
    Matrix4 Rotation = Matrix4::Rotation(_look, theta);
    _up = Rotation.TransformPoint(_up);
    _right = Rotation.TransformPoint(_right);
    _look = Rotation.TransformPoint(_look);
}
开发者ID:kbinani,项目名称:dxrip,代码行数:7,代码来源:Camera.cpp

示例2: Render

void SoftwareGraphicsDevice::Render(const Mesh &M)
{
    //uses AliasRender to render the provided polygon.
    MeshVertex Polygon[10];
    int i,i2,i2p1,ic=M.IndexCount(),LocalVC;
    const MeshVertex *V = M.Vertices();
    const DWORD *I = M.Indices();

    Clipper Clip;
    Clip.Init(float(Bmp.Width()-1),float(Bmp.Height()-1));    //prepare for clipping

    Matrix4 VTranslate = Matrix4::Translation(Vec3f(1.0f,1.0f,0.0f));
    Matrix4 VScale = Matrix4::Scaling(Vec3f(Bmp.Width()/2.0f,Bmp.Height()/2.0f,1.0f));
    Matrix4 Viewport = VTranslate * VScale;

    Matrix4 TotalViewport = Total * Viewport;    //get the total transform

    for(i=0; i<ic; i+=3)
    {
        LocalVC = 3;
        Polygon[0] = V[I[i+0]];
        Polygon[1] = V[I[i+1]];
        Polygon[2] = V[I[i+2]];    //load the current triangle

        //
        // Transform into screen space
        //
        Polygon[0].Pos = TotalViewport.TransformPoint(Polygon[0].Pos);
        Polygon[1].Pos = TotalViewport.TransformPoint(Polygon[1].Pos);
        Polygon[2].Pos = TotalViewport.TransformPoint(Polygon[2].Pos);

        Clip.Clip(Polygon, LocalVC);    //clip

        if(_Wireframe)
        {
            for(i2=0; i2<LocalVC; i2++)
            {
                i2p1 = i2 + 1;
                if(i2p1 == LocalVC) i2p1 = 0;

                //if we're in _Wireframe, draw lines representing the polygon
                if(Polygon[i2].Pos.z >= 0.0f && Polygon[i2].Pos.z <= 1.0f && Polygon[i2p1].Pos.z >= 0.0f && Polygon[i2p1].Pos.z <= 1.0f)
                    PR.DrawLine(Bmp, int(Polygon[i2].Pos.x), int(Polygon[i2].Pos.y), int(Polygon[i2p1].Pos.x), int(Polygon[i2p1].Pos.y), Polygon[i2].Color);
            }
        }
        else
        {
            //if we're not in _Wireframe, draw the polygon directly
            PR.DrawPolygon(Bmp, Z, Polygon, LocalVC);
        }
    }
}
开发者ID:ghsoftco,项目名称:basecode14,代码行数:52,代码来源:SoftwareGraphicsDevice.cpp

示例3: LoadMeshList

void BaseMesh::LoadMeshList(const Vector< pair<const BaseMesh *, Matrix4> > &Meshes)
{
    UINT NewVertexCount = 0, NewFaceCount = 0;
    for(UINT MeshIndex = 0; MeshIndex < Meshes.Length(); MeshIndex++)
    {
        const BaseMesh &CurMesh = *(Meshes[MeshIndex].first);
        NewVertexCount += CurMesh.VertexCount();
        NewFaceCount += CurMesh.FaceCount();
    }
    Allocate(NewVertexCount, NewFaceCount);
    UINT VertexBaseIndex = 0, IndexBaseIndex = 0;
    for(UINT MeshIndex = 0; MeshIndex < Meshes.Length(); MeshIndex++)
    {
        const BaseMesh &CurMesh = *(Meshes[MeshIndex].first);
        Matrix4 Transform = Meshes[MeshIndex].second;
        for(UINT VertexIndex = 0; VertexIndex < CurMesh.VertexCount(); VertexIndex++)
        {
            Vertices()[VertexBaseIndex + VertexIndex] = CurMesh.Vertices()[VertexIndex];
            Vertices()[VertexBaseIndex + VertexIndex].Pos = Transform.TransformPoint(Vertices()[VertexBaseIndex + VertexIndex].Pos);
        }
        for(UINT FaceIndex = 0; FaceIndex < CurMesh.FaceCount(); FaceIndex++)
        {
            for(UINT LocalVertexIndex = 0; LocalVertexIndex < 3; LocalVertexIndex++)
            {
                Indices()[IndexBaseIndex + FaceIndex * 3 + LocalVertexIndex] = CurMesh.Indices()[FaceIndex * 3 + LocalVertexIndex] + VertexBaseIndex;
            }
        }
        VertexBaseIndex += CurMesh.VertexCount();
        IndexBaseIndex += CurMesh.FaceCount() * 3;
    }
}
开发者ID:kbinani,项目名称:dxrip,代码行数:31,代码来源:BaseMeshMemory.cpp

示例4:

bool M4TransformPointTest::DoTest()
{
	Matrix4 Dummy;
	Dummy.TransformPoint(m_oVector, m_fAngle, m_fScale, m_cAxis, m_oTransVector);
	cout<< "\n---------------M4TransformPointTest---------------\n";
	return (m_oVector == m_oResult);
}
开发者ID:iancarnation,项目名称:AIE_Projects,代码行数:7,代码来源:Matrix4UTests.cpp

示例5: CreateViewPlane

void BaseMesh::CreateViewPlane(float EyeDist, UINT slices, MatrixController &MC)
{
    Matrix4 Perspective = MC.Perspective, PInverse;

    PInverse = Perspective.Inverse();

    Vec3f PerspectiveCoord(0.0f, 0.0f, EyeDist);
    PerspectiveCoord = Perspective.TransformPoint(PerspectiveCoord);    //get the top-left coord in persp. space

    PerspectiveCoord.x = 1.0f;
    PerspectiveCoord.y = -1.0f;
    PerspectiveCoord = PInverse.TransformPoint(PerspectiveCoord);        //get the bottom-right coord in persp. space

    CreatePlane(2.0f, slices, slices);    //create the X-Y plane

    Matrix4 Scale = Matrix4::Scaling(Vec3f(PerspectiveCoord.x, PerspectiveCoord.y, 1.0f));    //scale it appropriately,
    Matrix4 Translate = Matrix4::Translation(Vec3f(0.0f,0.0f,PerspectiveCoord.z));            //translate it away from the eye,

    Matrix4 VInverse = MC.View.Inverse();    //we need to transform our mesh and we want to fact the view and world transforms in
    Matrix4 WInverse = MC.World.Inverse();

    //
    // Translate and scale, then go into object space by multiplying through the inverse of view/world.
    //
    ApplyMatrix(Translate * Scale * VInverse * WInverse);
}
开发者ID:ghsoftco,项目名称:basecode14,代码行数:26,代码来源:BaseMeshShapes.cpp

示例6: GetCameraLine

void Indicator::GetCameraLine(const Matrix4 &Perspective, const Camera &C, float x, float y, Vec3f &P1Out, Vec3f &P2Out)
{
    Matrix4 Total = (C.Matrix() * Perspective).Inverse();    //the perspective -> view transform
    Vec3f P1(x * 2.0f - 1.0f, y * 2.0f - 1.0f, 0.0f), P2;
    P2 = Vec3f(P1.x, P1.y, 1.0f);                    //P1 and P2 are the segment corresponding to (x, y) on the perpsective cube

    P1Out = Total.TransformPoint(P1);
    P2Out = Total.TransformPoint(P2);
}
开发者ID:kbinani,项目名称:dxrip,代码行数:9,代码来源:Indicator.cpp

示例7: ApplyMatrix

void BaseMesh::ApplyMatrix(const Matrix4 &M)
{
    UINT vc = VertexCount();
    MeshVertex *V = Vertices();

    for(UINT i = 0; i < vc; i++)
    {
        V[i].Pos = M.TransformPoint(V[i].Pos);
        V[i].Normal = M.TransformNormal(V[i].Normal);
    }
}
开发者ID:ghsoftco,项目名称:basecode14,代码行数:11,代码来源:BaseMeshVertexModifiers.cpp

示例8: ProcessUserInput

void FluidApplication::ProcessUserInput(float secondsBetweenFrames) {
  const float cameraMoveSpeed = 0.1f * secondsBetweenFrames;
  
  Vector3 pan = { 0.0f, 0.0f, 0.0f };
  // Move camera forward and backward using the mouse wheel.
  pan.z = DirectInput()->MouseMoveZ();
  // Move camera sideways if the right button is down.
  if (DirectInput()->MouseDown(1)) {
    pan.x = -DirectInput()->MouseMoveX();
    pan.y = DirectInput()->MouseMoveY();
  }
  
  // Update camera position.
  _renderer->PanCamera(pan * cameraMoveSpeed);

  static Vector3 p0 = {0.0f, 0.0f, 0.0f};  // Records "mouse-pressed" location.
  static Vector3 p1 = {0.0f, 0.0f, 0.0f};  // Records "mouse-release" location.
  
  if (DirectInput()->MousePressed(0)) {
    p0 = MousePosWindowCoords();
  }
  
  if (DirectInput()->MouseReleased(0)) {
    p1 = MousePosWindowCoords();
    const Sizei size = GetClientSize();
    const Matrix4 window2ndc = NDCToWindowMatrix(0, 0, size.width, size.height).Inverse3x4();
    // Get coord in texture space
    const Vector2 p0tex = _renderer->CoordToTextureSpace(window2ndc.TransformPoint(p0).XY());
    const Vector2 p1tex = _renderer->CoordToTextureSpace(window2ndc.TransformPoint(p1).XY());
    const Vector2 dir = p1tex - p0tex;
    // Add the impulse to the fluid simulation.
    Fluid::Pulse pulse;
    pulse.position = p0tex; 
    pulse.direction = dir; 
    pulse.sigma = kFluidSplatSigma;
    pulse.amplitude = kFluidSplatAmplitude;
    //The pulse will be replaced, no matter if it has been processed or not.
    _fluid.AddForces(pulse);
  }

  // Switch between render modes.
  if (DirectInput()->KeyPressed(DIK_1)) {
    _renderer->SetRenderMode(FluidRenderer::kVelocitiesAsColors);
  } else if (DirectInput()->KeyPressed(DIK_2)) {
    _renderer->SetRenderMode(FluidRenderer::kVelocitiesAsLines);
  }
}
开发者ID:ingo2,项目名称:gargleblaster,代码行数:47,代码来源:FluidApplication.cpp


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