Programming 版 (精华区)

发信人: lansh (沧海一粟), 信区: Programming
标  题: Allegro 游戏程序库 (基本绘图函数)
发信站: 哈工大紫丁香 (2002年09月11日20:07:14 星期三), 站内信件

发信人: cloudwu (云风), 信区: GAME_Designer
标  题: Allegro 游戏程序库 (基本绘图函数)
发信站: BBS 水木清华站 (Wed May 20 10:51:01 1998)

     ______   ___    ___
    /\  _  \ /\_ \  /\_ \
    \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___
     \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
      \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
       \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
        \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
                                       /\____/
                                       \_/__/        3.0 版
                    一个游戏程序库
               By Shawn Hargreaves, 1994/97
                          云风 译
                          http://www.nease.net/~cloudwu
                          E-mail:cloudwu@nease.net
============================================
=============   基本绘图函数   =============
============================================
除了 _putpixel(), 所有这些例程都将受当前的绘图模式和目标位图的
剪裁矩形影响.

void putpixel(BITMAP *bmp, int x, int y, int color);
   使用当前的绘图模式和位图剪裁矩形向位图的指定位置写一个点.

void _putpixel(BITMAP *bmp, int x, int y, unsigned char color);
   和常规的 putpixel() 差不多, 但是要快的多,因为它用在线汇编函
   数写成. 这个不能工作在 mode-X 或 真彩显示模式下, 不做任何剪
   裁 (如果你尝试向位图以外画点,将死掉!), 并且忽略绘图模式. 它
   破坏了 %fs 寄存器, 因此你不能和使用了 _farsetsel() 和
   _farns*() 函数的代码混用.

int getpixel(BITMAP *bmp, int x, int y);
   从位图的 x,y 处读一个点. 如果点在位图以外则返回 -1.

unsigned char _getpixel(BITMAP *bmp, int x, int y);
   getpixel() 的更快的在线版本. 这个不能工作在 mode-X 或真彩显
   示模式下, 它不作任何剪裁, 因此你必须确保点在位图里面.

void vline(BITMAP *bmp, int x, int y1, int y2, int color);
   在位图里,从点 (x, y1) 到 (x, y2) 画一条垂线.

void hline(BITMAP *bmp, int x1, int y, int x2, int color);
   在位图里,从点 (x1, y) 到 (x2, y) 画一条水平线.

void do_line(BITMAP *bmp, int x1, y1, x2, y2, int d, void (*proc)());
   计算从点 (x1, y1) 到 (x2, y2) 之间直线上的所有点, 在每个点上调
   用所提供的函数. 这个函数将被传入 bmp 参数, x 和 y 坐标, 和参数
   d, 因此这适合于 putpixel() 一起使用.

void line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
   向位图从点 (x1, y1) 到 (x2, y2) 画一条直线.

void triangle(BITMAP *bmp, int x1, y1, x2, y2, x3, y3, int color);
   填充三个点之间的三角形.

void polygon(BITMAP *bmp, int vertices, int *points, int color);
   填充任意角个数的多边形. 传入边的条数和包含了一串 x, y 点值的数
   组(总数为边数*2).

void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
   画出作为对角的两个给定的点所描述的空心矩形.

void rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
   填充一个矩形,参数为描述相对角的两个点.

void do_circle(BITMAP *bmp, int x, int y, int radius, int d, void (*proc)());
   计算圆心为 (x, y) 半径为 r 的圆上的所有点,在每个点上调用所提供
   的函数. 这个函数将被传入一个 bmp 参数, x 和 y 坐标, 和参数 d,
   因此这适合于 putpixel() 一起使用.

void circle(BITMAP *bmp, int x, int y, int radius, int color);
   以指定的中心和半径画一个圆.

void circlefill(BITMAP *bmp, int x, int y, int radius, int color);
   以指定的中心和半径填充一个圆.

void do_ellipse(BITMAP *bmp, int x, y, int rx, ry, int d, void (*proc)());
   计算以点 (x, y) 为中心 rx,ry 为半径的椭圆上的所有点, 在每个点
   上调用所提供的函数. 这个函数将被传入一个 bmp 参数, x 和 y 坐
   标, 和参数 d, 因此这适合于 putpixel() 一起使用.

void ellipse(BITMAP *bmp, int x, int y, int rx, int ry, int color);
   以指定中心和半径画一个椭圆.

void ellipsefill(BITMAP *bmp, int cx, int cy, int rx, int ry, int color);
   以指定中心和半径填充一个椭圆.

void calc_spline(int points[8], int npts, int *x, int *y);
   计算沿着一条 bezier 曲线的一串 npts 值, 将它们储存在输出的 x
   和 y 数组里. bezier曲线由点数组里的四个 x/y 控制点指定:
   points[0] 和 points[1] 包含了第一个控制点的坐标, points[2] 和
   points[3] 是 第二个点, 等等. 控制点 0 和 3 是曲线的端点, 点 1
   和 2 决定曲线的走向. 曲线可能不会通过点 1 和 2 , 但这两个点影
   响着点 0 和 3 之间的弯曲程度(直线 p0-p1 和 p2-p3 是曲线的切线).
   最简单的想象它的方法是,曲线从 p0 开始, 向 p1 的方向延伸, 但是
   曲线会转回来以便于从 p2 的方向到达 p3. 除了它们的基本作用以外,
   曲线可以用来在围绕一串控制点来产生一条平滑的路径, 参考 ex23.c .

void spline(BITMAP *bmp, int points[8], int color);
   使用点数组里指定的四个控制点画一条 bezier 曲线.

void floodfill(BITMAP *bmp, int x, int y, int color);
   用指定的颜色从点 (x, y) 开始填充一个封闭的区域.

--
http://www.nease.net/~cloudwu
http://computer.igd.edu.cn/~cloud
E-mail: cloudwu@163.net
  
--
人生得意需尽欢,莫使金樽空对月。
天生我才必有用,千金散尽还复来。

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: hitsat.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.714毫秒