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毫秒