gpt4 book ai didi

c# - 在 Windows 应用商店应用程序中使用 SharpDX 加载纹理

转载 作者:行者123 更新时间:2023-11-30 13:27:41 26 4
gpt4 key购买 nike

我已将我的 C# 游戏从 OpenTK (OpenGL) 转换为 SharpDX (DirectX),并在 Visual Studio 2010 中启动并运行它。我还在 Windows 8 Developer Preview 的 Metro 中从 Visual Studio 11 启动并运行它.然而,Metro 构建仍然缺乏纹理,所以我的多边形现在只是简单地着色。问题是用于加载图像的方法在 Metro DLL 中不存在。 Windows Store App 中的 Texture2D 类(继承自 Resource 类)都缺少这些方法:

SharpDX.Direct3D11.Resource.FromStream
SharpDX.Direct3D11.Resource.FromFile
SharpDX.Direct3D11.Resource.FromMemory

有谁知道这些最终是否会在 Metro 中实现?或者我可以使用其他方法吗?请记住,在此之前我对 DirectX 或 SharpDX 一无所知,所以我对这一切仍然很困惑。

为 SharpDX 找到任何类型的帮助或信息并不容易,这很遗憾,因为它似乎是使用 C# 在 Metro 中实现 3D 的绝佳解决方案。

最佳答案

我不确定我是否清楚地理解了您的问题,但在 SharpDX 样本中我发现类“TextureLoader”有两种方法:“LoadBitmap”和“CreateTexture2DFromBitmap”。 看,您可以使用此函数从 .bmp、.png、.jpg 文件加载 BitmapSource:

    public static BitmapSource LoadBitmap(ImagingFactory2 factory, string filename)
{
var bitmapDecoder = new SharpDX.WIC.BitmapDecoder(
factory,
filename,
SharpDX.WIC.DecodeOptions.CacheOnDemand
);

var result = new SharpDX.WIC.FormatConverter(factory);

result.Initialize(
bitmapDecoder.GetFrame(0),
SharpDX.WIC.PixelFormat.Format32bppPRGBA,
SharpDX.WIC.BitmapDitherType.None,
null,
0.0,
SharpDX.WIC.BitmapPaletteType.Custom);

return result;
}

要从 BitmapSource 获取 Texture2D,您可以使用:

    public static Texture2D CreateTexture2DFromBitmap(Device device, BitmapSource bitmapSource)
{
// Allocate DataStream to receive the WIC image pixels
int stride = bitmapSource.Size.Width * 4;
using (var buffer = new SharpDX.DataStream(bitmapSource.Size.Height * stride, true, true))
{
// Copy the content of the WIC to the buffer
bitmapSource.CopyPixels(stride, buffer);
return new SharpDX.Direct3D11.Texture2D(device, new SharpDX.Direct3D11.Texture2DDescription()
{
Width = bitmapSource.Size.Width,
Height = bitmapSource.Size.Height,
ArraySize = 1,
BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource,
Usage = SharpDX.Direct3D11.ResourceUsage.Immutable,
CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None,
Format = SharpDX.DXGI.Format.R8G8B8A8_UNorm,
MipLevels = 1,
OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None,
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
}, new SharpDX.DataRectangle(buffer.DataPointer, stride));
}
}

为了方便起见,我创建了这个函数:

        public static Texture2D LoadFromFile(Device device, ImagingFactory2 factory, string fileName)
{
var bs = LoadBitmap(factory, fileName);
var texture = CreateTexture2DFromBitmap(device, bs);
return texture;
}

关于c# - 在 Windows 应用商店应用程序中使用 SharpDX 加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9602102/

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