minecraft吧 关注:2,527,406贴子:31,642,256
  • 7回复贴,共1

在mc里用粒子生成图像

取消只看楼主收藏回复


这一切还要从一直蝙蝠说起……咳咳


IP属地:美国1楼2020-03-04 15:24回复
    众所周知,mc中dust粒子是唯一一个可以用命令调色的粒子
    /particle minecraftdust <R> <G> <B> <透明度> <x> <y> <z> ……
    其中<R><G><B>和<透明度>为粒子颜色的四个参数,但值得注意的是,mc里的这四个参数的范围并不是常规的0-255而是0-1。每个RGB通道的数值会先被乘以各自独立的随机倍率,范围为0.8-1.0,然后再被乘以一个共同的随机倍率,范围为0.6-1.0。随后每个通道的数值会被各自转换成一个字节。舍弃小数部分。


    IP属地:美国2楼2020-03-04 15:32
    收起回复
      因此我们可以扫描一张图片的每一个像素点获取RGB值,然后除以255得到的就是dust的RGB参数
      (由于楼主电脑技术太烂,又不懂编程,以下内容求大佬们不要喷我qwq)


      IP属地:美国4楼2020-03-04 15:36
      收起回复

        如果要把每一个像素全部扫描的话会卡到爆炸,所以这里我就直接
        先把图片插到image上(不要问我为什么用这种朴素的方法……不懂编程不会算法)并限制长宽的最大值(如果按输出大小直接放到图片框里显示出来就太小了),如果超过了就按比例缩小,然后用paintpicture方法按比例缩小放到图片框里


        IP属地:美国6楼2020-03-04 15:47
        回复
          接下来就逐行扫描picture里的内容,我们就可以通过计算得到这个像素的颜色R=color mod 2^8,G=color mod 2^16 \ 2^8,B=color \ 2^16,注意这里得到的数值需要除以255才是dust的参数,透明度为1,然后一波拼凑猛如虎
          这里设定为1格方块内4x4个粒子,如果粒子过于密集或稀疏效果看起来不是很好。由于dust的delta值mc会自动修正,这里都填0就可以了,速度和数量我弄得分别是0和1(这两个值不宜过大)。

          PS:由于vb的蜜汁算法,所有0~1的小数全部不会显示
          个位数的0,还有小数位数太多会表示为科学计数法,所以就强行format转换成特定格式的字符串……


          IP属地:美国7楼2020-03-04 16:07
          回复
            直接循环的话cpu容易爆掉(况且我的配置太烂了),这里实在没什么办法,只好借助timeGetTime在计算一定次数后先doevents,还有text似乎显示不了这么多字,这里用的richtextbox输出,最后保存成函数文件,在游戏里运行就可以啦!


            IP属地:美国8楼2020-03-04 16:13
            回复
              竖版显示,分辨率好低的亚子,但是调高了会更卡


              IP属地:美国9楼2020-03-04 16:18
              回复
                果然,秒沉


                IP属地:美国来自Android客户端10楼2020-03-04 16:27
                回复