标签: direct3d

WPF在现实生活中与XNA的融合程度如何?

我知道有几种方法可以在同一个应用程序中混合使用XNA和WPF.我发现在我的XNA游戏中将WPF用于所有GUI和HUD的东西很诱人.有没有人对这种方法在现实生活中如何使用.NET 3.5 SP1有任何实际经验?任何陷阱(例如"空域问题")?什么样的appoach最好的暗示?

wpf xna interop direct3d

15
推荐指数
2
解决办法
1万
查看次数

我应该使用DirectInput还是Windows消息循环?

我正在研究C++ DirectX 2D游戏,我需要键盘和鼠标输入.
维基百科说:

Microsoft建议新应用程序使用Windows消息循环进行键盘和鼠标输入,而不是DirectInput

那我该怎么用呢?
我有一个GameScreen类,它负责绘图和更新(游戏逻辑),我在Windows消息循环中调用Draw和Update方法.

谢谢

c++ directx direct3d directinput

14
推荐指数
2
解决办法
2万
查看次数

Direct3D线条粗细

使用Direct3D绘制线列表时如何更改线条的粗细?

这篇文章说不支持线宽,并继续提供解决方法.其他选择?

虽然我们讨论这个主题,但着色器是否允许人们使用短划线图案绘制线条?

directx graphics shader direct3d

14
推荐指数
2
解决办法
2万
查看次数

显示模式更改期间会发生什么?

在普通计算机上显示模式更改(分辨率,深度)期间会发生什么?(古典文具和笔记本电脑)

它可能不是那么微不足道,因为视频卡是如此不同,但有一件事是共同的:

  • 屏幕变黑(因为信号关闭可以理解)
  • 使用新模式返回信号需要几秒钟

如果它在D3D或GL下:

  • 图形设备丢失,必须重新加载所有VRAM对象,使模式更改需要更长时间

有人可以解释这个的潜在本质,特别是为什么显示模式的改变不是后备缓冲区的一个简单的重新分配,并且需要这么长的时间?

windows opengl graphics direct3d

14
推荐指数
1
解决办法
434
查看次数

3个索引缓冲区

因此,在D3D和OpenGL中都可以从索引缓冲区中进行绘制.

然而,OBJ文件格式做了一些奇怪的事情.它指定了一堆顶点,如:

v -21.499660 6.424470 4.069845
v -25.117170 6.418100 4.068025
v -21.663851 8.282170 4.069585
v -21.651890 6.420180 4.068675
v -25.128481 8.281520 4.069585

然后它指定了一堆普通的像..

vn 0.196004 0.558984 0.805680
vn -0.009523 0.210194 -0.977613
vn -0.147787 0.380832 -0.912757
vn 0.822108 0.567581 0.044617
vn 0.597037 0.057507 -0.800150
vn 0.809312 -0.045432 0.585619

然后它指定了一堆像这样的tex coords

vt 0.1225 0.5636
vt 0.6221 0.1111
vt 0.4865 0.8888
vt 0.2862 0.2586
vt 0.5865 0.2568
vt 0.1862 0.2166

然后它在模型上指定"面孔",如:

f 1/2/5 2/3/7 8/2/6
f 5/9/7 6/3/8 5/2/1

在我们v/t/n的情况下,第一个数字是顶点数组的索引,第二个是tex coord数组的索引,第三个是normals数组. …

opengl 3d direct3d

13
推荐指数
1
解决办法
5508
查看次数

在C#中使用DirectX11和SlimDX的Nvidia 3D视频

美好的一天,我正在尝试使用nvidia 3DVision和两个IP摄像头显示实时立体视频.我对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 static Device device;               // DirectX11 Device
    private static int Count;                   // Just to make sure things are being updated

    // The NVSTEREO header. 
    static byte[] stereo_data = new …
Run Code Online (Sandbox Code Playgroud)

c# direct3d nvidia directx-11 slimdx

13
推荐指数
1
解决办法
3884
查看次数

如何获得DXGI中监视器/输出的当前显示模式(分辨率,刷新率)?

我正在创建一个多显示器全屏DXGI/D3D应用程序.我正在通过可用的输出和适配器进行枚举,以准备创建它们的交换链.

使用DXGI的IDXGIFactory :: CreateSwapChain方法创建交换链时,我需要提供一个交换链描述,其中包含DXGI_MODE_DESC类型的缓冲区描述,详细说明宽度,高度,刷新率等.如何找出输出是什么当前设置为(或者如何找出当前输出的显示模式)?当我使用此交换链进入全屏时,我不想更改用户的分辨率或刷新率.

windows direct3d fullscreen dxgi

12
推荐指数
1
解决办法
5762
查看次数

将 32 位 directx9 应用程序转换为大地址感知

当内存接近 2GB 时,我们遇到了旧的闭源游戏引擎无法编译着色器的问题。

问题通常与D3DXCreateEffect. 通常它会返回 HResult“内存不足”,有时会d3dx9_25.dll在弹出窗口中打印随机错误,或者它只是完全的段错误。

