opengl畫圓演算法
⑴ OpenGl動態畫圓
要看擦除的方式是什麼樣的嘞
最簡單的方法是動態的畫出一個圓,然後再把顏色調成背景色,動態的再畫一遍就模仿了擦除的效果.
⑵ Opengl ES 2.0中,怎樣畫一個圓和橢圓
需要把橢圓的弧線拆分成直線段。當線段足夠密集的時候,在屏幕上看上去就圓了
在xy的直角坐標系中,對於橢圓,將圓心放在原點,長軸(長半徑為r1)與x軸重合,短軸(短半徑為r2)與y軸重合,那從圓心出發與x軸正方向夾角a的射線與橢圓交點為:
(
r1*cosa
,
r2*sina
)
你可以這樣畫橢圓以後通過OpenGL矩陣進行平移和旋轉。圓就是長短軸相等的橢圓~
⑶ 如何用OpenGL畫圓面(不要只有一個圓,圓內要填充顏色)
有兩點要注意:
初始化時要有glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);當然默認情況是這句
圓面是用許多個三角形組成的,繪制圓面的函數
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 畫圓
木有...只能模擬多邊形不斷細化