设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1633|回复: 14
打印 上一主题 下一主题

填充一个三角形

 关闭 [复制链接]

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

跳转到指定楼层
1
发表于 2008-3-2 21:35:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
好吧我承认又是超级生僻的问题……
长话短说:
有一个bitmap;
三个点:X1,Y1,X2,Y2,X3,Y3
一个颜色Color
用这三个点组成三角形用Color填充,就这样。
(如果需要其它条件说出来无妨)
P.S.如果跟我说一个点一个点填充那就算了吧==
版务信息:本贴由楼主自主结贴~
版务信息:本贴由楼主自主结贴~
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

2
发表于 2008-3-2 21:38:43 | 只看该作者
我记得以前我写过一段代码来回这个问题……
http://rpg.blue/viewthread.php?tid=78779

代码如下:

def draw_triangle(x1,y1,x2,y2,x3,y3,color=Color.new(0,0,0,255))
triangle=Sprite.new
triangle.bitmap=Bitmap.new(640,480)
x=0
k1=(y2-y1)*1.0/(x2-x1)
k2=(y3-y1)*1.0/(x3-x1)
k3=(y3-y2)*1.0/(x3-x2)
height=1
for x in x1..x2
     y = (x-x1)*k1+y1 #求出点
     height = (x-x1)*k2+y1-y
     if height < 0
       y+=height
       height = 0 - height
     end
     triangle.bitmap.fill_rect(x, y, 1, height, color)
   end
   for x in x2..x3
     y = (x-x2)*k3+y2
     height = (x-x1)*k2+y1-y
     if height < 0
       y+=height
       height = 0 - height
     end
     triangle.bitmap.fill_rect(x, y, 1, height, color)
   end
end


简单来说就是算切线斜率,然后用fill_rect填充两条线之间的部分。
其实血条脚本也是这么画的……
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

3
 楼主| 发表于 2008-3-2 21:42:24 | 只看该作者
好的拿走,效率应该还不错吧==,另:看到水水的签名就知道遇到诡异的事情了
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

4
发表于 2009-6-12 08:00:00 | 只看该作者
还行- -
这个东西有点问题,首先x1、x2、x3必须由小到大还不能相等,另外就是要放到某个类里边并且刷新
只画一个三角形的话不会有问题的,只是不知道你要画多少?
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

悔恨的天使

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-26
帖子
726
5
发表于 2008-3-2 21:50:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

6
发表于 2008-3-2 21:52:35 | 只看该作者
望楼上,其实U可以把一个八角形拆为若干个三角形试试……
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

7
 楼主| 发表于 2008-3-2 21:54:08 | 只看该作者
望天==我要一帧八九个三角形(很小)而且3个x值必定会有2个相等,怎么办……
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

8
发表于 2008-3-2 21:58:54 | 只看该作者
那个,你在我那个脚本里加一个判断就可以
def draw_triangle(x1,y1,x2,y2,x3,y3,color=Color.new(0,0,0,255))
triangle=Sprite.new
triangle.bitmap=Bitmap.new(640,480)
x=0
if x2 != x1
  k1=(y2-y1)*1.0/(x2-x1)
end
if x3 != x1
  k2=(y3-y1)*1.0/(x3-x1)
end
if x3 != x2
  k3=(y3-y2)*1.0/(x3-x2)
end
height=1
if x1 != x2
for x in x1..x2
    y = (x-x1)*k1+y1 #求出点
    height = (x-x1)*k2+y1-y
    if height < 0
      y+=height
      height = 0 - height
    end
    triangle.bitmap.fill_rect(x, y, 1, height, color)
  end
end
if x2 != x3
  for x in x2..x3
    y = (x-x2)*k3+y2
    height = (x-x1)*k2+y1-y
    if height < 0
      y+=height
      height = 0 - height
    end
    triangle.bitmap.fill_rect(x, y, 1, height, color)
  end
end
end

不知道这么干行不。
一祯一个我不知道效果如何,记得画CP条的时候FPS降的也不是很多,不过肯定有影响吧= =
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

悔恨的天使

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-26
帖子
726
9
发表于 2008-3-2 21:59:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

10
发表于 2008-3-2 22:04:09 | 只看该作者
望LS,其实这个算法稍微有点不够优化了……因为这个判断需要两个for嵌套,平均速度会是直接fill_rect的2次方=v=|||(<---刚学数据结构才教到这里的人)
其实如果用宽度为1的线fill_rect还是慢,并且不追求画面质量的话也可以把线宽设置为2= =
总之减少循环次数应该对速度有改进吧~
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-13 06:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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