3

我一直在使用 Haxe + Away3D 编写一个小行星生成器,并部署到 HTML5/WebGL。但是在渲染我的云时我遇到了一个奇怪的问题。我有行星网格,然后云在同一位置网格稍大。

我正在使用柏林噪声函数来生成行星特征和云层,将它们写入位图并将位图用作纹理。现在,奇怪的是,当我将它部署到 iOS 或 C++/OSX 时,它完全按照我想要的方式呈现:

好的

现在,当我部署到 WebGL 时,它会生成一个相同的漫反射贴图,但呈现为:

坏与丑

(由于我重新加载页面的频率,上面的分辨率要低得多。问题在更高的分辨率下仍然存在。)

云在那里,边缘看起来很好,纤细且半透明。但是里面是不透明的,看起来渲染的不一样(每个像素都是一样的颜色,只是改变了alpha通道)

我意识到这可能与代码最终如何在 haxe 中编译/生成有关,但我希望它像渲染设置或我没有设置的混合模式这样简单。但由于我什至不确定到底发生了什么,我不知道去哪里找。

这是正在生成的漫反射贴图。我把它覆盖在红色上,这样云就可以看到了。

云

4

2 回答 2

0

那么,您是否从 ByteArray 上传了该图像?Lime 曾经允许使用数组索引运算符访问 ByteArray,即使它不应该在 js 上使用。这在最新版本的 Lime 中已修复以避免错误。我使用 __get 和 __set 方法而不是 [] 来访问字节数组。

Away3d 本身也可能是导致此问题的原因,因为后端代码是根据您使用的目标从不同的源文件生成的。例如,Texture.uploadFromByteArray 的 byteArrayOffset 参数在 html5 上支持,但在 native 上不支持。

如果 away3d 是问题的原因,那是代码的哪一部分导致了问题?我现在不确定。

编辑:我也遇到了 OpenFL 最新的 WebGL 后端的问题。我认为传统的 OpenFL 没有这个问题。在我不知情的情况下,OpenFL 的精灵渲染器正在更改 colorMask(可能还有其他 OpenGL 渲染状态)!出现这个问题是因为我的代码和 OpenFL 的精灵渲染器实际上使用了相同的 OpenGL 上下文。我通过手动禁用 OpenFL 的精灵渲染器解决了这个问题。

于 2014-11-22T09:29:09.557 回答
0

Bitmapdata.perlinNoise 不适用于 html5。您应该自己实现它,或者您可以使用预渲染图像。


    public function perlinNoise (baseX:Float, baseY:Float, numOctaves:UInt, randomSeed:Int, stitch:Bool, fractalNoise:Bool, channelOptions:UInt = 7, grayScale:Bool = false, offsets:Array = null):Void {

        openfl.Lib.notImplemented ("BitmapData.perlinNoise");

    }

https://github.com/openfl/openfl/blob/c072a98a3c6699f4d334dacd783be947db9cf63a/openfl/display/BitmapData.hx

此外,WebGL-Inspector 对于调试 WebGL 应用程序非常有用。你用过吗?

http://benvanik.github.io/WebGL-Inspector/

于 2014-11-22T00:04:04.997 回答