游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1191|回复: 2

DDA vs. Breseham

[复制链接]

42

主题

137

帖子

137

积分

注册会员

Rank: 2

积分
137
发表于 2006-5-2 18:20:00 | 显示全部楼层 |阅读模式
编了一个很烂的程序测试两种画线算法的速度. 在画的线数少于250的时候DDA算法快.很莫名其妙,为什么有这样的差别.

#include <GL/gl.h>
#include <GL/glaux.h>
#include <time.h>

#define PNT(x, y) {         glBegin (GL_POINTS);           glVertex2i (x, y);           glEnd ();   }

void DDAline (int x0, int y0, int x1, int y1)
{
        float i, j;
        
        for (i = x0, j = y0; i <= x1; i += (x1 > x0)*2-1, j += 1.0*(y1 - y0)/(x1-x0))
                PNT ((int)i, (int)j);
}

void BresehamLine (int x0, int y0, int x1, int y1)
{
        int dx = x1 - x0, dy = y1 - y0;
        int p0 = dy * 2 - dx, pk = p0;
        int x, y;

        for (x = x0+1, y = y0; x <= x1; x++) {
                int key = pk > 0;
                y += key;
                pk += (dy << 1) - ((dx * key) << 1);
                PNT (x, y);
        }
}

int main(int argc, char** argv)
{
   int x = 10, y = 10, i;
   time_t bg, bg2;
   auxInitDisplayMode (AUX_SINGLE | AUX_RGBA);
   auxInitPosition (0, 0, 500, 500);
   auxInitWindow (argv[0]);

   glClearColor (0.0, 0.0, 0.0, 0.0);
   glClear(GL_COLOR_BUFFER_BIT);
   glColor3f(1.0, 1.0, 1.0);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(-500, 500, -500, 500, -1.0, 1.0);

   bg = clock ();
   for (i = 0; i < 250; ++i)
        DDAline (0, 0, 500, 300);
   bg = clock () - bg;
   //glFlush ();
   bg2 = clock ();
   for (i = 0; i < 250; ++i)
        BresehamLine (0, 0, 500, 300);
   bg2 = clock () - bg2;
   //glFlush ();
   if (bg2 >= bg)
        BresehamLine (0, 0, 100, 0);
   glFlush ();
   Sleep(2000);
   return 0;
}

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2006-5-2 23:16:00 | 显示全部楼层

Re:DDA vs. Breseham

为了公平的比较,建议:
glOrtho(0, 500, 0, 500, -1.0, 1.0);

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2006-5-2 23:24:00 | 显示全部楼层

Re:DDA vs. Breseham

另外clock精度不够。循环次数小的时候误差太大。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 10:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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