我相信问题在于缺乏大地址意识:我注意到其中一个d3dx9_25.dll崩溃做了一些暗示这样的事情。它需要一个看起来像 的有效指针0x8xxxxxx3,检查位0x80000003是否点亮,如果是,则位反转指针并取消引用它。结果指针指向未分配的内存。在编译前强制引擎 malloc 2GB 会使着色器每次都无法编译。

不幸的是,我们对 DX9 的了解非常有限,我已经看到 DX9 有一个标志,D3DXCONSTTABLE_LARGEADDRESSAWARE但我不确定它到底应该去哪里。我能找到的游戏使用的唯一 API 调用依赖于它D3DXGetShaderConstantTable,但问题发生在它被调用之前。注射标志(1 << 17) = 0x20000,以D3DXCreateEffect使着色器以另一种方式失败编译。

  1. D3DXCreateEffect应该接受较大的地址标志?我发现了一个使用它的wine 测试,但深入研究 DX9 程序集,它抛出的错误是由内部函数FFFFF800在设置了in 标志中的任何位时返回 HResult Invalid Call 引起的,这让我相信CreateEffect不应该接受这个标志.

  2. 在此之前还有其他地方我应该注入大地址感知标志吗?我知道D3DXGetShaderConstantTable需要修复对使用的调用D3DXGetShaderConstantTableEx,但它甚至还没有达到。

c++ x86 32-bit direct3d directx-9

12
推荐指数
1
解决办法
264
查看次数

如何在每个垂直同步中完成一个渲染(不重复,不跳过)?

我正在尝试进行垂直同步渲染,以便每个垂直同步完成一次渲染,而不跳过或重复任何帧.我需要这个在Windows 7和(将来)Windows 8下工作.

它基本上包括绘制QUADS适合屏幕的序列,以便原始图像中的像素与屏幕上的1:1像素匹配.使用OpenGL或DirectX,渲染部分不是问题.问题是正确的同步.

我以前尝试使用OpenGL,WGL_EXT_swap_control扩展,绘图然后调用

SwapBuffers(g_hDC);
glFinish();
Run Code Online (Sandbox Code Playgroud)

我尝试了这两个指令的所有组合和置换以及glFlush(),并且它不可靠.

然后我尝试使用Direct3D 10,通过绘图然后调用

g_pSwapChain->Present(1, 0);
pOutput->WaitForVBlank();
Run Code Online (Sandbox Code Playgroud)

其中g_pSwapChainIDXGISwapChain*pOutputIDXGIOutput*关联到该SwapChain.

两个版本,OpenGL和Direct3D,都是相同的:第一个序列,比方说,60帧,并没有达到应有的水平(而不是大约1000毫秒,60hz,持续时间等于1030或1050ms),以下似乎工作正常(约1000.40ms),但不时似乎跳过一帧.我做测量QueryPerformanceCounter.

在Direct3D上,尝试仅使用WaitForVBlank的循环,1000次迭代的持续时间始终为1000.40,几乎没有变化.

因此,这里的问题不是确切地知道每个被调用的函数何时返回,以及交换是否在垂直同步期间完成(不是更早,以避免撕裂).

理想情况下(如果我没有记错),要实现我想要的,它将执行一次渲染,等待同步开始,在同步期间交换,然后等待直到同步完成.如何使用OpenGL或DirectX做到这一点?

编辑:WaitForVSync60x的测试循环始终从1000.30ms到1000.50ms.与Present(1,0)之前相同的循环WaitForVSync,没有别的,没有渲染,需要相同的时间,但有时它会失败并需要1017毫秒,就像重复一帧一样.没有渲染,所以这里有问题.

opengl directx direct3d vsync direct2d

11
推荐指数
1
解决办法
4195
查看次数

2013年学习DirectX

我知道有关于这个问题的几个主题,但我想说明我在寻找什么.

所以我学习了OpenGL并获得了着色器(可编程管道),顶点缓冲区,索引缓冲区的基础知识,所有这些都被称为"现代OpenGL".

如果DirectX存在这样的术语,我感兴趣.

关于哪个DirectX版本可供选择,有几种意见.9几乎可以在所有Windows PC上运行,而11仅限于较新的GPU和Windows Vista +.

我的GPU支持9,而我的操作系统支持11.我应该选择软件加速11还是硬件加速9?

DirectX9是不是被弃用的OpenGL?因此,如果我学习DirectX9而不是11,那是浪费时间还是可用?换一种说法.DirectX9是否提供现代OpenGL提供的功能?

如果是这样,我应该使用哪些来源(教程/书籍/视频)来获得在DirectX中使用着色器,缓冲区等的基本技能?例如,在一个教程中我找到了这一行:d3dDevice-> BeginScene(); 它让我想起了弃用的OpenGL.我不想学习尖端的DirectX,但我想在兼容性和现代概念之间做一个很好的交易.

在另一个帖子中,我发现了这本书:http: //www.amazon.com/dp/1598220160/?tag = stackoverfl08-20

但是,如果我把时间浪费在被弃用的旧东西上,我有点害怕.

总而言之,我需要一些帮助,我真的无法想象一下走哪条路.

我希望你能得到我的观点.

c++ windows direct3d directx-11 directx-9

11
推荐指数
1
解决办法
5445
查看次数