当前位置:首页 » 操作系统 » 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 画圆

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

热点内容
shell脚本文件路径 发布:2025-01-18 03:40:31 浏览:483
sql语句执行错误 发布:2025-01-18 03:21:49 浏览:651
数据库双引号 发布:2025-01-18 03:10:20 浏览:78
学java和php 发布:2025-01-18 03:01:03 浏览:452
怎么开服务器的端口 发布:2025-01-18 02:54:23 浏览:648
别克君越编程 发布:2025-01-18 02:32:24 浏览:914
ftp游戏下载网站 发布:2025-01-18 02:09:04 浏览:628
python调用另一个文件中的函数 发布:2025-01-18 02:03:54 浏览:597
mysql存储html 发布:2025-01-18 01:57:24 浏览:129
双ip服务器对网站优化有影响吗 发布:2025-01-18 01:56:41 浏览:246