资源简介
自己构建的半边结构,并实现了loop细分算法,并实现了3d模型的缩放等
代码片段和文件信息
#include “stdafx.h“
#include
#include “GL\glut.h“
#include
#include
#include
#include
#include
#include
using namespace std;
//用于点线面的个数
int numofvertex = 0;
int numofface = 0;
int numofline = 0;
//定义窗口大小
int WIDTH = 600;
int HEIGHT = 600;
float maxx = -1;
float maxy = -1;
float maxz = -1;
float minx = 1;
float miny = 1;
float minz = 1;
//定义摄像机位置和方向
GLfloat ShootPosition[] = { 000 };
GLfloat ShootDirect[] = { 000 };
//与实现旋转角度大小相关的参数,只需要两个就可以完成
float scale = 1.0;
float px;
float py;
float theta1 = 0;
float theta2 = 0;
float radius = 0;
int displaystate = 0;
float PI = 3.1415926;
//定义点、面、边等结构
struct vertex;
struct face;
struct halfedge;
struct he_face;
struct normalVec;
struct iedge;
vertex* vertexs;
face* faces;
he_face** hefaces;
normalVec* normalvectors;
iedge** iedges;
//定义半边结构
struct halfedge {
halfedge* next;//下一条半边
halfedge* opposite;//与其相反的半边
int end;//所指的点
bool visit;//是否被访问过
he_face* face;//所属的面
//定义构造函数并初始化
halfedge() {
next = NULL;
opposite = NULL;
end = -1;
face = NULL;
visit = false;
}
};
//定义半边结构中的点结构
struct vertex {
//点坐标
float x;
float y;
float z;
//指向该点的半边
halfedge* edge;
//是否被访问过
bool visit;
//空构造函数,初始化
vertex() {
visit = false;
}
//构造函数
vertex(float a float b float c) {
x = a;
y = b;
z = c;
edge = NULL;
visit = false;
}
};
//定义正常的点的结构或者成为向量
struct normalVec {
//点坐标
float x;
float y;
float z;
normalVec() {
}
normalVec(float a float b float c) {
x = a;
y = b;
z = c;
}
};
//定义半边中面的结构
struct he_face {
//包含的半边
halfedge* edge;
//是否被访问过
bool visit;
he_face() {
edge = NULL;
visit = false;
}
};
//定义正常的面的结构
struct face {
//构成该面的点的数量
int numofv;
//构成该面的点
int* vertexs;
face() {
}
face(int nv) {
numofv = nv;
vertexs = new int[nv];
}
};
//定义自己的边结构
struct iedge {
//起点
int start;
//在loop细分中的中间点
int middle;
//所含半边(两条)
halfedge* he;
iedge* next;
iedge() {
start = -1;
he = NULL;
next = NULL;
middle = -1;
}
};
//读取3d文件,off格式
void readFile() {
char data[100];
ifstream infile;
infile.open(“bunny.off“);
//读取“off”字符
infile >> data;
//读取点、面、边的数量
infile >> numofvertex;
infile >> numofface;
infile >> numofline;
vertexs = new vertex[numofvertex];
faces = new face[numofface];
int vnum = 0;
int fnum = 0;
//构建“点”集
while (vnum < numofvertex) {
float x;
float y;
float z;
infile >> x;
infile >> y;
infile >> z;
vertexs[vnum] = vertex(x y z);
vnum++;
}
//构建“面”集
while (fnum {
int numofv;
infile >> numofv;
face f = face(numofv);
for (int i = 0; i < numofv; i++)
{
int v;
infile >> v;
f.vertexs[i] = v;
}
faces[fnum] = f;
fnum++;
}
infile.close();
}
int getMiddle(int start int end iedge** iedges) {
iedge* temp = iedges[start];
- 上一篇:实现对任意格式文件压缩 C++
- 下一篇:图像抖动的块匹配及补偿算法
相关资源
- 计算机图形学消隐实验转
- 计算机图形学实验报告
- 计算机图形学,实现茶壶旋转,颜色
- VC++计算机图形学制作二维图形变换代
- 计算机图形学作业原创C/C++ VC++6.0,
- VC++6.0编写的画图软件
- c语言实现 迷宫-2小游戏源码(山东大
- 计算机图形学MFC
- 计算机图形学大作业 用vc++编的,包括
- 计算机图形学动态图形源代码
- 计算机图形学作业源程序
- 山东大学数据结构课设表达式类型 源
- graphics C语言图形学画汽车,多边形扫
- 计算机图形学三维变换
- 计算机图形学大实验直线DDA和bresenh
- 计算机图形学 OPENGL 多边形填充 有序
- MFC图形学透视投影
- 山东大学数字图像处理实验1-3
- 图形学矩阵、向量类C++实现
- 计算机图形学扫描线填充算法
- Koch曲线算法 计算机图形学 孔令德 案
- 计算机图形学旋转茶壶
- 计算机图形学实验 绘制渐变三角形
- 计算机图形学实验——科赫雪花
- 图形学试验-平移对称旋转缩放算法
- C语言 种子填充 计算机图形学
- 计算机图形学课程设计源代码
- 图形学c语言动画-会动的汽车
- c++ OpenGL DDA/Bresenham 算法画直线, 多
- 光线跟踪纯C++)
评论
共有 条评论