• 大小: 6.99MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-02
  • 语言: 其他
  • 标签: 网格简化  

资源简介

This program implements four different mesh simplification algorithms. After loading a mesh, the user can easily remove triangles from the mesh and the results are displayed in real time. The mesh can also be rotated and moved closer to or farther away from the viewer. The goal of mesh simplification is to display a 3D polygonal mesh with fewer triangles while retaining the same shape. In the example above, the original cow model (upper left) is made up of over 5800 triangles. We can easily remove thousands of triangles from this mesh and still display a very similar cow model. While the 500 triangle cow is a cruder representation, this may not make a difference if the cow is far away from the viewer.

资源截图

代码片段和文件信息



#include “glmodelwin.h“
#include “pmesh.h“


extern PMesh* g_pProgMesh; 
extern Mesh* g_pMesh;
extern HINSTANCE g_hInstance;
extern char g_filename[];

LRESULT CALLBACK wndProc(HWND UINT WPARAM LPARAM);


// Display title text for window
void glModelWindow::displayWindowtitle()
{
assert(g_pProgMesh);
char temp[1024] = {‘\0‘};
sprintf(temp “Jeff Somers Mesh Simplification Viewer - %s # Tris: %d %s“
g_pProgMesh->getEdgeCostDesc() g_pProgMesh->numVisTris() g_filename);
SetWindowText(getHWnd() temp);
}


// Resize the OpenGL window
GLvoid glModelWindow::reSizeScene(GLsizei width GLsizei height)
{
if (height==0) height = 1; // height == 0 not allowed

glViewport(00widthheight);

width_ = width;
height_ = height;

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

// Calculate The Perspective of the winodw
gluPerspective(45.0f(GLfloat)width/(GLfloat)heightMIN_DISTANCEMAX_DISTANCE);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

// Initialize OpenGL
int glModelWindow::initOpenGL(GLvoid)
{
glShadeModel(GL_SMOOTH); // Gouraud shading
glClearColor(0.0f 0.0f 0.0f 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST);

// Enable lights and lighting
glEnable(GL_LIGHT0); // default value is (1.0 1.0 1.0 1.0)
glEnable(GL_LIGHTING);

glEnable(GL_DEPTH_TEST);

glEnable(GL_CULL_FACE); // backface culling

return true;
}

// Display the mesh
bool glModelWindow::displayMesh()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Set lookat point
    glLoadIdentity();
gluLookAt(00dist_ 000 010);

    glRotatef(elevation_100);
    glRotatef(azimuth_010);

if (bSmooth_)
{
glShadeModel(GL_SMOOTH); // already defined in initOpenGL
}
else 
{
glShadeModel(GL_FLAT);
}

if (bFill_) // fill in triangles or just display outlines?
{
glPolygonMode( GL_FRONT GL_FILL );
}
else
{
glPolygonMode( GL_FRONT GL_LINE );
}

// NOTE: we could use display lists here.  That would speed things
// up which the user is rotating the mesh.  However since speed isn‘t
// a bit issue I didn‘t use them.
if (g_pProgMesh)
{
// Make everything grey
glColor3ub(128 128 128);
glBegin(GL_TRIANGLES);
for (int i=0; inumTris(); i++)
{
triangle t;
float a[3];
if (g_pProgMesh->getTri(i t) && t.isActive())
{
if (bSmooth_)
{
const vertex& v1 = t.getVert1vertex();
const float* pFltV1Norm = v1.getArrayVertNorms();
glNormal3fv(pFltV1Norm);
const float* pFltArray1 = v1.getArrayVerts();
glVertex3fv(pFltArray1);
const vertex& v2 = t.getVert2vertex();
const float* pFltV2Norm = v2.getArrayVertNorms();
glNormal3fv(pFltV2Norm);
const float* pFltArray2 = v2.getArrayVerts();
glVertex3fv(pFltArray2);
const vertex& v3 = t.getVert3ver

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

     文件      50262  1998-09-08 22:26  网格简化源码\jmspmesh\apple.ply

     文件     323275  1998-09-08 22:26  网格简化源码\jmspmesh\big_porsche.ply

     文件      16668  1998-09-08 22:53  网格简化源码\jmspmesh\cat.ply

     文件     177472  1998-09-08 22:53  网格简化源码\jmspmesh\cow.ply

     文件      28104  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\BuildLog.htm

     文件      91914  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\glmodelwin.obj

     文件          0  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\glmodelwin.sbr

     文件     201310  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\main.obj

     文件          0  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\main.sbr

     文件     708997  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\mesh.obj

     文件          0  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\mesh.sbr

     文件         67  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\mt.dep

     文件    4705280  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\oglpmesh.bsc

     文件     895488  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\oglpmesh.exe

     文件        406  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\oglpmesh.exe.embed.manifest

     文件        472  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\oglpmesh.exe.embed.manifest.res

     文件        381  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\oglpmesh.exe.intermediate.manifest

     文件    2202748  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\oglpmesh.ilk

     文件    4254720  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\oglpmesh.pdb

     文件    1018004  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\pmesh.obj

     文件          0  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\pmesh.sbr

     文件       4804  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\polydemo.res

     文件     284908  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\triangle.obj

     文件          0  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\triangle.sbr

     文件     205824  2009-01-06 10:16  网格简化源码\jmspmesh\Debug\vc60.idb

     文件     167936  2009-01-06 10:06  网格简化源码\jmspmesh\Debug\vc60.pdb

     文件     674816  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\vc90.idb

     文件     413696  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\vc90.pdb

     文件     243535  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\vec3.obj

     文件          0  2009-03-06 15:15  网格简化源码\jmspmesh\Debug\vec3.sbr

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

评论

共有 条评论

相关资源