openGL— 中点Bresenham画圆

来源:互联网 发布:轩辕传奇账号交易淘宝 编辑:程序博客网 时间:2024/06/05 18:27
// aa.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <gl/glut.h> void Init(void)    {     glClearColor(0.0,0.0,0.0,0.0);    //设置背景颜色为黑色         glMatrixMode(GL_PROJECTION);       //对投影相关进行操作      gluOrtho2D(0.0, 30.0, 0.0, 30.0); }  void CirclePoint(int x,int y) { glColor3f(1.0,0.0,0.0);    //设置颜色为红色     glPointSize(4);            //设置点的大小     glBegin(GL_POINTS);      glVertex2f(15+x,15+y);     // 修正点的坐标     glVertex2f(15+y,15+x);     glVertex2f(15-y,15+x);     glVertex2f(15-x,y+15);     glVertex2f(15-x,15-y);     glVertex2f(15-y,15-x);     glVertex2f(15+y,15-x);     glVertex2f(15+x,15-y);      glEnd(); glFlush();  } void MidBresenhamCircle(int r) {     int x,y,d;     x=0; y=r; d=1-r;     while(x<=y) {         CirclePoint(x,y);             if(d<0)             d+=2*x+3;         else {             d+=2*(x-y)+5;             y--;         }         x++;     } } void display() {     glClear(GL_COLOR_BUFFER_BIT);            MidBresenhamCircle(8);    //半径为8 }  int main(int argc,char** argv) {     glutInit(&argc,argv);     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);       glutInitWindowSize(500,500);        glutInitWindowPosition(400,100);         glutCreateWindow("中点Bresenham画圆");        glutDisplayFunc(display);         Init();            glutMainLoop();         return 0; }

运行结果:


第二种方法:

// aa.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <gl/glut.h> void init(void)    {     glClearColor(0.0,0.0,0.0,0.0);    //设置背景颜色为黑色         glMatrixMode(GL_PROJECTION);       //对投影相关进行操作      gluOrtho2D(0.0, 30.0, 0.0, 30.0); } void putpixel(int x, int y)  {      glColor3f(1.0, 0.0, 0.0);        //设置颜色为红色    glPointSize(2);    //设置点的大小    glBegin(GL_POINTS);          glVertex2f(15+x, 15+y);      glEnd();      glFlush();  }  void CirclePoint(int x,int y) {     putpixel(x,y); putpixel(y,x); putpixel(-y,x); putpixel(-x,y); putpixel(-x,-y); putpixel(-y,-x); putpixel(y,-x); putpixel(x,-y); } void MidBresenhamCircle(int r) {     int x,y,d;     x=0; y=r; d=1-r;     while(x<=y) {         CirclePoint(x,y);             if(d<0)             d+=2*x+3;         else {             d+=2*(x-y)+5;             y--;         }         x++;     } } void display() {     glClear(GL_COLOR_BUFFER_BIT);            MidBresenhamCircle(8);    //半径为8 }  int main(int argc,char** argv) {     glutInit(&argc,argv);     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);       glutInitWindowSize(400,400);        glutInitWindowPosition(0,0);         glutCreateWindow("中点Bresenham画圆");        glutDisplayFunc(display);         init();            glutMainLoop();         return 0; }

运行结果:

0 0
原创粉丝点击