问题标签 [dds-format]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3102 浏览

java - 用于读取和写入 DDS 纹理的 Java 库

我正在寻找一个用于以 DDS 格式读取和写入图像的 Java 库。最好是所有子格式(DXT1c,DXT1a,DXT3,DXT5,...)

谷歌搜索还没有为我带来任何结果,所以我在这里问。

0 投票
3 回答
2034 浏览

c++ - 无法在 Linux 上读取 DDS 图像标头

我使用Nvidia nv_dds实用程序加载 DDS 图像文件以在 OpenGL 程序中使用。它适用于 Windows,但在 Linux(Ubuntu 12.10)上失败。最初我认为 nv_dds 有问题,但后来发现 fread() 在 Linux(GCC 4.7)上读取的头字节偏移量错误

这是读取 DDS 文件标记和 DDS 标头的块:

当我查看 DDS_HEADER 实例的内容时,我可以看到分配给错误属性的几个实际值,其余的都是垃圾。

然后,如果我注释掉“DDS”标记检查 fread() :

然后我将图像宽度值放入 DDS_HEADER 的 imageHeight 属性中。其余属性仍然是垃圾。

当我在 Windows 机器上测试它时,这一切都不会发生。fread() 在 Linux GCC 上的工作方式是否可能与在 Windows 上使用 MSVC 编译器不同?

0 投票
1 回答
908 浏览

android - Android 设备上的 DXT5 纹理中缺少 Alpha 通道

我正在将手机游戏移植到 Android 并希望在 OpenGL 中使用压缩纹理,就像在 iOS 上使用 PVR 纹理一样。

我设法将我的纹理从 PNG 转换为 DXT,并在配备 Nvidia Tegra 2 芯片组的 Galaxy Tab 10.1 上运行游戏。然而,在我的 DXT5 格式纹理中没有平滑的 alpha。它们看起来像具有 1 位 alpha 的 DXT1 纹理。

我已经阅读并运行了这里的示例:http: //software.intel.com/en-us/articles/android-texture-compression

我试过这个非常好的库: https ://libregamewiki.org/Simple_OpenGL_Image_Library

但得到了相同的结果。没有阿尔法通道。请帮我解决这个问题。我真的被困住了。

谢谢。

细节:

  1. 我使用了带有标志“-nomips -bc3 -alpha”的 nvcompress 工具版本 2.1.0(并且导致了很多变化但没有成功)。
  2. 我正在使用 OpenGL ES1 库。
  3. 我的openGL代码:

    /li>
0 投票
2 回答
1498 浏览

windows-phone-8 - SharpDX 在 Windows Phone 8 中加载纹理

我正在创建一个 Windows Phone 8 应用程序,并且正在使用 SharpDX 加载纹理。

我尝试使用加载 PNG,Content.Load<Texture2D>("filename.png")但出现错误,我意识到 Windows Phone 8 中的 SharpDX 只接受 DDS 纹理,不接受 PNG/JPEG/BMP 等。我已经将我的 PNG 转换为 DDS 使用texconv filename.png并将文件添加到我的解决方案中,就像我在项目中使用的其他文件一样(我可以正确加载)。当我运行我的应用程序时,我遇到了一个异常:

{SharpDX.Serialization.InvalidChunkException: Unexpected chunk [DDS /0x20534444] instead of [TKFX/0x58464B54] at SharpDX.Serialization.BinarySerializer.BeginChunk(FourCC chunkId)}

好吧,我已经使用该texconv工具将我的有效 PNG 转换为 DDS。我看是文件格式错误,fourCC码对应的是DDS,应该是这样的。但是 SharpDX 期望 TKFX 格式(工具包效果?)而不是 DDS。为什么?我正在尝试使用Content.Load<Texture2D>not加载纹理Content.Load<Effect>(我也有它来加载着色器并且它工作得很好)。

如果有人知道如何加载 PNG 而不是 DDS,那就更好了!

0 投票
1 回答
1035 浏览

json - 三.js DDS Json UV Mapping问题

我已经搜索了互联网,但我没有找到这个问题的正确答案。我注意到很多人都在问同样的想法。

