我有一个旋转矩形的四个2d顶点A B C D, 我需要在pixelbufer中栅格化/绘制它(有效) 使用setpixel(x,y,color)
怎么做?
我正在尝试使用像
这样的代码 // convertilg a b c d do up down left right,
// calculating some dx_left dx_right on y--
// etc (frustrating on special cases when there are 2 up_y vertices in same line etc)
for(;;)
{
drawhorizontalline(y, xstart, xend, color);
if(y==downy) break;
y--;
xstart+=dxstart;
xend+=dxend;
if(y==lefty) dxstart = dxright;
if(y==righty) dxend = dxleft;
}
但是最令人沮丧的是(非常容易出错并且最令人沮丧) 我真的厌倦了昨天整整这一天,我需要找到 也许是一些工作代码而不是试图调试这个
答案 0 :(得分:5)
要将矩形处理填充为闭合凸多边形(几乎与三角形填充相同)
命令您的积分匹配缠绕规则
所以有行 AB BC CD DA 或反向
创建左右缓冲区
地址为y
- 坐标,其数组为x
- 位置,如果需要,还为color,texture coordinates,...
数组。对于初学者:
int buf_x0[ys],buf_x1[ys];
其中ys
是屏幕y
- 解决方案
实施任何绘制线算法
但不是绘制到屏幕只是将像素的x
坐标存储到缓冲区。
setpixel(x,y,color);
执行:buf_x?[y]=x;
。 目的地是哪个缓冲区取决于行Y
方向
dy<0
则填写buff_x0
dy>0
则填写buff_x1
如果dy==0
则buf_x0[y]=min(x)
和buf_x1[y]=max(x)
之后缓冲区包含开始和结束x
- 水平线的位置
在屏幕上填充矩形
for (y=min(Ay,By,Cy,Dy);y<=max(Ay,By,Cy,Dy);y++)
draw_horizontal_line(y,buf_x0[y],buf_x1[y],color);
图像清晰(取自我在低级计算机图形学上的讲座)
图片说明:
buf_x0[],buf_x1[]
buf_x0[y] <= buf_x1[y]
,那么水平线的绘制会缩小到单个for
循环此
的here简单的 C ++ 示例