Tag: sharpdx

将按钮控件嵌入到现有的Direct3D应用程序中

我想在Direct3D v9游戏(由第三方制作)上面叠加自己的内容。 叠加交互式按钮 具体来说,我想覆盖一个可点击的按钮控件,比如Steam,例如,虽然我正在尝试一个更简单的界面。 理想情况下,我可以覆盖WPF按钮或Windows窗体按钮或整个UserControl,但如果不可能,那么从基元创建一个function按钮就足够了。 文本叠加使用SharpDX 我有一个基于Justin Stenning工作重叠文本的工作样本 即在SharpDX.Direct3D9.Font DrawText方法的帮助下 如何使用SharpDX覆盖Button或UserControl 我查看了https://github.com/sharpdx/SharpDX-Samples中的相关示例,但无法找到使用SharpDX包含或绘制本机控件的方法 可能吗? 如果没有,是否有从头开始绘制可点击按钮的样本? 请记住我是DirectX世界的新手:)

使用HLSL进行YUV到RGB转换的奇怪模糊边缘图案

我正在尝试在HLSL中将YUV写入RGB着色器。 具体来说,它转换Yuv420p格式,该格式由Y值的N M平面组成,接着是U值的(N / 2) (M / 2)平面,然后是(N / 2)*(M / 2)平面V值。 例如这张1280×720图片: 在YUV格式中看起来像这样解释为8位,1280×1080纹理: 在Direct3D11中,我将其作为Texture2D加载,格式为R8_UNorm,尺寸为1280×1080。 棘手的部分是重建U和V平面,因为正如你所看到的,一半的线位于纹理的左侧,另一半位于右侧。 在着色器中,我这样做: struct PS_IN { float4 pos : SV_POSITION; float2 tex : TEXCOORD; }; Texture2D picture; SamplerState pictureSampler; float4 PS(PS_IN input) : SV_Target { int pixelCoord = input.tex.y * 720; bool evenRow = (pixelCoord / 2) % 2 == 0; […]

使用SharpDX的HUD基础知识:如何绘制屏幕表面?

脚本 我打算学习如何为第三方PC游戏(免费,合法)开发自定义HUD的基础知识,我的目的是开发一个应用程序,在屏幕上绘制/显示其他信息(通过读取mem地址)。 所以我研究了专业项目,我发现使用SharpDX库的TurboHUD使用基于DirectX的库在屏幕上绘制对象/覆盖/文本,结果非常好(在绘图的任何时候都不会失去性能)屏幕上的多个对象),但是,由于该项目的作者没有提供理解他们如何做到这一点的来源,所以我试图自己学习使用相同的专业技术。 题 如果我走错路或者我错过了一些比SharpDX更好的替代方案来开发它,请告诉我。 我的主要问题是: 在C#或最好是VB.Net中,我如何使用SharpDX在屏幕上有效地绘制自定义字符串? 请注意,我可以将Form的难度设置为0,但我认为它应该存在正确的方式,并且我要求知道在“桌面”屏幕上直接绘制的正确方法。 我期望推出PC游戏,然后启动我的自定义HUD,它将在“桌面”屏幕上绘制以添加游戏的其他信息,我希望你理解我。 研究 我应该澄清一下,我对这种DirectX库完全缺乏经验,我正在使用SharpDX示例包来尝试学习它的用法。 由于所有样本都在C#中,因此在VB.Net下学习它的用法更加困难。 在SharpDX示例包中有一个’ AdvancedTextRenderingApp’C #项目,但正如它的名字所说它是一个高级示例,它也是一个自定义表单( SharpDX.Windows.RenderForm )来绘制该表单。 这是我提到的C#项目的VB.Net代码翻译: http://pastebin.com/KG2c3v09 更新: 只是打算对我所做的研究发表评论: 我最近发现了这个有用的GitHub存储库 ,然而,它无法在Visual Studio 2015中编译(因为缺少命名空间使用,添加它们会产生更多编译器错误),它也面向高级SharpDX用户,并在分析完整样本后仍然不知道如何在第三部分流程窗口的表面上编写/绘制…而且C#语法让我对SharpDX的使用有了全面的了解,因为作者也做了大量的SharpDX定制实现成员,然后……我不仅仅是失去了所有这些例子。 SharpDX官方样本是另一个看似非常有用的东西……可能适用于高级用户。 一些示例似乎演示了如何渲染自定义窗口/表面(使用500个繁琐且难以理解的代码行来完成它。而且他们的“ Hello world ”示例对我来说是一场噩梦。)但是,我想要做的就是我在我的问题中解释的是在另一个进程的现有窗口的表面上绘制,并且我知道可能的是,我需要使用SharpDX从头开始渲染“表面”,然后将其定位在目标窗口中,然后使表面看不见,然后画上它,但我不知道该怎么做。

如何使用SharpDX Toolkit绘制透明3D对象?

