资源简介

利用半边结构实现细分算法。读入off文件,用半边结构存储,不断细分。

资源截图

代码片段和文件信息

#include “stdafx.h“
#include 
#include 
#include             
#include   
#include   
#include 
#include 
#include             
#include   

using namespace std;

typedef struct HE_vert //点
{
float x;
float y;
float z; //点的坐标

struct HE_edge  *edge;  // 半边  
}HE_vert;

typedef struct HE_edge
{
struct HE_vert *vert;   // vertex at the end of the half-edge  
struct HE_edge *pair;   // oppositely oriented adjacent half-edge   
struct HE_face *face;   // face the half-edge borders  
struct HE_edge *next;   // next half-edge around the face  
}HE_edge;

typedef struct HE_face
{
struct HE_edge *edge;  // one of the half-edges bordering the face  
struct HE_vert *normal;
}HE_face;

vector* vertices;
vector* faces;
vector* halfEdges;

//鼠标交互有关的
int mousetate = 0; //鼠标当前的状态
GLfloat Oldx = 0.0f; // 点击之前的位置
GLfloat Oldy = 0.0f;
//与实现角度大小相关的参数,只需要两个就可以完成
float xRotate = 0.0f;
float yRotate = 0.0f;
float ty = 0.0f;
float scale = 1;
GLfloat f1 f2 f3 f4 f5;
int vertexnum facenum edgenum;//点数、面数、边数

const string file_1 = “cube.off“;
const string file_2 = “cone.off“;
const string file_3 = “Geometry/dinosaur.off“;
int currentfile = 1;

GLuint showFaceList showWireList;
int showstate = 1;
bool showFace = true;
bool showWire = false;
bool showFlatlines = false;

//初始化顶点和面   
void initGL()
{
glClearColor(0.0 0.0 0.0 0.0);
glClearDepth(2.0);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST); //用来开启深度缓冲区的功能,启动后OPengl就可以跟踪Z轴上的像素,那么它只有在前面没有东西的情况下才会绘制这个像素,在绘制3d时,最好启用,视觉效果会比较真实
// ------------------- Lighting  
glEnable(GL_LIGHTING); // 如果enbale那么就使用当前的光照参数去推导顶点的颜色
glEnable(GL_LIGHT0); //第一个光源,而GL_LIGHT1表示第二个光源
// ------------------- Display List  
showFaceList = glGenLists(1);
showWireList = glGenLists(1);

// 绘制 wire 
glNewList(showWireList GL_COMPILE);
glDisable(GL_LIGHTING);
glLineWidth(1.0f);
glColor3f(0.5f 0.5f 0.5f);
glBegin(GL_LINES);
for (vector::iterator iter = halfEdges->begin(); iter != halfEdges->end(); iter++) {
//链接这个有向边的起点和终点绘制网格
glVertex3f((*iter)->vert->x (*iter)->vert->y (*iter)->vert->z);
glVertex3f((*iter)->pair->vert->x (*iter)->pair->vert->y (*iter)->pair->vert->z);
}
glEnd();
glEnable(GL_LIGHTING);
glEndList();

// 绘制面
glNewList(showFaceList GL_COMPILE);
for (vector::iterator iter = faces->begin(); iter != faces->end(); iter++) {
glBegin(GL_POLYGON);
glNormal3f((*iter)->normal->x (*iter)->normal->y (*iter)->normal->z);
glVertex3f((*iter)->edge->vert->x (*iter)->edge->vert->y (*iter)->edge->vert->z);
glVertex3f((*iter)->edge->next->vert->x (*iter)->edge->next->vert->y (*iter)->edge->next->vert->z);
glVertex3f((*iter)->edge->next->next->vert->x (*iter)->edge->next->next->vert->y (*iter)->edge->next->next->vert->z);
glEnd();
}
glEndList();
cout <<

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

     文件     302080  2018-05-17 10:19  halfEdge\Debug\halfEdge.exe

     文件    2259996  2018-05-17 10:19  halfEdge\Debug\halfEdge.ilk

     文件    4706304  2018-05-17 10:19  halfEdge\Debug\halfEdge.pdb

     文件       1058  2017-11-09 15:52  halfEdge\halfEdge\cone.off

     文件        321  2016-10-20 23:02  halfEdge\halfEdge\cube.off

     文件       1504  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.log

     文件    1473206  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.obj

     文件    1638400  2018-05-05 18:20  halfEdge\halfEdge\Debug\halfEdge.pch

     文件       1454  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.tlog\cl.command.1.tlog

     文件      23938  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.tlog\CL.read.1.tlog

     文件       1066  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.tlog\CL.write.1.tlog

     文件        166  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.tlog\halfEdge.lastbuildstate

     文件       1296  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.tlog\link.command.1.tlog

     文件       3050  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.tlog\link.read.1.tlog

     文件        564  2018-05-17 10:19  halfEdge\halfEdge\Debug\halfEdge.tlog\link.write.1.tlog

     文件      11000  2018-05-05 18:20  halfEdge\halfEdge\Debug\stdafx.obj

     文件     814080  2018-05-17 10:19  halfEdge\halfEdge\Debug\vc120.idb

     文件     749568  2018-05-17 10:19  halfEdge\halfEdge\Debug\vc120.pdb

     文件    1511141  2018-04-02 16:31  halfEdge\halfEdge\Geometry\Arma.off

     文件     125981  2018-04-02 17:17  halfEdge\halfEdge\Geometry\block.off

     文件       1294  2001-11-23 22:45  halfEdge\halfEdge\Geometry\boxcube.off

     文件        678  2001-11-12 19:09  halfEdge\halfEdge\Geometry\boxtorus.off

     文件    4368708  2018-04-02 17:18  halfEdge\halfEdge\Geometry\Buddha.off

     文件    2535115  2018-04-20 18:52  halfEdge\halfEdge\Geometry\bunny.off

     文件       1058  2017-11-09 15:52  halfEdge\halfEdge\Geometry\cone.off

     文件        135  2001-11-10 11:12  halfEdge\halfEdge\Geometry\cube.off

     文件        583  1997-04-02 22:38  halfEdge\halfEdge\Geometry\cuboctahedron.off

     文件     118809  2018-04-02 17:19  halfEdge\halfEdge\Geometry\dinosaur.off

     文件        821  1992-06-26 05:08  halfEdge\halfEdge\Geometry\dodecahedron.off

     文件    7433104  2018-04-02 17:16  halfEdge\halfEdge\Geometry\dragon.off

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

评论

共有 条评论