Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用DirectX 11读取tga_C++_Directx_Tga - Fatal编程技术网

C++ 使用DirectX 11读取tga

C++ 使用DirectX 11读取tga,c++,directx,tga,C++,Directx,Tga,因为几天来我一直在使用一个工具,我需要用directX 11在几种文件格式上绘制纹理。在谷歌搜索了很多之后,我不知道该怎么做 我正在使用D3DX11CreateShaderResourceViewFromFile加载.dds和.png文件,但我在其他地方看到.tga不再受支持。我读了一些关于D3DLOCKED_RECT的内容,设置了纹理的每个像素,并阅读了.tga文件以了解这些像素,但这是针对directX 9的 有什么帮助或提示吗?提前感谢。//注意:我不使用D3D11 表示有一个库,应该能够

因为几天来我一直在使用一个工具,我需要用directX 11在几种文件格式上绘制纹理。在谷歌搜索了很多之后,我不知道该怎么做

我正在使用D3DX11CreateShaderResourceViewFromFile加载.dds和.png文件,但我在其他地方看到.tga不再受支持。我读了一些关于D3DLOCKED_RECT的内容,设置了纹理的每个像素,并阅读了.tga文件以了解这些像素,但这是针对directX 9的


有什么帮助或提示吗?提前感谢。

//注意:我不使用D3D11

表示有一个库,应该能够使用例程加载*.tga文件。你应该试一试。如果它不适合你,你必须编写自己的纹理加载器。(因为可以在D3D9中为纹理制作加载程序,所以应该可以在D3D11中执行相同的操作)。*。tga格式是一种新的格式,许多初学者教程专门讨论在没有第三方库的情况下加载这种特殊格式

两个建议:

  • 下次有疑问时,请阅读文档
  • 不要看*.png格式。这种格式加载速度非常慢(jpeg更快,未压缩bmp更快,dds更快),并且很可能不适合需要经常加载许多图像的游戏(可以将其用于开始菜单、结束屏幕等)。使用未压缩格式(如*.tga)或(因为您使用的是directx)使用*.dds格式。您的映像很可能会占用额外的磁盘空间,但加载速度会更快

  • 与巴布亚新几内亚相比,TGA几乎在各个方面都不如巴布亚新几内亚。你能简单地转换你的文件吗?不,不幸的是我必须保留这些不同的文件格式。因为我的工具创建了一个.txt文件,该文件将用于另一个程序,所以用户必须再次转换,这并不实际。@BartekBanachewicz:Nope。解压PNG需要更长的时间。我更感兴趣的是逐像素设置纹理并阅读文件格式以了解这些像素,而不是使用另一个库,我发现了如何做。顺便说一句,谢谢你的帮助。如果有人对此感兴趣,请点击以下链接@Aulaulz:你永远不会逐像素设置纹理。锁定它,然后立即将整个像素阵列转储到内存中,然后解锁它。在DX9中,为纹理生成mipmap也是您的责任。如果我必须使用D3D9,我将不得不这样做,但我使用D3D11,并且没有锁定和解锁功能。无论如何,我解决问题的方法是使用函数ID3D11Device::Create2DTexture中的D3D11_SUBRESOURCE_数据参数在纹理创建时设置像素。