Tag: direct3d

将按钮控件嵌入到现有的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 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 […]

SlimDX:在Visual Studio 2010中看不到Direct3D调试输出

我已经安装了2010年6月的SDK 在DirectX控制面板中启用调试运行时 将调试输出级别设置为最大值(更多) 启用非托管代码调试。 结果:缺少Direct3D的调试输出 但是,如果我从外部启动应用程序并使用dbgview.exe,则会显示输出。 可能是什么原因?

使用SlimDX设置常量缓冲区

我一直在关注Microsoft Direct3D11教程,但使用的是C#和SlimDX。 我正在尝试设置常量缓冲区但不确定如何创建或设置它。 我只是尝试使用常量缓冲区设置三个矩阵(世界,视图和投影),但我在每个阶段都在苦苦挣扎,创建,数据输入并将其传递给着色器。 MSDN上的HLSL(我基本上复制了)是: cbuffer ConstantBuffer : register( b0 ) { matrix World; matrix View; matrix Projection; } MSDN上的C ++代码是: ID3D11Buffer* g_pConstantBuffer = NULL; XMMATRIX g_World; XMMATRIX g_View; XMMATRIX g_Projection; //set up the constant buffer D3D11_BUFFER_DESC bd; ZeroMemory( &bd, sizeof(bd) ); bd.Usage = D3D11_USAGE_DEFAULT; bd.ByteWidth = sizeof(ConstantBuffer); bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bd.CPUAccessFlags = 0; if( […]

C#捕获直接3D屏幕

我一直在搞屏幕捕捉一段时间,我设法捕捉整个屏幕,屏幕上的某些区域等… 但是当我进入游戏并尝试捕捉屏幕时,它完全忽略了游戏,而是捕获桌面(或游戏窗口后面的任何内容)。 另一个有趣的事实是,PrtScn按钮也会发生同样的事情。 关于如何捕捉游戏画面的任何想法?

在C#中使用DirectX11和SlimDX的Nvidia 3Dvideo

美好的一天,我正在尝试使用nvidia 3DVision和两个IP摄像头显示实时立体video。 我对DirectX完全不熟悉,但已尝试在此网站和其他网站上完成一些教程和其他问题。 现在,我正在为左眼和右眼显示两个静态位图。 一旦我的程序部分工作,这些将被我的相机中的位图取代。 这个问题NV_STEREO_IMAGE_SIGNATURE和DirectX 10/11(nVidia 3D Vision)给了我很多帮助,但我仍然在努力让我的程序正常工作。 我发现我的快门眼镜开始正常工作,但只显示右眼图像,而左眼仍为空白(鼠标光标除外)。 这是我生成立体图像的代码: using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Drawing; using System.Drawing.Imaging; using System.IO; using SlimDX; using SlimDX.Direct3D11; using SlimDX.Windows; using SlimDX.DXGI; using Device = SlimDX.Direct3D11.Device; // Make sure we use DX11 using Resource = SlimDX.Direct3D11.Resource; namespace SlimDxTest2 { static class Program { private […]

用c#捕捉游戏画面的最快方法(每秒超过20张图像)

如何快速制作整个游戏画面的大屏幕? 像每秒20-30的东西?(我想将它们转换为video) [[1]]我尝试过WMEncoder。结果是WMEncoder只能使用一组预先配置的编解码器以video格式(wma)捕获屏幕和屏幕区域。 (29 fps最佳编码结果).WMEncoder无法制作截图。 [[2]]我试过DirectX: Surface s = device.CreateOffscreenPlainSurface( Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Format.A8R8G8B8, Pool.SystemMemory); device.GetFrontBufferData(0, s); SurfaceLoader.Save(“c:\\Screenshot”+i.ToString()+”.bmp”, ImageFileFormat.Bmp, s); 这就像gdi ..very slow ….它只适用于DirectX 1.0,因为在DirectX 2.0中不存在SurfaceLoader 我在一些post中读到的另一种方式是使用: s = device.GetBackBuffer(0, 0, Microsoft.DirectX.Direct3D.BackBufferType.Mono); ,但这只是截图到了当前的窗口。 [[3]]我曾尝试使用Taksi(在sourceforge.net上)…但我不知道如何在c#中使用它并让它工作。 请帮帮我…