资源简介
自己构建的半边结构,并实现了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++
- 下一篇:图像抖动的块匹配及补偿算法
相关资源
- 交互式计算机图形学 第六版 OpenGL源代
- 图形学简单绘图系统
- OpenGL迷宫山东大学图形学实验三
- 山东大学编译原理实验源代码c++版
- 计算机图形学走样反走样时钟
- c++QT5图形学-中点画圆完整工程文件
- 西北工业大学软件学院计算机图形学
- 计算机图形学实验源代码中南民族大
- 图形学各种曲线--Bezier曲线,B-样条曲
- 鼠标交互画圆及椭圆基于Bresenham、中
- 绘制任意斜率的直线段
- 数据结构课程设计 山东大学版 文件
- QSplat:基于点绘制的图形学开山之作
- 计算机图形学简单CAD系统
- 真实感图形学
- 计算机图形学多边形种子填充算法
- 计算机图形学 消隐
- 计算机图形学作业,中点算法画椭圆
- MFC中点圆的生成算法
- 改进的有效边表算法--计算机图形学
- 最好的CS游戏opengl、C++实现
- 梁友栋-直线裁剪算法图形学mfc
- 计算机图形学 清华大学教材 及 vc++
- 孔令德的计算机图形学实验及课程设
- 图形学消隐
- 计算机图形学大作业参考代码(VC版)
- 计算机图形学 图形变换 C++ MFC
- 用visual C++ 6.0编写的计算机图形的一些
- 计算机图形学简单多边形裁剪程序
- 计算机图形学 大作业 多功能图形学程
评论
共有 条评论