📄 mgcsoftt.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 + -