gpt4 book ai didi

javascript - 在unity中加载www图像时的js压缩问题

转载 作者:行者123 更新时间:2023-11-28 06:39:56 26 4
gpt4 key购买 nike

当我尝试从服务器导入图像(统一)时遇到压缩问题。

我在 Unity 的资源文件夹中有一个名为“glass”的 jpg 图像,我希望在运行时将该图像替换为服务器上的图像。我找到了这个脚本 http://docs.unity3d.com/ScriptReference/WWW.LoadImageIntoTexture.html用于导入图像并将其分配给我的“玻璃”图像。

唯一的问题是图像的压缩是 (NPOT) RGBA 压缩 DXT5,而链接中的代码表明 jpg 正在被压缩为 DXT1。

你们谁能告诉我我做错了什么吗?

#pragma strict
// random url link from google
// and DXT compress them at runtime
var url = "https://i.ytimg.com/vi/yaqe1qesQ8c/maxresdefault.jpg";

function Start () {
// Create a texture in DXT1 format
GetComponent.<Renderer>().material.mainTexture = new Texture2D(4, 4, TextureFormat.DXT1, false);
while(true) {
// Start a download of the given URL
var www = new WWW(url);

// wait until the download is done
yield www;

var Texture_1: Texture2D;
Texture_1 = Resources.Load("glass");

// assign the downloaded image to the main texture of the object
www.LoadImageIntoTexture(Texture_1);
}
}

最佳答案

我运行了一些测试,对我来说这看起来像是一个 Unity 错误。

与文档相矛盾的是,LoadImageIntoTexture 之前的纹理格式是什么确实很重要,如果纹理被压缩,它始终是 DXT5。

这是发生的事情:

  • 如果将图像加载到之前未压缩的纹理(例如 RGB24)中,则生成的格式为未压缩的 RGB24 或 ARGB32(取决于图像是否包含 Alpha channel )。
  • 如果将图像加载到先前压缩的纹理中,结果将是使用 DXT5 压缩的纹理。图像是否有 Alpha channel 并不重要。
  • 如果您使用 www.texture 而不是 www.LoadImageIntoTexture,则结果始终是未压缩的纹理(RGB24 或 ARGB32)。
  • 在未压缩的纹理上手动调用Texture.compress()可提供正确的格式(DXT1或DXT5,具体取决于Alpha channel )。

无论如何,这里有一个解决方法:而不是使用

 www.LoadImageIntoTexture(Texture_1);

使用

 // Load uncompressed RGB24 or ARGB32 depending on alpha channel
Texture_1 = www.texture;
// Compress with the correct format
Texture_1.Compress(true);

结果应该是 JPG 为 DXT1 或 PNG 为 DTX5。

附注这并不是 JS 所独有的,C# 中也会发生。

关于javascript - 在unity中加载www图像时的js压缩问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33937249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com