当前位置:首页 » 操作系统 » opengl画圆算法

opengl画圆算法

发布时间: 2022-05-06 02:45:55

⑴ OpenGl动态画圆

要看擦除的方式是什么样的嘞
最简单的方法是动态的画出一个圆,然后再把颜色调成背景色,动态的再画一遍就模仿了擦除的效果.

⑵ Opengl ES 2.0中,怎样画一个圆和椭圆

需要把椭圆的弧线拆分成直线段。当线段足够密集的时候,在屏幕上看上去就圆了
在xy的直角坐标系中,对于椭圆,将圆心放在原点,长轴(长半径为r1)与x轴重合,短轴(短半径为r2)与y轴重合,那从圆心出发与x轴正方向夹角a的射线与椭圆交点为:

r1*cosa

r2*sina

你可以这样画椭圆以后通过OpenGL矩阵进行平移和旋转。圆就是长短轴相等的椭圆~

⑶ 如何用OpenGL画圆面(不要只有一个圆,圆内要填充颜色)

有两点要注意:

  1. 初始化时要有glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);当然默认情况是这句

  2. 圆面是用许多个三角形组成的,绘制圆面的函数



voidDrawtri()
{
doublen=50;//分段数
floatR=20;//半径
inti;
glPushMatrix();
glColor3f(0.0,0.2,0.8);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0.0,0.0);
for(i=0;i<=n;i++)
glVertex2f(R*cos(2*PI/n*i),R*sin(2*PI/n*i));
glEnd();
glPopMatrix();
}

如需要opengl完整代码,请继续留言

⑷ 怎么用opengl画圆弧呢知道圆心,圆弧起点和终点坐标了。说说思路也可以哈···要是有源程序更好

#include<GL/glut.h>
#include<stdio.h>
#include<stdlib.h>

GLuintstartList;

voidinit(void)
{
GLUquadricObj*qobj;

startList=glGenLists(1);
qobj=gluNewQuadric();
gluQuadricDrawStyle(qobj,GLU_SILHOUETTE);/*只画边缘*/
gluQuadricNormals(qobj,GLU_NONE);/*不算NORMAL(顶点的方向)*/
glNewList(startList,GL_COMPILE);/*只编译DISPLAYLIST不绘制*/
gluPartialDisk(qobj,0.0,1.0,20,4,0.0,225.0);/*第一个参数是Aquadricobject,然后内圆半径为0.0,外圆半径为1.0,z轴向分割片数,最后两个参数是圆弧的起始角和结束角*/
glEndList();
}

voiddisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();

glColor3f(1.0,1.0,0.0);
glCallList(startList);

glPopMatrix();
glFlush();
}

voidreshape(intw,inth)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
glOrtho(-2.5,2.5,-2.5*(GLfloat)h/(GLfloat)w,
2.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);
else
glOrtho(-2.5*(GLfloat)w/(GLfloat)h,
2.5*(GLfloat)w/(GLfloat)h,-2.5,2.5,-10.0,10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

/*ARGSUSED1*/
voidkeyboard(unsignedcharkey,intx,inty)
{
switch(key){
case27:
exit(0);
break;
}
}

intmain(intargc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(300,300);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return0;
}

⑸ 求告知用Opengl 怎么在三维坐标下画圆,想达到的目标的是两个坐标之间画很多个圆,形成管状物

Graphicsg=e.Graphics;//创建画板,这里的画板是由Form提供的.

Penp=newPen(Color.Blue,1);

Penp1=newPen(Color.Red,1);

for(inti=0;i<40;i++)

{

if(i%2==0)

{g.DrawEllipse(p,panel1.Width/2-5,panel1.Height/2-i,100,50);}

else

{

g.DrawEllipse(p1,panel1.Width/2-5,panel1.Height/2-i,100,50);

}

}

⑹ openGL画圆

以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 = 0; i<10;i++)
{
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坐标就好了。至于其他参数下的截图,你就自己修改下循环参数就可以了。

⑺ c++ opengl怎么画圆

用Ellipse(float x,float y,float w,float h)吧,这是画椭圆的函数,x,y为中心坐标,w,h是椭圆的宽高,如果w=h那就是一个圆了,比如Ellipse(100,100,50,50)就是在100,100位置画一个直径为50的圆

⑻ 关于opengl es 如何画圆 以及不规则图形

球面坐标计算三重积分:k是纬度(-90~90) m是经度(0~360)x=r*sink*cosmy=r*sink*sinmz=r*cosk绘制柱面的话 只要计算纬度为0时的x,y,z。经度的采样间隔要小于30

⑼ openGL 画圆的问题

glBegin(GL_LINE_LOOP);
for(i=0; i<n; ++i)
glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
glEnd();

上面4行代码就是画半径为R的圆用的, 如果你要让圆的半径是5, 圆心在5, 5的话

需要改成

glBegin(GL_LINE_LOOP);
for(i=0; i<n; ++i)
glVertex2f(5 + 5*cos(2*Pi/n*i), 5 + 5*sin(2*Pi/n*i));
glEnd();

或者把R改成5

⑽ OpenGL 画圆

木有...只能模拟多边形不断细化

热点内容
android的音频播放器 发布:2024-10-07 08:28:46 浏览:368
c5哪个配置最值得买 发布:2024-10-07 08:27:21 浏览:591
sql全角转半角 发布:2024-10-07 08:25:00 浏览:778
公众服务器配置是什么 发布:2024-10-07 08:17:11 浏览:492
为什么服务器贵吗 发布:2024-10-07 08:16:37 浏览:641
为什么服务器的引导分区会损坏 发布:2024-10-07 07:54:07 浏览:672
安卓社交源码 发布:2024-10-07 07:16:12 浏览:949
python两个list合并 发布:2024-10-07 07:12:02 浏览:870
迅雷文件夹加密 发布:2024-10-07 07:03:00 浏览:952
dns服务器地址是多少 发布:2024-10-07 06:53:42 浏览:176