我正在开发一个使用SharpDX和SharpDX Toolkit绘制简单3D形状的应用程序,Geometrics.Desktop样本对入门非常有帮助。 现在我正在努力使一些形状变得透明,并且为了简单起见,我只是试图让那个样本中的茶壶模型显得透明(也许半透明会更精确)。 对于那些不熟悉Geometrics.Desktop示例的人来说,它会在3D中绘制一些简单的原始几何形状。 作为一个示例应用程序,它非常简单,因此它是一个非常好的暂存器,用于试验SharpDX“Toolkit”库的3Dfunction。 我已将此添加到LoadContent方法(在启动时运行一次),以便准备Direct3D进行混合: var blendStateDescription = new BlendStateDescription(); blendStateDescription.AlphaToCoverageEnable = false; blendStateDescription.RenderTarget[0].IsBlendEnabled = true; blendStateDescription.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha; blendStateDescription.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha; blendStateDescription.RenderTarget[0].BlendOperation = BlendOperation.Add; blendStateDescription.RenderTarget[0].SourceAlphaBlend = BlendOption.Zero; blendStateDescription.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero; blendStateDescription.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add; blendStateDescription.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All; var blendState = SharpDX.Toolkit.Graphics.BlendState.New(this.GraphicsDevice, blendStateDescription); this.GraphicsDevice.SetBlendState(blendState); 我已经设置了深度模板如下: var depthDisabledStencilDesc = new DepthStencilStateDescription() { IsDepthEnabled = false, DepthWriteMask […]

如何使用SharpDX中的文件字体?

我想为windows 8 app生成图像,我将使用SharpDX API 这是我感谢应对和粘贴的代码示例 private MemoryStream RenderStaticTextToBitmap() { var width = 400; var height = 100; var pixelFormat = WicPixelFormat.Format32bppBGR; var wicFactory = new ImagingFactory(); var dddFactory = new SharpDX.Direct2D1.Factory(); var dwFactory = new SharpDX.DirectWrite.Factory(); var wicBitmap = new Bitmap( wicFactory, width, height, pixelFormat, BitmapCreateCacheOption.CacheOnLoad); var renderTargetProperties = new RenderTargetProperties( RenderTargetType.Default, new D2DPixelFormat(Format.Unknown, AlphaMode.Unknown), […]

SharpDX,DirectWrite和Windows Forms

可以使用DirectWrite将文本渲染到WinForm应用程序中的PictureBox吗? 我正在使用SharpDX,并且已经通过DirectWrite示例试图构建我能做到的最简单的工作案例。 我创建了一个Form并且只添加了一个pictureBox。 然后是以下代码。 表单显示,但PictureBox没有任何可见。 任何指导将不胜感激。 谢谢! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; //using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using SharpDX.Direct2D1; using SharpDX.DXGI; using SharpDX; using SharpDX.DirectWrite; using AlphaMode = SharpDX.Direct2D1.AlphaMode; using Factory = SharpDX.Direct2D1.Factory; namespace d2dwTextEdit { public partial class Form1 : Form { public Factory Factory2D { get; private […]

从.net发送反馈/效果到操纵杆

感谢这个答案https://stackoverflow.com/a/13734766/637142我能够知道按下按钮的时间或旋转方向盘的时间。 现在我的问题是如何将效果发送到设备? 例如,当我正在玩游戏时,如果我发生碰撞,车轮会振动。 我怎么能让方向盘振动? 我相信我需要做的是Start()一个效果( http://sharpdx.org/documentation/api/t-sharpdx-directinput-effect )。 SharpDX.DirectInput.Joystick类似乎没有一个方法可以返回所有效果。 有一个名为GetEffects的方法,但该方法返回一组EffectInfo对象。 游戏如何向操纵杆发送命令?

DirectX:查看矩阵的世界 – 我的误解在哪里?

我开始使用DirectX(和SharpDX,因此仅在C#/ hlsl中编程)并且我正在尝试构建自己的相机类。 它应该是可旋转的,允许向前和向后移动以及“侧向”运动(经典的第一人称运动通常映射到A和D,在我的情况下加上和向下)。 为了更容易修复错误,模型和世界空间在我的情况下是相同的,透视投影尚未实现,旋转相机,我的相机应该在正Z轴(进入屏幕)。 我的错误修正模型是一个简单的四边形,宽度和高度为1.f,z = 0并且在屏幕上居中。 为了便于使用,我找到了DirectX的Matrix.LookAtLH()并使用它来构建我的矩阵,用于从世界到视图坐标的平移,基于我的相机在世界坐标中的位置,向上矢量(现在 – 没有旋转 – 总是正Y轴)和世界坐标中的目标点。 我的(顶点)着色器使用此矩阵的简单乘法: output.position = mul(position, worldToView); LookAt-Matrix计算如下: Matrix.LookAtLH(vec3(0, 0, -1), vec3(0, 0, 0.5f), vec3(0, 1, 0)) 得到这张图片: 现在我想将相机移到右边,在这种情况下,将1.f添加到它的X坐标。 我的预期结果与之前的四元组相同,向左移动了一点。 我构建了一个新的LootAt矩阵,通过相同的向量移动眼睛坐标和目标坐标: Matrix.LookAtLH(vec3(1, 0, -1), vec3(1, 0, 0.5f), vec3(0, 1, 0)) 结果如下: 我移动相机越多越好,但屏幕中心仍保持四边形的中心。 这与我对Matrix.LookAtLH潜在误解有关吗?

SharpDX vs SlimDX用于游戏开发?

其中哪一个提供了最佳的游戏开发API? 哪个库更易于使用,速度更快,文档更多?

MF SinkWriter写入示例失败

我正在尝试使用MediaFoundation将ID3D11Texture2D编码为mp4。 以下是我目前的代码。 初始化Sink Writer private int InitializeSinkWriter(String outputFile, int videoWidth, int videoHeight) { IMFMediaType mediaTypeIn = null; IMFMediaType mediaTypeOut = null; IMFAttributes attributes = null; int hr = 0; if (Succeeded(hr)) hr = (int)MFExtern.MFCreateAttributes(out attributes, 1); if (Succeeded(hr)) hr = (int)attributes.SetUINT32(MFAttributesClsid.MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, 1); if (Succeeded(hr)) hr = (int)attributes.SetUINT32(MFAttributesClsid.MF_LOW_LATENCY, 1); // Create the sink writer if (Succeeded(hr)) […]