资源简介
扫描线z——buffer消影算法的实现,用visual studio 2005编译,代码是正确的,编译环境的不匹配可能导致编译错误
代码片段和文件信息
// Auth: zousong@cad.zju.edu.cn
// Date: 2008-12-25
// 定义是否每个面片使用随机颜色值
#define RANDOM_COLOR 1
#include
#include
#include
#include
#include
#include
#ifdef RANDOM_COLOR
#include
#include
#endif
using namespace std;
#define MAX_WIDTH (1024*2)
#define MAX_HEIGHT (768*2)
//定义图像
#define INIT_WIDTH 1024
#define INIT_HEIGHT 768
GLubyte image[INIT_HEIGHT][INIT_WIDTH][3];
// 定义颜色结构体
typedef struct
{
unsigned char r b g a;
} color_t;
// 定义点结构
typedef struct
{
double x y z;
} point_t;
// 定义分类边表
typedef struct _line_t
{
int x; // 边的上端点的x坐标
double dx; // 相邻两条扫描线交点的x坐标差dx(-1/k)
int dy; // 边跨越的扫描线数目
int id; // 边所属多边形的编号
//_line_t * next; // 下个分类边表指针 由于本算法中分类边表存于STL Vector中 故不需要
} line_t;
// 定义活化边表
typedef struct _active_line_t
{
double xl; // 左交点的x坐标
double dxl; // (左交点边上)两相邻扫描线交点的x坐标之差
int dyl; // 以和左交点所在边相交的扫描线数为初值 以后向下每处理一条扫描线减1
double zl; // 左交点处多边形所在平面的深度值
double dzx; // 沿扫描线向右走过一个像素时 多边形所在平面的深度增量. 多于平面方程 dzx = -a/c (c!= 0)
double dzy; // 沿y方向向下移过一根扫描线时 多边形所在平面的深度增量. 对于平面方程 dzy = b/c (c!= 0)
#if 0 // 由于边对分拆在两个活化边表结构中,故右节点的元素可以省略
// double xr; // 右交点的x坐标
// double dxr; // (右交点边上)两相邻扫描线交点的x坐标之差
// int dyr; // 以右左交点所在边相交的扫描线数为初值 以后向下每处理一条扫描线减1
#endif
// int id; // 交点所在多边形的编号 由于将活化边表存于各自所属的活化多边形中 故所属ID不需要保存
//_active_line_t * next; // 下个活化边表指针 由于本算法中活化边表存于STL Vector中 故不需要
} active_line_t;
// 定义分类多边形表 || 活化多边形表
typedef struct _poly_t
{
int id; // 多边形编号
double abcd; // 多边形所在的平面的方程系数 ax + by + cz + d = 0
int dy; // 多边形跨越的扫描线数目 || 多边形跨越的剩余扫描线数目
color_t color; // 多边形颜色
vector ale; // 活化边表 放在活化多边形中 对于分类多边形表无意义
//_poly_t * next; // 下个分类多边形指针 || 下个活化多边形指针 由于本算法中多边形表存于STL Vector中 故不需要
} poly_t;
inline bool is_zero(double f)
{
if (abs(f) < 1e-8)
return true;
return false;
}
inline int double_to_int(double f)
{
return (int)(f+0.5);
}
// 对活化多边形表排序的比较函数
bool cmp(const active_line_t &lhs const active_line_t &rhs)
{
if (double_to_int(lhs.xl) < double_to_int(rhs.xl) ) {
return true;
} else if ( double_to_int(lhs.xl) == double_to_int(rhs.xl) ){
if (double_to_int(lhs.dxl) < double_to_int(rhs.dxl))
return true;
}
return false;
}
// 从obj文件中读取的点
vector point;
// 分类多形型表
vector poly[MAX_HEIGHT];
// 分类边表
vector line[MAX_HEIGHT];
// 活化多边形表 内部包含各个活化多边形表中的活化边表对
vector ape;
// z值数组
double z[MAX_WIDTH];
// 颜色数组
color_t color[MAX_WIDTH];
// 处理字符串用的buffer
char buf[1024];
int cal(const char * file_name int max_width int max_height double scale)
{
// 判断参数是否合法
if (file_name == NULL || max_width <= 0 || max_width > MAX_WIDTH || max_height <= 0 || max_height > MAX_HEIGHT || scale < 1.0) {
printf(“cal err!\n“);
return -1;
}
#ifdef
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 32256 2008-12-31 19:48 扫描线Z_buffer算法\20821055_邹松_扫描线Z_Buffer算法作业说明.doc
文件 16535 2007-12-30 10:48 扫描线Z_buffer算法\bin\cone.obj
文件 839 2008-01-04 01:34 扫描线Z_buffer算法\bin\cube.obj
文件 188 2008-12-31 19:46 扫描线Z_buffer算法\bin\run.bat
文件 122880 2008-12-31 19:15 扫描线Z_buffer算法\bin\SL_Z_buffer.exe
文件 57515 2007-12-30 10:48 扫描线Z_buffer算法\bin\sphere.obj
文件 61417 2007-12-30 10:48 扫描线Z_buffer算法\bin\teapot.obj
文件 286 2008-01-01 20:42 扫描线Z_buffer算法\bin\test.obj
文件 33973 2007-12-30 10:48 扫描线Z_buffer算法\bin\torus.obj
文件 179844 2007-12-30 10:48 扫描线Z_buffer算法\bin\torusknot.obj
文件 3080597 2008-01-03 23:58 扫描线Z_buffer算法\bin\venusm.obj
文件 122880 2008-12-31 19:15 扫描线Z_buffer算法\SL_Z_buffer\debug\SL_Z_buffer.exe
文件 6108 2008-12-31 19:15 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\Debug\BuildLog.htm
文件 65 2008-12-31 19:15 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\Debug\mt.dep
文件 145 2008-12-31 19:15 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\Debug\SL_Z_buffer.exe.intermediate.manifest
文件 117760 2008-12-31 19:15 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\Debug\vc80.idb
文件 179301 2008-12-31 19:15 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\Debug\z_buffer.obj
文件 3237 2008-12-31 19:10 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\SL_Z_buffer.vcproj
文件 1413 2008-12-31 19:16 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\SL_Z_buffer.vcproj.admin-PC.admin.user
文件 1409 2008-01-04 01:37 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\SL_Z_buffer.vcproj.KILLER.Admin.user
文件 3080597 2008-01-03 23:58 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\test.obj
文件 16270 2008-12-31 19:15 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\z_buffer.cpp
文件 1272832 2008-12-31 19:16 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer.ncb
文件 894 2008-01-01 14:42 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer.sln
..A..H. 8704 2008-12-31 19:16 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer.suo
目录 0 2008-12-31 19:50 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer\Debug
目录 0 2008-12-31 19:50 扫描线Z_buffer算法\SL_Z_buffer\debug
目录 0 2008-12-31 19:50 扫描线Z_buffer算法\SL_Z_buffer\SL_Z_buffer
目录 0 2008-12-31 19:50 扫描线Z_buffer算法\bin
目录 0 2008-12-31 19:50 扫描线Z_buffer算法\SL_Z_buffer
............此处省略4个文件信息
相关资源
- 混合图像Exp1_Hybrid_Images
- 计算机组成原理白中英配套练习题库
- 华中科技大学计算机网络实验报告
- 王道考研系列:2013年计算机组成原理
- 计算机组成原理习题解答任国林版
- 计算机体系结构试题库
- 计算机图形学的详细论文翻译
- 计算机操作系统讲义知识点整理
- 高校计算机联合考试(广西考区)一
- 2018中国计算机视觉行业前景研究报告
- 薛定宇 控制系统计算机辅助设计第二
- 计算机图形学 仿生机器人运动形态的
- 数据库系统概论上课PPT
- 胡伟武计算机体系结构答案中科院
- 计算机体系结构量化研究方法第五版
- 图论答案,南京大学计算机系图论课
- 合同管理系统的设计与实现计算机毕
- 高校学生成绩管理系统的设计与实现
- 员工请假管理系统的设计与实现计算
- 毕业设计选题系统的设计与实现计算
- 超市管理系统的设计与实现计算机毕
- 图书管理系统的设计与实现(计算机
- 小区物业管理系统的设计与实现计算
- 计算机组成原理课设-简易CPU设计(代
- 计算机组成原理考试题20套含详细答案
- 微型计算机原理与接口技术(05344-0)
- 数据与计算机通信 课后答案
- 计算机文化基础课件石油大学 山东省
- HNUST计算机组成原理课设电路图
- 西北农林科学大学计算机网络实验一
评论
共有 条评论