Tag: directx

C#:创建图形屏幕保护程序

我正在考虑创建一个屏幕保护程序。 我有完整的东西,它的图形和后端类型已经准备好了。 但我不太确定如何在代码中获取图形。 我想要的是带有一点运动的图像的幻灯片放映(有点像媒体中心的幻灯片放映)以及顶部的一些浮动文本和形状。 形状有些半透明。 我目前在WinForms中制作了一个非常简单的静态幻灯片。 只是一个简单的应用程序,全屏显示一些图像,并假装以一种hackish方式淡入淡出。 但它制作得不是很好,性能也不是很好。 例如,为了防止延迟,我在图像顶部淡入黑色方块,而不是在实际图像中淡入淡出。 也许愚蠢,但它有点工作:p 无论如何,我想做得更好。 但不知道从哪里开始。 WPF是一个很好的解决方案吗? 或者我应该研究DirectX或OpenGL? 这是可以用XNA很好地处理的东西,还是那个游戏太棒了?

在C#/ XNA中录制实时video流

我有一个项目,将网络摄像头流渲染到纹理上。 我想知道是否有办法,无论是通过DirectX的音频/videofunction还是直接通过XNA我可以将流录制成avi文件格式? 在此先感谢您的帮助。

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潜在误解有关吗?

双线性插值 – DirectX与GDI +

我有一个C#应用程序,我已经编写了GDI +代码,它使用Bitmap / TextureBrush渲染来呈现2D图像,这些图像可以应用各种图像处理function。 此代码是模拟现有DX9代码的应用程序中的新路径,它们共享一个公共库以执行所有向量和矩阵(例如ViewToWorld / WorldToView)操作。 我的测试床由DX9输出图像组成,我将其与新GDI +代码的输出进行比较。 渲染到与Bitmap尺寸匹配的视口(即没有缩放或平移)的简单测试用例确实匹配像素完美(没有二进制差异) – 但是一旦图像被放大(放大),我就会得到非常小的差异在5-10%的像素中。 差异的大小是1(偶尔2)/ 256。 我怀疑这是由于插值差异造成的。 问题 :对于DX9正射投影(和身份世界空间),相机垂直并以纹理四边形为中心,期望DirectX.Direct3D.TextureFilter.Linear生成相同的输出到GDI + TextureBrush填充的矩形/多边形是合理的使用System.Drawing.Drawing2D.InterpolationMode.Bilinear设置? 对于这个(放大)情况,DX9代码正在使用它(MinFilter,MipFilter设置类似): Device.SetSamplerState(0, SamplerStageStates.MagFilter, (int)TextureFilter.Linear); 并且GDI +路径正在使用: g.InterpolationMode = InterpolationMode.Bilinear; 我认为“双线性插值”是一个相当具体的滤波器定义,但后来我注意到GDI +中还有另一种选择“HighQualityBilinear”(我尝试过,没有区别 – 考虑到“添加预滤波”的描述,这是有道理的缩小“) 后续问题:期望DirectX和GDI +之间的像素完美输出匹配是否合理(假设传入的所有外部坐标相等)? 如果没有,为什么不呢? 澄清:我正在使用的图像是使用Format32bppPArgb的不透明灰度(R = G = B,A = 1)。 最后,我可以使用许多其他API(Direct2D,WPF,GDI等) – 这个问题通常适用于比较“等效”双线性插值输出图像的输出。 谢谢!

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)) […]

获得点和原点之间的角度

这可能以前已经回答过,如果有的话,对不起。 我基本上需要从原点到点获得角度。 那么让我们说Origin是(0,0)而我的目标点是(3,0) 。 3点= 90度 6点钟= 180度 9点钟= 270度 12点钟= 0度 不知何故,我必须做一些数学魔术,并发现角度是90度(顶部是0)。 原点可能会有所不同,所以我需要一个带有两个参数的方法,Origin和TargetPoint,它们以度为单位返回双倍角度。 是的,我意识到这看起来简短而且没有建设性,但我让这个问题尽可能简单易懂。 所有其他问题都被关闭了 – .- 谢谢

C#和箭头键

我是C#的新手,我正在现有的应用程序中做一些工作。 我有一个DirectX视口,其中包含我希望能够使用箭头键定位的组件。 目前我正在重写ProcessCmdKey并捕获箭头输入并发送OnKeyPress事件。 这有效,但我希望能够使用修饰符( ALT + CTRL + SHIFT )。 一旦我拿着修改器并按箭头,就不会触发我正在听的事件。 有没有人对我应该去哪里有任何想法或建议?

DirectX或OpenGL

如果您在C#中编写下一个3D图形密集型应用程序(如3D建模和动画软件),哪一个会更好? 如果我们认为C#与平台无关,那么OpenGL看起来很诱人,但性能等等呢? 由于使用的语言是C#,因此性能非常重要。 编辑:你也可以考虑SlimDX和TAO,OpenTK,csGL等。

如何在Visual Studio 2010中添加DirectX引用

如何在Visual Studio 2010中向我的C#项目添加DirectX引用? 谢谢。

捕获DirectX应用程序的可视输出 – 即使在后台?

我需要捕获DirectX窗口的视觉输出(如屏幕截图)。 目前,我使用这种方法 。 但是,当窗口在后台时,它会捕获前面的任何内容。 我看到即使在最小化或背景中也可以渲染DirectX窗口,因此这应该是可能的。 但是,怎么样? (它也需要很快,它也需要在Windows XP上运行,不幸的是……) 编辑 :这些天我很忙……别担心,如果它过期,我会把赏金放回去。