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

Project1

 找回密码
 注册会员
搜索

RM 2D绘图的插件(加了传送位图功能啦,效率测试)

查看数: 2500 | 评论数: 8 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-3-1 07:07

正文摘要:

本帖最后由 SailCat 于 2022-3-1 22:07 编辑 不依赖SEP Core运行,所以独立发一下 但是……谢谢大家的测试我只能说[泪目]……看来这个功能做出来终究还是有它的可取之处的,那就后续再更新一下吧~ 就是写着顺手就 ...

回复

陈大帅帅帅哥 发表于 2022-3-26 17:28:53
有没有办法绘制边缘渐变到透明的图形
灯笼菜刀王 发表于 2022-3-2 10:02:27
本帖最后由 灯笼菜刀王 于 2022-3-2 10:05 编辑

另外想到个用途, 只要不刷新, 可以无限往 bitmap 上画图形, 那也可用于"战争迷雾" ,  即时描绘可能影响效率, 但是战棋是不需要即时描绘的

以前我就想过这种用法, 然而只能画矩形, 太不像迷雾了, 就放弃了

为了比较有气氛,  猫大能否让描绘的图形带羽化边缘呢?(就是边缘半透明递减, 能自定义模糊半径更好 )

点评

sepcore里有bitmap#blur  发表于 2022-3-2 11:49
RPGzh500223 发表于 2022-3-1 16:59:30
本帖最后由 RPGzh500223 于 2022-3-2 13:05 编辑

