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

Project1

 找回密码
 注册会员
搜索
楼主: ⑨姐姐
打印 上一主题 下一主题

[原创发布] 【RGD】使用 DirectX 驱动的 RMVA Game.exe(v1.6)

  [复制链接]

Lv2.观梦者

梦石
0
星屑
692
在线时间
68 小时
注册时间
2012-5-24
帖子
37
1
发表于 2019-2-9 22:35:59 | 显示全部楼层
一调用bitmap的font=就会报一个"wrong argument type",在原版里能正常运行。

点评

我也发现这个问题了,新版本会修复的  发表于 2019-2-11 15:10
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
692
在线时间
68 小时
注册时间
2012-5-24
帖子
37
2
发表于 2020-3-3 20:29:54 | 显示全部楼层
有个奇特的bug(sprite和viewport的表现不一致所以怀疑是bug)
我用shader做变形特效时发现,在某些坐标上会取到空颜色,并且与下方图层以异样的方式合成。
如图所示,第一张是sprite直接使用这种shader时的样子。第二张是同一sprite不使用shader,而让它的viewport使用同一shader时的样子。


第二张当中显现的河流图片,是由低层viewport显示的一张普通图片。
若低层viewport的color的alpha设为0,就看不到它,它原本显现的那些区域会成为黑色。若设为0以外的任何值,就是图中效果。
高层viewport计算这些异常区域时,从采样器得到的颜色,利用shader内的if间接判断,我认为是(0,0,0,0)。
附上shader代码:

PS_OUTPUT myPS(float4 color : COLOR0, float2 texcoord : TEXCOORD0)
{
    texcoord.x = texcoord.x + (0.5+0.5*sin(8.0*PI*(texcoord.x))) / 16.0;
    float4 res = tex2D(spriteSampler, texcoord);
    return GetOutput(res);
}

pass MyEft
  {
    AlphaBlendEnable = true;
    SeparateAlphaBlendEnable = true;
   
    BlendOp = ADD;
    SrcBlend = ONE;
    DestBlend = INVSRCALPHA;
    SrcBlendAlpha = ONE;
    DestBlendAlpha = INVSRCALPHA;
   
    PixelShader = compile ps_2_0 myPS();
  }

其中实现的就是简单的“扩张-挤压”波纹效果。调整算式当中的数值,可能得到没有异常的图,但我看不出规律。

点评

Sprite和viewport的shader模式不太一样其实……主要原因是sprite没预乘alpha,合成的时候才处理,如果文档里没写的话之后我去补充一下  发表于 2020-3-3 20:46
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
692
在线时间
68 小时
注册时间
2012-5-24
帖子
37
3
发表于 2020-3-20 23:15:26 | 显示全部楼层
改动坐标直接影响到alpha,实在猜不透,大佬能不能多说一些呢?
这次只有一个viewport了,显示一张纯白满alpha、满大小的图,直接反映了alpha在某些位置上的奇特变化。


代码当中,坐标改变部分依然是呈现简单的波纹,而颜色方面专门用红、蓝指示了改变的alpha
PS_OUTPUT myPS(float4 color : COLOR0, float2 texcoord : TEXCOORD0)
{
    float dx = texcoord.x - 0.5;
    float dy = texcoord.y - 0.5;
    float p = sqrt(dx*dx+dy*dy);
    p = 1 + (0.5+0.5*sin(8.0*PI*(p))) / 16.0 / p;
    dx *= p;
    dy *= p;
    texcoord.x = 0.5 + dx;
    texcoord.y = 0.5 + dy;
    float4 res = tex2D(spriteSampler, texcoord);
    if (res.a < 1.0)
    {
      res.r = 1.0-res.a;
      res.g = 0.0;
      res.b = res.a;
      res.a = 1.0;
    }
    return GetOutput(res);
}
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
692
在线时间
68 小时
注册时间
2012-5-24
帖子
37
4
发表于 2020-3-21 18:04:48 | 显示全部楼层
也有人用win10测出了更加剧烈的爆炸,像这样

点评

可以的话发个工程给我试试吧  发表于 2020-3-21 18:18
确认是装了June2010的DX9版本么?  发表于 2020-3-21 18:17
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
692
在线时间
68 小时
注册时间
2012-5-24
帖子
37
5
发表于 2020-3-21 19:11:38 | 显示全部楼层
这是我的工程。DX的具体信息不知道从哪看
链接:https://pan.baidu.com/s/1YoVyl0vFRslHMc_0WobilA
提取码:pe1l
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
692
在线时间
68 小时
注册时间
2012-5-24
帖子
37
6
发表于 2020-3-22 10:08:52 | 显示全部楼层
哦哦,好华点,谢谢!
看起来和之前的事没有关系啊……只要下层viewport.color的aplpha>0,就要露出来,无关于sprite存在。等于0则完全正常,之前说错了。同样,用空的pass不改变效果。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
692
在线时间
68 小时
注册时间
2012-5-24
帖子
37
7
发表于 2020-3-22 11:21:25 | 显示全部楼层
啊……我改成p+0.001或者用 if 改变0,都是没有用的。
并且,我测试了固定的数据,当放大率为1.1924时,出现了异常

放大率为1.1925时,全部都有了alpha改变

放大率为1.5时,改变得很多

代码是这样:
  PS_OUTPUT myPS(float4 color : COLOR0, float2 texcoord : TEXCOORD0)
  {
      float dx = texcoord.x - 0.5;
      float dy = texcoord.y - 0.5;
      dx *= 1.1925;
      dy *= 1.1925;
      texcoord.x = 0.5 + dx;
      texcoord.y = 0.5 + dy;
      float4 res = tex2D(spriteSampler, texcoord);
      if (res.a < 1.0)
      {
        res.r = 1.0-res.a;
        res.g = 0.0;
        res.b = res.a;
        res.a = 1.0;
      }
      return GetOutput(res);
  }
pass是空的。
如果把dx*=或者dy*=单独注释掉,都能得到正常的白色。

点评

找不出原因,推测可能是dx的bug……  发表于 2020-3-22 19:04
不对,新的里面没p了,我再看看  发表于 2020-3-22 12:23
有可能是溢出问题?除以p这种操作当p小的时候容易溢出  发表于 2020-3-22 12:22
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
692
在线时间
68 小时
注册时间
2012-5-24
帖子
37
8
发表于 2020-3-22 11:44:02 | 显示全部楼层
这是我能看到的,放大率变化过程的动图,从alpha正常到开始出问题

这是新的工程文件
链接:https://pan.baidu.com/s/108g31NpTfq0bxffw1Bt_Mw
提取码:39u3
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-12 22:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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