openGL画圆

openGL画圆,第1张

以GL_LINES方式绘制半径为50的圆边:

void RenderScene(void)

{

glClear(GL_COLOR_BUFFER_BIT)

glColor3f(1.0f, 0.0f, 0.0f)

float x = 0.0f

float y = 0.0f

float R = 50.0f

float pi = 3.1415927

for(int i = 0i<10i++)

{

GL_LINES(R*cos(i*pi/5), R*sin(i*pi/5),R*cos((i+1)*pi/5), R*(sin(i+1)*pi/5))

}

glFlush()

}

GL_POINTS方式类滚脊祥似,就是把循环里面的绘制函数变成GL_POINTS并带入单个点的x和y坐标就好了。至于其他大搏参数下的截图,你就自野虚己修改下循环参数就可以了。

#include <glut.h>

#include <math.h>

#include <stdlib.h>

#include <gl/GL.h>

#include <gl/GLU.h>

#include <gl/glaux.h>

#include <Windows.h>

#pragma comment(lib,"glaux.lib")

#pragma comment(lib,"glu32.lib")

#pragma comment(lib,"glut32.lib")

#pragma comment(lib,"opengl32.lib")

class scrpt

{

public:

GLint x,y

}

void myinit(void)

void display(void)

void setPixel(GLint x,GLint y)

void circlePlotPoint(scrpt circCtr,scrpt circpt)

void circleMidpoint(scrpt circCtr,GLint radius)

void setPixel(GLint x,GLint y)

{

glBegin(GL_POINTS)

glVertex2i(x,y)

glEnd()

}

void myinit(void)

{

glClearColor(0.0,0.0,0.0,0.0)

glMatrixMode(GL_PROJECTION)

gluOrtho2D(0.0,800.0,0.0,600.0)

}

void circleMidpoint(scrpt circCtr,GLint radius)

{

scrpt circpt

GLint p=1-radius

circpt.x=0

circpt.y=radius

void circlePlotPoints(scrpt,scrpt)

circlePlotPoints(circCtr,circpt)

while(circpt.x<circpt.y)

{

circpt.x++

if(p<0)

p+=2*circpt.x+1

else

{

circpt.y--

p+=2*(circpt.x-circpt.y)+1

}

circlePlotPoints(circCtr,circpt)

}

}

void circlePlotPoints(scrpt circCtr,scrpt circpt)

{

setPixel(circCtr.x+circpt.x,circCtr.y+circpt.y)

setPixel(circCtr.x-circpt.x,circCtr.y-circpt.y)

setPixel(circCtr.x+circpt.x,circCtr.y-circpt.y)

setPixel(circCtr.x-circpt.x,circCtr.y+circpt.y)

setPixel(circCtr.x+circpt.y,circCtr.y+circpt.x)

setPixel(circCtr.x+circpt.y,circCtr.y-circpt.x)

setPixel(circCtr.x-circpt.y,circCtr.y+circpt.x)

setPixel(circCtr.x-circpt.y,circCtr.y-circpt.x)

}

void display(void)

{ scrpt point

point.x=200

point.y=210

int radius=20

glClear(GL_COLOR_BUFFER_BIT)

glColor3f(0.5,0.6,1.0)

circleMidpoint(point,radius)

glFlush()

}

void main(int argc,char **argv)

{

glutInit(&argc,argv)

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)

glutInitWindowPosition(100,100)

glutInitWindowSize(400,400)

glutCreateWindow("pointcircle")

myinit()

glutDisplayFunc(display)

glutMainLoop()

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12512241.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存