📄 glviewer.cc
字号:
//GLViewer.cc#include "GLViewer.h"GLViewer::GLViewer(){ int i; ViewerIndex=ViewerNum; ViewerNum++; WinName=""; BufType[ViewerIndex]=GLUT_SINGLE; Root[ViewerIndex]=NULL; for(i=0; i<3; i++) BackColor[i]=0.0;}GLViewer::~GLViewer(){ if(Root[ViewerIndex]) { delete Root[ViewerIndex]; Root[ViewerIndex]=NULL; }}voidGLViewer::Init(int argc, char **argv){ if(ViewerIndex==0) glutInit(&argc, argv);}void GLViewer::CreateWin(char *Name, int Width, int Height){ WinName=Name; WinWidth[ViewerIndex]=Width; WinHeight[ViewerIndex]=Height;}voidGLViewer::SetValue(Enum PName, Enum Type){ switch(PName) { case BUFFER: if(Type==DOUBLE) BufType[ViewerIndex]=GLUT_DOUBLE; else if(Type==SINGLE) BufType[ViewerIndex]=GLUT_SINGLE; break; case BACKCOLOR: Root[ViewerIndex]->GetColor(Type, BackColor); break; default: break; }}voidGLViewer::Show(Node *N){ GLInit(); Root[ViewerIndex]=N; if(ViewerIndex==(ViewerNum-1)) glutMainLoop();}//privatevoid GLViewer::GLInit(){ glutInitDisplayMode(BufType[ViewerIndex] | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(WinWidth[ViewerIndex], WinHeight[ViewerIndex]); glutCreateWindow(WinName); switch(ViewerIndex) { case 0: glutReshapeFunc(Reshape0); glutDisplayFunc(Display0); break; case 1: glutReshapeFunc(Reshape1); glutDisplayFunc(Display1); break; case 2: glutReshapeFunc(Reshape2); glutDisplayFunc(Display2); break; default: break; } glEnable(GL_DEPTH_TEST); glClearColor(BackColor[0], BackColor[1], BackColor[2], 1.0);}voidGLViewer::Display0(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Root[0]->Traverse(); if(BufType[0]==GLUT_DOUBLE) glutSwapBuffers(); glFlush();}voidGLViewer::Reshape0(int w, int h){ glViewport(0, 0, (GLsizei)w, (GLsizei)h); WinWidth[0]=w; WinHeight[0]=h;}voidGLViewer::Display1(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Root[1]->Traverse(); if(BufType[1]==GLUT_DOUBLE) glutSwapBuffers(); glFlush();}voidGLViewer::Reshape1(int w, int h){ glViewport(0, 0, (GLsizei)w, (GLsizei)h); WinWidth[1]=w; WinHeight[1]=h;}voidGLViewer::Display2(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Root[2]->Traverse(); if(BufType[2]==GLUT_DOUBLE) glutSwapBuffers(); glFlush();}voidGLViewer::Reshape2(int w, int h){ glViewport(0, 0, (GLsizei)w, (GLsizei)h); WinWidth[2]=w; WinHeight[2]=h;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -