• 大小: 2.28MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-27
  • 语言: C/C++
  • 标签:

资源简介

计算机图形学课程设计代码(运用MFC编写的)之真实感图形学

资源截图

代码片段和文件信息

/////////////////////////////////////////////////////////////////////////////////
//
// BLine.cpp: implementation of the CBLine class.
#include “stdafx.h“
#include “BLine.h“

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBLine::CBLine()
{
}

CBLine::~CBLine()
{
}


//绘制一条直线直线的宽度为1直线的颜色由直线两个端点的颜色共同决定
//注意浮点颜色的有效值为[01]区间内的浮点小数
//与Windows相对应该算法也不包含最后一个点(x2y2)
//z1z2为当前点的深度值
//pCBpZB分别为颜色缓冲和深度缓冲
//注意从(x1y1)--(x2y2)与(x2y2)--(x1y1)略有些许不同.
//评价:该函数绘制的直线(像素位置)与Windows的LineTo()函数绘制的结果是完全一致的
void CBLine::Draw(int x1int y1  int x2 int y2 float z1 float z2 FLOATCOLORRGBA clr1 FLOATCOLORRGBA clr2 CColorBuffer* pCB CZBuffer* pZB)
{
//两端点间的水平偏移量和垂直偏移量
int nDx = x2 - x1;
int nDy = y2 - y1;

//两端点间的水平距离和垂直距离
int nIx = ABS(nDx);
int nIy = ABS(nDy);

//描点步数(增量总值)
int nInc = MAX(nIxnIy);

//直线当前点的颜色
float fPlotR = clr1.red fPlotG = clr1.green fPlotB = clr1.blue fPlotA = clr1.alpha; 

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//主要考察区开始

//缓冲区中的深度
float zInBuffer = pZB->GetDepth(x1y1);
//当前深度
float z = z1;

//如果当前点的z坐标小于深度缓冲区中的相同位置z的坐标
if(z < zInBuffer)
{
//在颜色缓冲区中绘制第一个点
pCB->SetPixel(x1 y1 fPlotR fPlotG fPlotB fPlotA); 

//重置深度缓冲区的值
pZB->SetDepth(x1 y1 z);

}

if(nInc < 2) return;

//沿直线的深度增量
float fIncZ = (z2 - z1) / nInc;

//结束
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////


//用于判断是否在nJudgeXnJudgeY方向上向前进
int nJudgeX = -nIy nJudgeY = -nIx;

//通过增量计算得到的当前点
int x = x1 y = y1;

//开始进行增量计算
//采用Bresenham算法.在这里我们将算法进行改进
//使其对于任意斜率的直线都能绘制而且绘制方向始终为从起点绘制到终点

//与Windows相对应该算法也不包含最后一个点(x2y2)
nInc--;

//注意整数乘2在计算机中采用移位实现
//Bresenham算法
int nTwoIx = 2 * nIx nTwoIy = 2 * nIy;

//颜色增量
float fIncR = (clr2.red - fPlotR) / nInc;
float fIncG = (clr2.green - fPlotG) / nInc;
float fIncB = (clr2.blue - fPlotB) / nInc;
float fIncA = (clr2.alpha - fPlotA) / nInc;


//开始增量计算
for(int i = 0;i < nInc; i++)
{
nJudgeX += nTwoIx;
nJudgeY += nTwoIy;

//通过增量法计算的当前点是否属于直线上的点
BOOL bPlot = FALSE;

//检测 nJudgeX 方向
if(nJudgeX >= 0)
{
bPlot = TRUE;
nJudgeX -= nTwoIy;

//将任意走向的直线统一起来
if(nDx > 0)x++;
else if(nDx < 0)x--;
}

//检测 nJudgeY 方向
if(nJudgeY >= 0)
{
bPlot = TRUE;
nJudgeY -= nTwoIx;

//将任意走向的直线统一起来
if(nDy > 0)y++;
else if(nDy < 0)y--;
}
//如果当前点在直线上
if(bPlot)
{
fPlotR += fIncR;
fPlotG += fIncG;
fPlotB += fIncB;
fPlotA += fIncA;

////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4183  2004-11-28 23:11  真实感图形学\BLine.cpp

     文件        554  2004-11-28 23:11  真实感图形学\BLine.h

     文件      12025  2004-11-28 23:11  真实感图形学\BRender.cpp

     文件        987  2004-11-28 23:11  真实感图形学\BRender.h

     文件      15402  2004-11-28 23:11  真实感图形学\BTriangle.cpp

     文件        929  2004-11-28 23:11  真实感图形学\BTriangle.h

     文件       4834  2004-11-28 23:11  真实感图形学\ColorBuffer.cpp

     文件       1181  2004-11-28 23:11  真实感图形学\ColorBuffer.h

     文件       7363  2004-11-28 23:15  真实感图形学\Debug\BLine.obj

     文件      33931  2004-11-28 23:15  真实感图形学\Debug\BRender.obj

     文件      18243  2004-11-28 23:15  真实感图形学\Debug\BTriangle.obj

     文件      15285  2004-11-28 23:15  真实感图形学\Debug\ColorBuffer.obj

     文件      28281  2004-11-28 23:15  真实感图形学\Debug\Edge.obj

     文件      27824  2004-11-28 23:15  真实感图形学\Debug\Facet.obj

     文件       8204  2004-11-28 23:15  真实感图形学\Debug\FloatColor.obj

     文件      21016  2004-11-28 23:15  真实感图形学\Debug\Lighting.obj

     文件      10976  2004-11-28 23:15  真实感图形学\Debug\LightObj.obj

     文件      21050  2004-11-28 23:45  真实感图形学\Debug\MainFrm.obj

     文件       8000  2004-11-28 23:15  真实感图形学\Debug\Material.obj

     文件      42504  2004-11-28 23:15  真实感图形学\Debug\Matrix3d.obj

     文件      89044  2004-11-28 23:15  真实感图形学\Debug\object3d.obj

     文件      56337  2004-11-28 23:15  真实感图形学\Debug\Sphere.obj

     文件     106155  2004-11-28 22:59  真实感图形学\Debug\StdAfx.obj

     文件       4230  2004-11-28 23:15  真实感图形学\Debug\Subobject3d.obj

     文件       2161  2004-11-28 23:15  真实感图形学\Debug\TypedStack.obj

     文件     304128  2004-12-06 13:17  真实感图形学\Debug\vc60.idb

     文件     389120  2004-12-06 13:17  真实感图形学\Debug\vc60.pdb

     文件      26026  2004-11-28 23:15  真实感图形学\Debug\Vector3d.obj

     文件      28144  2004-11-28 23:15  真实感图形学\Debug\Vertex3d.obj

     文件       6446  2004-11-28 23:15  真实感图形学\Debug\ViewFinder.obj

............此处省略76个文件信息

评论

共有 条评论

相关资源