91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 14KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-02
  • 語言: C/C++
  • 標簽: off文件??山東大學??

資源簡介

讀取off文件進行顯示,支持平移,旋轉等基本交互操作。(在vs2017中需要使用Release模式運行)

資源截圖

代碼片段和文件信息

//?project2.1.cpp:?定義控制臺應用程序的入口點。
//
#include?“stdafx.h“
#include???
#include???
#include???
#include?“GL\glut.h“
#include?
#include?
#include?
#include?


using?namespace?std;
typedef?OpenMesh::TriMesh_ArrayKernelT<>?MyMesh;

//鼠標交互有關的
int?mousetate?=?0;?//鼠標當前的狀態
GLfloat?Oldx?=?0.0;?//?點擊之前的位置
GLfloat?Oldy?=?0.0;
//與實現角度大小相關的參數,只需要兩個就可以完成
float?xRotate?=?0.0f;
float?yRotate?=?0.0f;
float?ty?=?0.0f;
float?tx?=?0.0f;
float?scale?=?1;

//文件讀取有關的
MyMesh?mesh;
const?string?file?=?“1.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);
//深度值小于2的就會被現實出來
glClearDepth(2.0);
/*
在使用頂點數據繪制幾何圖形時,如果為每個頂點指定了頂點顏色,
此時若使用GL_SMOOTH,每個頂點使用對應的頂點顏色來著色,
而頂點之間的片元顏色則使用差值的方式來計算獲得,
結果就是漸變色;而若使用GL_FLAT,假設幾何圖形由n個三角形構成,
則只會使用頂點顏色數組中最后n個顏色進行著色。
*/
glShadeModel(GL_FLAT);
/*
啟用了之后,OpenGL在繪制的時候就會檢查,當前像素前面是否有別的像素,
如果別的像素擋道了它,那它就不會繪制,也就是說,OpenGL就只繪制最前面的一層。
*/
glEnable(GL_DEPTH_TEST);

glEnable(GL_LIGHTING);?//?啟用光照
GLfloat?light_position[]?=?{?1.0?1.0?1.0?0.0?};//光源位置
GLfloat?light_ambient[]?=?{?0.0?1.0?0.0?1.0?};//rgb下的環境光顏色
GLfloat?light_diffuse[]?=?{?1.0?1.0?0.0?1.0?};//漫反射光的顏色
GLfloat?light_specular[]?=?{?1.0?1.0?1.0?1.0?};//鏡面光的顏色
glLightfv(GL_LIGHT0?GL_POSITION?light_position);
glLightfv(GL_LIGHT0?GL_AMBIENT?light_ambient);
glLightfv(GL_LIGHT0?GL_DIFFUSE?light_diffuse);
glLightfv(GL_LIGHT0?GL_SPECULAR?light_specular);
glEnable(GL_LIGHT0);?//?啟用指定光源
?//顯示列表初始化
showFaceList?=?glGenLists(1);
showWireList?=?glGenLists(1);
int?temp?=?mesh.n_edges();

/*
向邊顯示列表中添加元素,其后的OpenGL函數存入顯示列表中,
直至調用結束表的函數glEndList(),用來繪制?wire
*/
glNewList(showWireList?GL_COMPILE);
glDisable(GL_LIGHTING);//不啟用光照
glLineWidth(1.0f);//控制線的寬度
glColor3f(0.5f?0.5f?0.5f);//控制線的顏色
glBegin(GL_LINES);//創建“線”類型元素,與glEnd()連用
for?(MyMesh::HalfedgeIter?he_it?=?mesh.halfedges_begin();?he_it?!=?mesh.halfedges_end();?++he_it)?{
//glVertex函數用在glBegin和glEnd之間,用于指定頂點,鏈接這個有向邊的起點和終點

glColor3f(0.0?1.0?0.0);//指定點的顏色
glVertex3fv(mesh.point(mesh.from_vertex_handle(*he_it)).data());
glColor3f(0.0?1.0?0.0);
glVertex3fv(mesh.point(mesh.to_vertex_handle(*he_it)).data());
}
glEnd();
glEnable(GL_LIGHTING);
glEndList();

//?繪制flat
glNewList(showFaceList?GL_COMPILE);
for?(MyMesh::FaceIter?f_it?=?mesh.faces_begin();?f_it?!=?mesh.faces_end();?++f_it)?{
glBegin(GL_TRIANGLES);//繪制三角形
for?(MyMesh::FaceVertexIter?fv_it?=?mesh.fv_iter(*f_it);?fv_it.is_valid();?++fv_it)?{
//用來設置當前的法向量,這個法向量將被應用到緊接下來的glVertex*()?所定義的頂點上

glNormal3fv(mesh.normal(*fv_it).data());
glVertex3fv(mesh.point(*fv_it).data());
}
glEnd();
}
glEndList();
}

//?當窗體改變大小的時候
void?myRes

評論

共有 條評論