游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4967|回复: 4

请教:在OpenGL中怎么绘制椭圆?

[复制链接]

1

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2005-11-10 22:02:00 | 显示全部楼层 |阅读模式
请问各位大虾:
     在OpenGL中如何画椭圆?不调用Arc()函数。谢谢!

27

主题

45

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2005-11-10 23:32:00 | 显示全部楼层

Re:请教:在OpenGL中怎么绘制椭圆?

改吧改吧 就可以画椭圆了 这是个画圆的

void Park()
{
    glBegin(GL_TRIANGLE_FAN);
       glVertex3f(0,0,0.0f);
       for(int i=0;i<=390;i+=30)
       {
            float p=(float)(i*3.14/180);
             glVertex3f((float)sin(p),(float)cos(p),0.0f);
       }
       glEnd();
}

6

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2005-11-11 11:24:00 | 显示全部楼层

Re:请教:在OpenGL中怎么绘制椭圆?

看看计算机图形书就可以了
void        MidEllipse( int xc, int yc, int a, int b, float* col )
{
        float                p;
        int        x = 0, y = b;
        p = b * b + a * a * ( -b + 0.25 );
        DrawPointsE( xc, yc, x, y, col );
        while ( b * b * (x + 1) < a * a * ( y - 0.5 ) )        {
                x ++;
                if ( p < 0 )
                        p += b * b * ( 2 * x + 3 );
                else        {
                        p += b * b * ( 2 * x + 3 ) + a * a * ( -2 * y + 2 );
                        y --;
                }
DrawPointsE( xc, yc, x, y, col );
        }
        p = b * b * ( x + 0.5 ) * ( x + 0.5 ) + a * a * ( y - 1 ) * ( y - 1 )
                                                                - a * a * b * b;
        while ( y > 0 )        {
                y --;
                if ( p < 0 )        {
                        p += b * b * ( 2 * x + 2 ) + a * a * ( -2 * y + 3 );
                        x ++;
                }
                else
                        p += a * a * ( -2 * y + 3 );
                DrawPointsE( xc, yc, x, y, col );
        }
}

你试试吧!

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-11-11 11:55:00 | 显示全部楼层

Re:请教:在OpenGL中怎么绘制椭圆?

最简单的一个办法就是先画圆,然后用glScalef()将圆拉伸成为椭圆

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2005-11-12 16:09:00 | 显示全部楼层

Re:请教:

void Park()
{
    glBegin(GL_TRIANGLE_FAN);
       glVertex3d( 0 , 0 , 0 );
       for(double i=0 ; i<6.4 ; i+=0.1)
       {
             glVertex3d( 5 cos(i) , 3 sin(i) , 0 );
       }
       glEnd();
}
宽高比为5比3的椭圆。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 15:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表