⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgcsoftt.cpp

📁 3D Game Engine Design Source Code非常棒
💻 CPP
字号:
// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement.  The various license agreements may be found at
// the Magic Software web site.  This file is subject to the license
//
// RESTRICTED USE SOURCE CODE
// http://www.magic-software.com/License/restricted.pdf

#include "MgcSoftRenderer.h"

//---------------------------------------------------------------------------
void MgcSoftRenderer::DrawEdgeT (unsigned int uiV0, unsigned int uiV1)
{
    EdgeSetupParameters
    LinAttrSetup(2)

    MgcVector2& rkT0 = m_kMesh.Texture(uiV0);
    MgcVector2& rkT1 = m_kMesh.Texture(uiV1);
    aiA0[0] = m_kImage.GetX(rkT0.x);
    aiA0[1] = m_kImage.GetY(rkT0.y);
    aiA1[0] = m_kImage.GetX(rkT1.x);
    aiA1[1] = m_kImage.GetY(rkT1.y);

    EdgeInitX
    InitLinAttrX
    EdgePrologTraverseX

    m_akBuffer[iIndex] = m_kImage.GetColor(aiA0[0],aiA0[1]);

    EdgeReturnX
    UpdateLinAttrX
    EdgeEpilogTraverseX
    EdgeExitX

    EdgeInitY
    InitLinAttrY
    EdgePrologTraverseY

    m_akBuffer[iIndex] = m_kImage.GetColor(aiA0[0],aiA0[1]);

    EdgeReturnY
    UpdateLinAttrY
    EdgeEpilogTraverseY
    EdgeExitY
}
//---------------------------------------------------------------------------
void MgcSoftRenderer::DrawTriT (unsigned int uiV0, unsigned int uiV1,
    unsigned int uiV2)
{
    TriangleSetupParameters
    LinAttrSetup(2)

    m_uiNumLinAttr = 2;  // u, v
    m_uiNumPerAttr = 0;  // none
    MgcVector2& rkT0 = m_kMesh.Texture(uiV0);
    MgcVector2& rkT1 = m_kMesh.Texture(uiV1);
    MgcVector2& rkT2 = m_kMesh.Texture(uiV2);
    m_aafLinAttr[0][0] = rkT0.x;
    m_aafLinAttr[0][1] = rkT0.y;
    m_aafLinAttr[1][0] = rkT1.x;
    m_aafLinAttr[1][1] = rkT1.y;
    m_aafLinAttr[2][0] = rkT2.x;
    m_aafLinAttr[2][1] = rkT2.y;

    TriBeginLoop

    aiA0[0] = m_kImage.GetX(m_aafLinAttrMin[iY][0]);
    aiA0[1] = m_kImage.GetY(m_aafLinAttrMin[iY][1]);
    aiA1[0] = m_kImage.GetX(m_aafLinAttrMax[iY][0]);
    aiA1[1] = m_kImage.GetY(m_aafLinAttrMax[iY][1]);

    if ( iDx > 1 )
    {
        InitLinAttrX
        for (int iX = iX0, iAx = 2*iDx; iX <= iX1; iX++, iIndex++)
        {
            m_akBuffer[iIndex] = m_kImage.GetColor(aiA0[0],aiA0[1]);
            UpdateLinAttrX
        }
    }
    else if ( iDx == 1 )
    {
        m_akBuffer[iIndex++] = m_kImage.GetColor(aiA0[0],aiA0[1]);
        m_akBuffer[iIndex] = m_kImage.GetColor(aiA1[0],aiA1[1]);
    }
    else
    {
        m_akBuffer[iIndex] = m_kImage.GetColor(aiA0[0],aiA0[1]);
    }

    TriEndLoop
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -