OpenGL学习一:分割三角形

效果如图:

OpenGL学习一:分割三角形_第1张图片

代码:

#include <iostream>
#include <GL\glut.h>

using namespace std;

namespace wk{

 //画一个三角形,三个点
 void triangle(GLfloat *a, GLfloat *b, GLfloat *c){
  glVertex2fv(a);
  glVertex2fv(b);
  glVertex2fv(c);
 }

 void devideTriangle(GLfloat *a, GLfloat *b, GLfloat *c,int depth){
  GLfloat ab[2], ac[2], bc[2];
  if (depth > 0){
   for (int i = 0; i < 2; i++) ab[i] = (a[i] + b[i]) / 2;
   for (int i = 0; i < 2; i++) ac[i] = (a[i] + c[i]) / 2;
   for (int i = 0; i < 2; i++) bc[i] = (b[i] + c[i]) / 2;
   devideTriangle(a, ab, ac, depth - 1);
   devideTriangle(b, ab, bc, depth - 1);
   devideTriangle(c, ac, bc, depth - 1);
  }
  else triangle(a, b, c);

 }

 void display(void){
  glClear(GL_COLOR_BUFFER_BIT);
  glViewport(0, 0, 500, 500);
  glColor3f(1, 0, 0);
  GLfloat points[3][2] = { {-100,-100}, {0,100}, {100,-100} };
  int depth = 5;
  glBegin(GL_TRIANGLES);
  devideTriangle(points[0], points[1], points[2], depth);
  glEnd();
  glFlush();
 }

 void init(void){
  glClearColor(1, 1, 1, 1);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(-100, 100, -100, 100);
  glMatrixMode(GL_MODELVIEW);
 }
}

using namespace wk;
void main(int argc, char **argv){
 string windowTitle = "三角形分割";
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
 glutInitWindowPosition(100, 100);
 glutInitWindowSize(500, 500);
 glutCreateWindow(windowTitle.c_str());
 init();
 glutDisplayFunc(display);
 glutMainLoop();
}


你可能感兴趣的:(OpenGL学习一:分割三角形)