楼主考虑一下支持水平渐变,效率为垂直的一半(用Bitmap#stretch_blt,尽管看起来有点怪……)
用Bitmap#blt模拟水平渐变,效率大概垂直的58%,看起来正常多了
RUBY 代码复制
  1. class Bitmap
  2.   # cx    椭圆中心点X           基本整型
  3.   # cy    椭圆中心点Y           基本整型
  4.   # ax    椭圆X半轴长度         无符号整型
  5.   # by    椭圆Y半轴长度         无符号整型
  6.   # mode  椭圆颜色填充方向(0:左->右;1:上->下)   无符号整型
  7.   # color 椭圆边框颜色          RMXP的Color实例对象
  8.   # fillB 椭圆填充的起始颜色    RMXP的Color实例对象
  9.   # fillE 椭圆填充的终止颜色    RMXP的Color实例对象 或 nil(单色填充)
  10.   def fill_ellipse2(cx, cy, ax, by, mode, color, fillB, fillE=nil)
  11.  
  12.     if fillE
  13.       if mode == 0 then step = ax + ax - 1
  14.       elsif mode == 1 then step, fE = by + by - 1, fillE.clone
  15.       end
  16.       gR = (fillE.red   - fillB.red  ) / step
  17.       gG = (fillE.green - fillB.green) / step
  18.       gB = (fillE.blue  - fillB.blue ) / step
  19.       gA = (fillE.alpha - fillB.alpha) / step
  20.     end  
  21.     if mode == 0
  22.       if fillE
  23.         src, src_rect = Bitmap.new(ax + ax, 1), Rect.new(0, 0, 0, 0)
  24.         fB = fillB.clone
  25.         src.width.times do |x|
  26.           src.set_pixel(x, 0, fB)
  27.           fB.set(fB.red + gR, fB.green + gG, fB.blue + gB, fB.alpha + gA)
  28.         end
  29.       else
  30.         mode = 1
  31.       end
  32.     end   
  33.  
  34.     ratio, fB, w2 = ax.to_f / by, fillB.clone, 0
  35.     (by - 1).downto(0) do |y|
  36.       w = (Math.sqrt((by + y) * (by - y)) * ratio).to_i
  37.  
  38.       if mode == 1
  39.         self.fill_rect(cx - w, cy - y, w + w, 1, fB)
  40.  
  41.         if fillE
  42.           self.fill_rect(cx - w, cy + y, w + w, 1, fE)
  43.           fB.set(fB.red + gR, fB.green + gG, fB.blue + gB, fB.alpha + gA)
  44.           fE.set(fE.red - gR, fE.green - gG, fE.blue - gB, fE.alpha - gA)
  45.         else
  46.           self.fill_rect(cx - w, cy + y, w + w, 1, fB)
  47.         end
  48.       elsif mode == 0
  49.         src_rect.set(ax - w, 0, w + w, 1)
  50.         self.blt(cx - w, cy - y, src, src_rect)
  51.         self.blt(cx + w, cy + y, src, src_rect)
  52.       end
  53.  
  54.       self.set_pixel(cx - w, cy - y, color)
  55.       self.set_pixel(cx + w, cy - y, color)
  56.       self.set_pixel(cx - w, cy + y, color)
  57.       self.set_pixel(cx + w, cy + y, color)
  58.  
  59.       while w2 < w
  60.         self.set_pixel(cx - w2, cy - y - 1, color)
  61.         self.set_pixel(cx + w2, cy - y - 1, color)
  62.         self.set_pixel(cx - w2, cy + y + 1, color)
  63.         self.set_pixel(cx + w2, cy + y + 1, color)
  64.         w2 += 1
  65.       end
  66.     end
  67.   end
  68. end


这RGB颜色渐变……

draw_radar.png (45.83 KB, 下载次数: 31)

回复楼上的示意图GDI+50次/秒

回复楼上的示意图GDI+50次/秒

h.png (8.57 KB, 下载次数: 28)

h.png

v.png (9.57 KB, 下载次数: 30)

v.png

点评

昨天我把blt实现了以后就知道结合原始blt做水平渐变根本不是问题了,只不过就是填充一个w*1那么长的然后一行行做进去  发表于 2022-3-2 17:00
50次秒得gdi+的速度吧,纯RGSS应该到不了,因为所有不走fill_rect或者没法走fill_rect的像素点描绘,极限就是几千个点/帧,1/50秒这还不到一帧  发表于 2022-3-1 19:47
guoxiaomi 发表于 2022-3-1 10:56:07
本帖最后由 guoxiaomi 于 2022-3-1 13:13 编辑

三角形ABC,然后三个点各有自己的颜色,最终三角形内点P的颜色是这三个点颜色的线性插值,插值比例就是PBC:PAC:PAB。

顺便看到set_pixel我其实是很慌的,是不是可以靠之前某位朋友写的汇编来高速操作?

点评

这是顶点着色??挺好奇怎么算(插值几乎都是浮点运算……) 简单的周边渐变填充GDI+可以直接画在RMXP的bitmap上,就是效率很低……  发表于 2022-3-1 16:43
我再看看!  发表于 2022-3-1 15:01
一帧能做7000次 而凡是用到set_pixel的算法其复杂度都是o(w+h) 所以……复杂度是o(wh)的我全部是用的fill_rect  发表于 2022-3-1 13:29
灯笼菜刀王 发表于 2022-3-1 10:26:15


搭配半生烛光DLL里的蒙版可以搞非矩形头像框

不过, 它这个蒙版不太好用, 结果变黑白的~~

猫大是否考虑把它做成蒙版

未标题-2.jpg (31.4 KB, 下载次数: 32)

未标题-2.jpg

点评

效果很好  发表于 2022-3-1 15:21
a.bitmap.blt_circle(50, 50, 50, RPG::Cache.is(9, "baixue_G"), 50, 50, 255)  发表于 2022-3-1 13:43
做成刀把版  发表于 2022-3-1 10:45
Im剑侠客 发表于 2022-3-1 08:19:09
有点意思,联想起一个左右对比填涂的小游戏。
不知道像素点的描绘是否可以变为手动,不限预设形状,随着玩家操作,比如简单的跟随鼠标[单点一粒/按定涂鸦]?

点评

像素点描绘已有,剩下的核心的部分,解决这两条就基本成了:输入描绘、判定不规则图形的填涂饱腹度。  发表于 2022-3-2 08:26
是啊,像Photoshop工具的钢笔头,出墨量可以选的那种就更人性化了。如果猫大有这个扩展意愿的话,我可以搜集一些关于这个小游戏详细的材料补充。  发表于 2022-3-2 08:17
有点意思,但是一个像素点也实在太小了,要做,就得做成画笔式的,也就是描绘的线条本身是有宽度的  发表于 2022-3-1 23:19
百里_飞柳 发表于 2022-3-1 07:49:47
这也是可以顺手随便写出来的吗
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-22 17:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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