我有一个从 3D max 导出的 JSON 文件,其中包含 UV 信息。我正在尝试加载带有应用于 Three.js 的 DDS 图像的 JSON 文件。(使用 THREE.ImageUtils.loadCompressedTexture) DDS 图像是从 Photoshop 导出的。

图像被加载到对象上,但被拉伸(我认为这是由于 DDS 文件不再是矩形,因为它包含多个 mipmap)。

如何告诉 three.js 使用的图像是 DDS 文件?

先感谢您。

我整理了一个现场演示。链接如下:http ://aeche.eu/DDS/DDS.html 左边是正确使用的JPG文件,右边是DDS文件。

这是原始 JPG 图片:http ://aeche.eu/DDS/art/cubeJPG.jpg

这是使用 DDS 文件的多维数据集的代码:

0 投票
1 回答
4103 浏览

opengl - OpenGL 中的 KTX 与 DDS 图像

到目前为止,我一直使用 DDS (DXT5) 来快速加载纹理数据。现在,我读到自 OpenGL 4.3(和 ES2)以来,压缩标准是 KTX(ETC1/ETC2)。我集成了 Khronos libktx SDK 并进行了基准测试。使用glCompressedTexSubImage2D更新纹理 3000 次,结果为:

DDS:1450 - 毫秒

KTX - 永远....

实际上,只运行了300次更新KTX的循环,总时间已经达到了24秒!

现在我有两个问题:

  1. 这是KTX的预期速度吗?

  2. 如果第一个问题的答案是“是”,那么除了文件大小比 DDS 小之外,ETC 的优势是什么?

我使用带有 Quadro4000 GPU 的 OpenGL 4.3。

0 投票
1 回答
1392 浏览

opengl - 当宽度和高度不同时,OpenGL DXT 压缩纹理变黑

我按照本教程在 OpenGL 中实现了 DXT 压缩纹理的加载:

OpenGL DXT 教程

问题是,当宽度和高度相同时(始终是 2 的幂),它可以正常工作,但是当它们不同时,它只会显示为黑色(1024 * 512、256 * 512 等不起作用......)。可能是什么问题呢?

我使用的是 OpenGL 3.3,我的显卡是 AMD Radeon HD 7610M(笔记本,但还不错)。此外, glGetError() 没有显示错误(三重检查)。

我发布我的代码版本只是为了确定(不同之处在于我从打包文件格式中读取纹理,这不是问题,因为我从这些文件中加载了所有模型并且一切都很好):

0 投票
0 回答
1416 浏览

visual-c++ - c++ 如何将 DDS 转换为 png/jpg

我需要一个 dds 到 c++ 中的 png 或 jpg 转换器,有没有人完成了这个任务或者遇到了一个简单的 c++/c 库来做这个。

我宁愿不使用 Imagemagick-Magick++,因为它对于我需要的东西来说太过分了。有其他选择吗?

dds 格式是 DXGI_FORMAT_B8G8R8A8_UNORM 我认为,如果这有帮助的话。

0 投票
1 回答
1375 浏览

c++ - 从 DDS dxt5 压缩创建 texture2d 时的 E_INVALIDARG

完成本文中有关处理的所有工作。

检测标题,从这个公式中得到音调:

然后试图CreateTexture2D( &texDesc, resData, &texture );

我填写了标题中的所有字段。但总是得到E_INVALIDARG。找不到我的问题。

0 投票
0 回答
1064 浏览

c++ - 在 OpenGL 中更新纹理

我正在为 Unity 开发一个外部插件,它通过读取 DDS 文件来更新游戏中的纹理。到目前为止,我能够在 DX11 和 DX9 中加载 DDS 文件,但我似乎无法让 OpenGL 工作。

我正在使用用于 opengl 的 nvidia graphics sdk 10 来读取 DDS 文件和 GLUT/GLEW 来更新纹理,但纹理不会在游戏中更新。我正在尝试使用 12 个 mipmap 读取 2048x2048 DXT1 纹理。

这是我的代码:

我对opengl不是很有经验,所以也许我错过了一些东西。如果您需要更多信息,请告诉我。