Directx 多个渲染目标不保存数据

我正在使用SlimDX,目标是具有着色器模型4的DirectX 11。我有一个像素着色器“preProc”,它处理我的顶点并保存三个纹理数据。一个用于每像素法线,一个用于每像素位置数据,一个用于颜色和深度(颜色占用rgb,深度占用alpha通道) 随后,我在后处理着色器中使用这些纹理以实现屏幕空间环境光遮挡,但似乎没有任何数据保存在第一个着色器中 这是我的像素着色器: PS_OUT PS( PS_IN input ) { PS_OUT output; output.col = f

Directx 使用计算着色器延迟着色,多个交换链?

又来了。我准备在dx11引擎中添加延迟着色,但我有一个架构问题。我想首先使用MRT渲染gbuffer,将其传递给计算着色器,分派,然后输出结果。我的问题是,我应该创建两个交换链,一个用于渲染gbuffer,另一个用于将计算着色器渲染到Backuffer并呈现,还是有其他方法?。我在这里试图避免的是必须使用fullscren四元体并在其上渲染cs的输出。开销太大了。提前感谢。编辑:我需要补充一点,您在执行此操作时会收到一些状态警告,因此请小心使用 最后,不需要两个交换链。首先使用DXGI_USAG

Directx 跟踪Direct2D渲染

默认情况下,Direct2D图片显示在函数EndDraw之后的屏幕上 出于调试目的,我需要在绘制任何绘图原语后在屏幕上显示图片 这在Direct2D中可能吗? 出于这些目的,我在GDI中使用了GdiSetBatchLimit1,这是不可能的。您需要围绕每个基本体开始绘制/结束绘制。如果有图层或剪辑,也需要在每个基本体周围设置并删除它们 您可以在D2D目标上呈现GDI内容 或者,您可以尝试使用一个循环,该循环将封装一个基本体,然后封装两个基本体,然后封装三个基本体,直到您的图形代码在Begin/e

Directx 为什么D3D12全屏幕示例中有2个视口?sceneviewport是做什么的?

在微软,有两个剪刀和两个堆描述符 似乎只使用了postviewport(每次调整大小时,调用LoadSizeDependentResources(),更新postviewport) 那么,在这种情况下,sceneviewport的作用是什么?示例使用两次渲染。它首先渲染到中间渲染目标(使用m_sceneViewport和m_scenesiscorrect),然后将中间渲染目标缩放到屏幕。检查OMSetRenderTargets调用。当选定的全屏模式维度与中间渲染目标的维度不同时,“缩放”就会发生

Directx fx/hlsl着色器的下拉式UI小部件

我制作了一个HLSL着色器(fx格式),并希望在其UI中添加一个枚举/列表参数-作为布尔标志列表的更好替代 因此,不是: [x] “使用自定义映射” [x] “使用自定义贴图alpha” [x] “使用漫反射alpha” [x] “使用镜面反射alpha” [x] “使用普通alpha” 拥有: 来源:[“使用自定义地图”] 所有5个选项和代码级别上选定项的索引 “DirectX标准注释和语义参考”提到了ListPicker小部件,但我找不到任何示例或说明如何使用它 问题是: 在着色器

Directx 全屏四像素着色器是否具有屏幕坐标?

我有一个640x480渲染目标(它是主backbuffer) 我将全屏四元体传递给顶点着色器,全屏四元体的X和Y坐标都在[-1,1]之间,这意味着我只将坐标传递给像素着色器,而不进行计算: struct VSInput { float4 Position : SV_POSITION0; }; struct VSOutput { float4 Position : SV_POSITION0; }; VSOutput VS(VSInput input) { VSOutpu

Directx 如何检测屏幕上看不见的三角形

我有一个非常简单的地形图与瓷砖!所有的瓷砖大小相同,只是高度不同(z值)! 我可以渲染它们,但有数千个瓷砖,但不是所有的都在屏幕上,只有一部分(在视图前面)!所以我正在做一个批渲染,只收集屏幕上出现的瓷砖,然后在一个调用中渲染它们! 我尝试使用D3DXVec3Project将世界空间上的顶点投影到屏幕空间,然后检测屏幕上的三角形,但是这非常慢,调用此函数可将整个地图的时间缩短到7毫秒(大约250x250次调用) 现在我使用的是iso视图(D3DXMatrixOrthoLH),没有摄像头或眼睛,当

Directx 食人魔::场景管理器::setAmbientLight不工作

我正在建立维基, 然后我发现Ogre::SceneManager::setAmbientLight()根本不起作用。 我发现谷歌搜索后没什么用,有人能给我一些想法吗? 代码如下所示: m_pSceneMgr = OgreFramework::getSingletonPtr()->m_pRoot->createSceneManager(ST_GENERIC, "GameSceneMgr"); m_pSceneMgr->setAmbientLight(Ogre::ColourVal

Directx 体素引擎的着色器环境光遮挡

我试图通过Monogame的VertexositionColorTexture在游戏中实现环境光遮挡。我提出的当前环境光遮挡的图像是这样的,但它并不完全完整: 我没有使用着色器来实现此效果,一直在努力找出如何在环境光遮挡中使用着色器。使用颜色而不是法线是错误的吗?我应该使用法线而不是颜色参数吗?我知道BasicFect类是一个着色器,但我只是好奇 谢谢大家。我不知道monogame,但是如果你想做环境遮挡,通常它会作为后期效果。这样,每个像素都保证被渲染。因为对于每一个像素,你需要在它的附近,

Directx 卷积滤波器输出错误的颜色值

我刚刚开始学习DirectCompute,出于学习的目的,我想制作一个简单的卷积滤波器来模糊纹理。我编写了以下计算着色器来模糊纹理: Texture2D<float4> inputTex; RWTexture2D<float4> outputTex; [numthreads(32, 32, 1)] void main( uint3 DTid : SV_DispatchThreadID ) { float4 totalPixVal = float4( 0.0f,

DirectX10/ShapDX自定义控件

我正在尝试使用directx10/direct2D输出面板而不是表单创建自定义控件。我在重写OnPaint方法中进行所有渲染,但是我在某些地方读到它是错误的,应该改用RenderLoop。但如果我只能在控件内部编写代码,我应该在哪里插入RenderLoop.Run?谢谢。您将创建一个线程,并在线程内运行RenderLoop。执行此操作时,必须确保以安全的方式调用组件之间来回发送的事件。如果不需要动画,也可以。

DirectX开源引擎许可

我想只发布源代码源代码,不发布我在zlib或MIT许可下创建的基本游戏引擎的二进制文件,但是它使用DirectX库,如Direct2D、Direct3D等,这些库不是开源的。我不打算将它们包含在我的项目的存储库中,所以当涉及到源代码本身时,这应该很好,但是当涉及到实际编译源代码时,不会有任何许可冲突吗?许可证是否也包括二进制文件?我应该在许可证或自述文件中添加一些注释,说明我选择的许可证不包括第三方库,只是为了确定,还是我根本不需要关心这些?这不是你的问题。您只发布源代码,并且您的许可证仅适用于

Directx 通过链接到Windows 10 SDK使用D3D9字体

是否可以通过链接到Windows10SDK中的DirextX版本来使用D3D9字体 下面是我想运行的代码类型。但我找不到Windows 10 SDK中支持的字体 D3DXFONT_DESC fontDesc; fontDesc.Height = 80; fontDesc.Width = 40; fontDesc.Weight = FW_BOLD; fontDesc.MipLevels =

DirectX 12与Vulkan';什么是LoadOp和StoreOp?

在许多D3D12教程和书籍中,当清除渲染目标视图时,只需清除深度模具缓冲区。这是大多数情况,但我遇到了特殊情况,我想知道,即使另一个缓冲区已被清除,缓冲区数据的数据是否已被保留。例如,清除渲染目标时是否保留深度模具缓冲区的数据 在Vulkan中,甚至Metal都提供了LoadOp和StoreOp,以保证在命令队列开始或完成执行时缓冲区数据。但是,我在D3D12中找不到类似的选项 正如我所知,在历史上,D3D不保证缓冲区数据被清除。是这样吗 否则,它是否总是保证保存?如果Microsoft有任何关

Directx 有没有一种程序化的方式来查看游戏使用的图形API?

对于像DOTA 2这样可以使用不同图形API(如DX9、DX11、Vulkan)运行的游戏,我还没有找到一个可行的解决方案来检查当前使用的API。我想这样做,以正确地注入一个动态链接库,以便在游戏中显示图像 我已经研究过手动检查游戏加载的dll 此工具例如: 但是,对于DOTA,如果在steam上的启动选项中未指定任何库,则它将同时加载d3d9.dll和d3d11.dll库。关于如何确定使用的正确图形API,有没有其他想法?在Vulkan中,一个干净的方法是实现一个Vulkan层来进行覆盖。它比

EndPaint挂钩将文本绘制到DirectX窗口

我想在DirectX游戏中绘制文本,所以我注入了一个钩住EndPaint的DLL。我的逻辑是,由于EndPaint应该是WM_PAINT操作的最后一步,我可以在钩子中绘制文本,然后自己调用EndPaint。通过这样做,我完全避免了DX接口 问题是它什么也没做。这是我的密码 #include <windows.h> #include "Hooks.h" static const TCHAR g_cszMessage[] = TEXT("utterly fantastic"); BO

有DirectX备忘单吗?

我尝试搜索DirectX备忘单,但只找到了DirectX 10的备忘单: 我真正感兴趣的是DirectX 9和11 有没有这些备忘单?可以说最好的“备忘单”是MSDN:

Directx 数据何时复制到GPU内存?

我的计划中有一些众所周知的步骤: CreateBuffer Create..View CSSet..Views Dispatch 在哪一步将数据复制到GPU?供您选择,并在需要时将数据复制到GPU 他们之所以投票否决,是因为你似乎没有在谷歌搜索上下功夫 答:当调用创建方法时,DirectX通常将数据从系统内存传输到视频内存。创建方法的一个示例是“ID3D11Device::CreateBuffer”。此方法需要指向数据所在位置的内存位置的指针,以便可以将数据从系统RAM复制到视频RAM。

Directx窗口不断崩溃 我的问题是,当我在VisualC++中运行它时,会弹出一个窗口。 但随后它就崩溃了。它没有响应,我无法单击退出。我得把车停下来 任务管理器来摆脱窗口。我不熟悉windows编程和direct X。 下面我将发表我认为问题所在的文章 #include <d3d9.h> #include <time.h> #define APPTITLE "Direct3D_Windowed" LRESULT WINAPI WinProc(HWND, UINT, WPARAM, LPARAM); ATOM MyRegisterClass(HINSTANCE); int Game_Init(HWND); void GAME_RUN(HWND); void GAME_END(HWND); LPDIRECT3D9 d3d = NULL; LPDIRECT3DDEVICE9 d3ddev = NULL; // Over here, after GAME_END() is called, I tried separating the POSTQUITMESSAGE But I I just got an error. LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg ) { case WM_DESTROY: GAME_END(hWnd); PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, msg, wParam, lParam); } ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WinProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = APPTITLE; wc.hIconSm = NULL; return RegisterClassEx(&wc); } // I got this code from a book that I am reading and realized that WinProc is not being called in this function. Is this the potential problem? Were would I put the WinProc function call if it is supposed to be here in WinMain int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg = {0}; MyRegisterClass(hInstance); HWND hWnd; hWnd = CreateWindow( APPTITLE, APPTITLE, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); if(!Game_Init(hWnd)) return 0; int done = 0; while(!done) { if(msg.message == WM_QUIT) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { MessageBox(hWnd, "Recieve WM_QUIT message", "WinMain", MB_OK); done = 1; } TranslateMessage(&msg); DispatchMessage(&msg); } else GAME_RUN(hWnd); } return msg.wParam; } int Game_Init(HWND hWnd) { MessageBox(hWnd, "Program is about to start", "Game_Init", MB_OK); d3d = Direct3DCreate9(D3D_SDK_VERSION); if(d3d == NULL) { MessageBox(hWnd, "Error initializing Direct3D", "Error", MB_OK); return 0; } D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev); if(d3ddev == NULL) { MessageBox(hWnd, "Error creating Direct device", "Error", MB_OK); return 0; } srand(time(NULL)); return 1; } void GAME_RUN(HWND hWnd) { if(d3ddev == NULL) return; d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 255, 255), 1.0f, 0); if(d3ddev->BeginScene()) { d3ddev->EndScene(); } d3ddev->Present(NULL, NULL, NULL, NULL); } void GAME_END(HWND hWnd) { MessageBox(hWnd, "Program is about to end", "Game End", MB_OK); if(d3ddev != NULL) d3ddev->Release(); if(d3d != NULL) d3d->Release(); }

看看这个 if(msg.message == WM_QUIT) 在你的while循环中。 也许可以改为,比如: if(true) 原因:您希望应用程序传递所有消息,而不仅仅是导致其退出的消息。例如,windows希望应用程序自行绘制时。基本上,您当前的代码不允许您的应用程序做任何事情,除了退出 如果您想在应用程序退出时执行一些特殊操作,请在WinProc中已经存在的案例WM_DESTROY:之后添加另一个案例WM_QUIT: 游戏运行的当前位置;这对你不合适。 您可以将其放在一个单独的线程中

如何从“编译演示”;DirectX 11“3D游戏编程简介”;是否在Visual Studio 2015(或更高版本)中?

我已经被这个问题困扰了几个星期,我只是不断地遇到奇怪的调试错误,比如: 1.dxgi1_2.h中关于DXGI_RGBA的3个错误组合(现在暂时消失) C4430、C2143和C2061 喜欢这个链接中的错误吗 2.错误C2677:二进制“”:未找到采用“DirectX::XMVECTOR”类型的全局运算符(或不存在可接受的对话) 操作符重载的这个版本是在DirectXMath.h中声明的,它在DirectXMathVector.inl中定义,并且在这个演示项目的其他部分工作得非常好。 3.有时候

Directx HLSL:TextureCube.SampleGrad()需要哪个DDX DDY

我想知道SampleGrad函数希望TextureCube对象使用哪个DDX DDY值。 我知道这是2D纹理UV坐标的变化。所以我想,在这种情况下,这将是方向的改变。然而,情况似乎并非如此 如果我尝试使用Sample函数与SampleGrad,我会得到不同的结果: // calculate reflected ray float3 reflRay = reflect(-viewDir, normal); // reflection map lookup float3 dxr = ddx(refl

Directx 那里';我的注册表中没有Direct3D。我该怎么办?

如您所见,regedit中没有Direct3D文件。 我需要在我的代码中找到内存泄漏。 我已经用_CrtSetBreakAlloc清除了所有内存泄漏 D3DX:检测到内存泄漏:60个分配未泄漏(4603字节) D3DX:将HKLM\Software\Microsoft\Direct3D\D3DXBREAGNALLOCID=0x736设置为调试 这是我在VisualStudio中调试D3DX时收到的消息 如何在regedit中找到Direct3D文件 如果不可能,是否有其他方法使用D3DXBrea

Directx 可以用XNA和C制作真正的游戏吗?

XNA和C#能否用于制作商业上可行的PC/XBOX游戏 这是用C#创建3D游戏的最佳方法吗?如果没有,会是什么?我怀疑你是否会用它创造下一个战争齿轮,但XNA在许多类型的游戏中都很好用。XBox Live上的大多数(所有?)社区游戏都是使用XNA创建的。对第一个问题的简短回答是,是的。完全可以使用XNA库创建任何类型的游戏。它可以用来制作简单的2D平台,也可以制作中等复杂的3D射击游戏。 根据游戏的不同,您需要为游戏创建的逻辑量可能会有所不同 当然,在创建3D游戏时,您必须创建自己的3D引擎,或

Directx 采样BC5_SNORM纹理会产生不正确的值范围

我正在使用Direct3d 11,我遇到了一些奇怪的事情。我已经采取了一个正常的地图和编码它到DDS文件两次。一次使用R8G8B8A8_SNORM编码,一次使用BC5_SNORM 接下来,我将使用D3DX11CreateShaderResourceViewFromFile和D3DX11GetImageInfoFromFile加载每个纹理。当我在像素着色器中对这些纹理进行采样时,我发现R8G8B8A8_SNORM纹理返回的值在[-1,1]范围内,这是我对SNORM纹理的期望值。但是,BC5_snr

Directx HLSL坐标系定向

这个问题看起来很简单,但我找不到HLSL如何处理自己的坐标系 我只想知道(0,0)位于何处(左上角或左下角),由于我完全是这些着色器概念的初学者,我无法自己推导 谢谢你的帮助 我相信您想了解DirectX的坐标系。HLSL是一种着色语言,不定义要使用的坐标空间 这里有几个链接可以帮助您开始 我相信你想了解DirectX的坐标系。HLSL是一种着色语言,不定义要使用的坐标空间 这里有几个链接可以帮助您开始 在顶点着色器中,可以使用多个坐标系或空间 通常,顶点数据到达世界坐标 然后顶点数据通

DirectX、GDI和x2B;还是Windows XP上的SDI?

如果我想在Windows XP和更高版本的Windows上实时缩放和合成2D抗锯齿矢量和位图图像,充分利用可用的硬件加速,我应该使用GDI+还是DirectX 9.0c?(实际上,Windows XP和Windows 7很重要,但我们并不关心Vista的性能。) 如果应用程序不是跨平台的(而且永远不会),那么使用SDL有什么好处吗?我想知道SDL是否可以使切换到性能更好的底层绘图API更容易 在哪里可以找到在DirectX 9.0c中进行二维图像缩放和合成的文档?(我找到了DirectDraw的

Directx 无法编译nVidia HLSL示例-FXC任务不支持CommandLineTemplate 我试图从英伟达网站编译一个样本来做实线框渲染:

在Visual Studio 2012中打开VC++项目并进行编译时,我收到以下错误消息: 错误5错误MSB4064:“FXC”任务不支持“CommandLineTemplate”参数。验证任务上是否存在该参数,以及该参数是否为可设置的公共实例属性 我是否缺少一个框架或SDK?或者可能需要修改此示例以使用VS2012 非常感谢 你有最新的吗 此外,是否有可能VS有一个自定义编译操作来运行您缺少的FXC(着色器编译器) 如果您可以通过fxc找到编译其着色器所需的参数,则可以通过命令提示符运行该参

Directx 计算着色器:从一个线程读取写入另一个线程的数据?

有人能告诉我DirectX 11是否可以使用以下计算着色器吗 我希望调度中访问缓冲区(g_positionsGrid)中元素的第一个线程将该元素设置为(比较交换)临时值,以表示它正在执行某些操作 在本例中,临时值为0xFFFFFF,第一个线程将继续并从结构化附加缓冲区(g_位置)分配一个值,并将其分配给该元素 因此,到目前为止一切正常,但调度中的其他线程可以进入比较交换和第一个线程的分配之间,因此需要等待,直到分配索引可用。我在忙着等待(while循环)时这样做 然而,不幸的是,这只会锁定GPU

Directx 在WPF上渲染多个视频的最佳方法

我是这方面的新手,所有与DirectX、渲染视频、渲染图像等相关的东西。。 所以我需要你的帮助: 我有一个WPF应用程序。此应用程序需要渲染大量视频(至少并行渲染10个视频),并且这些视频必须在GPU而不是CPU上渲染。我已经尝试使用WPF MediaKit,但它会消耗大量内存(RAM)和CPU。我还尝试了WPF MediaElement,它还消耗了大量内存(RAM) 所以,我的问题是: 1-如何构建一个应用程序,以尽可能少的内存在GPU上同时渲染大量视频?您将使用什么技术? 注意:如果您建议使

DirectX 10 ID3DDevice::CreateTexture2D使用初始数据创建奇怪的图像

作为起点,我正在使用RasterTek DX10教程11:2D渲染中的DirectX,并且我能够运行该示例 我的目标是通过共享内存将UINT32阵列从一个应用程序传递到我的新DirectX应用程序,以在屏幕上显示每像素10位的彩色图像,即DXGI_格式_R10G10B10A2_UNORM。出于开发目的,我只需在DirectX应用程序中填充我的数据数组,其中所有像素都具有相同的值(一旦我开始工作,我将不会只显示纯色,这就是我尝试此操作的原因)。我可以看出数据是有意义的,例如,仅显示纯白色图像,我的

Directx 游戏循环顺序,先画然后处理输入?

我刚刚阅读了DirectX文档,在页面中遇到了一些有趣的内容: 要在 CPU和图形加速器, 打电话是有利的 IDirect3DDevice9::EndScene到目前为止 尽可能提前打电话给在场的人 我已经习惯于编写我的游戏循环来处理输入之类的,然后绘制。我有倒着的吗?也许游戏循环应该更像这样:(显然是半伪代码) 根据文档中的这句话,这个循环将“实现最大的并行性” 这是常见的吗?像这样安排游戏循环有什么坏处吗?在第一次迭代之后,我看不出它有什么真正的问题。。。我知道知道知道像这样的东西的实际速度

Directx 点精灵的缩放(Direc3D 9)

请告诉我应该使用什么值​​我为D3DRS_POINTSCALE_A、D3DRS_POINTSCALE_B、D3DRS_POINTSCALE_С设置点精灵,使其与场景中的其他对象一样缩放。参数A=0 B=0和C=1(由F.D.Luna提出)不合适,因为比例不够精确,粒子(点精灵)之间的距离可能大于其应有的距离。如果将点精灵替换为公告牌,则粒子的比例是正确的,但渲染速度要慢得多。请帮助我,因为为我的任务渲染粒子的速度非常重要,但它们的精确比例也非常重要 Direct3D根据以下公式计算屏幕空间点大小

我可以使用哪些函数在DirectX9中渲染天平面(下面解释)?

基本上,它就像一个天空盒,但它是一个完全平坦的平面,位于屏幕前面。我的想法是拥有一个大的纹理,并且根据你旋转相机的方式,它在平面上渲染纹理的不同部分,就像你相对于“天空”移动一样在平面上绘制,当你到达边缘时,它会渲染它+另一侧的部分(我会使用无缝纹理,这样看起来就不会有接缝)。我已经找到了做这件事的公式,但我不确定使用什么方法。我是说我不确定我是否应该用C++来做,或者它应该在一些FX文件中的着色器中完成,直接在GPU上进行? < P>你所需要做的就是在你的场景后面绘制一个全屏四边形,或者使用深

Directx DirectCompute信息

我一直试图利用GPU作为我的一个项目的一部分。我已经研究过CUDA和OpenCL,但是缺乏信息来说明如何将它们引入到项目中,这令人震惊。甚至他们专门的论坛小组也已经死亡。现在,我正在研究DirectCompute 据我所知,它只是一种利用HLSL的新型着色器文件。我的问题是,除了DirectX 10/11之外,我的程序是否需要改变其结构 我的意思是,这仅仅是一个创建CS文件的例子,在项目中像其他着色器一样设置,然后看着神奇的发生 请提供有关这方面的任何信息。是的,CS适合通常的DirectX编程

Directx 如何在Direct3D10中获取设备上下文

谁能帮我把这个DX9代码移植到DX10(不是11!)。这是一个简单的绘画纹理 // create the texture m_pDevice->CreateTexture(m_width, m_height, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &m_pTexture, NULL); // get its surface (target surface) m_pTexture->GetSurfaceL

Directx 背景Alpha混合

我是DirectX的初学者,所以请为我保持简单。我已经加载了一个纹理并将其显示在一个四边形上,但透明的背景仍然显示出来。我怎样才能阻止它?我尝试了两种不同的方法,他们阻止了它的显示,但我在屏幕上绘制的其他四边形也消失了(它们没有纹理)。我的问题是,在绘制没有纹理的基本体之前,我没有将纹理重置为null。我尝试抛光我的水晶球,但没有任何帮助。请提供一些关于您的问题的附加信息,特别是一些假设错误的代码(drawcall、顶点设置)。如果透明度不起作用,第一个猜测是:是否已将alpha混合的rende

Directx 如何用四元数调整欧拉角

我正在寻找一种方法,返回一个由四元数旋转的欧拉角 我知道从四元数中提取俯仰、横摇和偏航充其量是有问题的,但如果可以的话,我只需将其值添加到我自己的值中,以获得最终的欧拉角 我也可以将欧拉角转换成四元数,然后将二者结合起来,但剩下的四元数我无法转换成欧拉 我承认在最好的时候,我会与四元数斗争,所以任何帮助都会受到欢迎 为了清楚起见,我只需要返回一个欧拉角,如果需要,所有其他的计算都可以用四元数完成 我用的是子弹物理,直接X,C++ 谢谢 不能将Euler角与Euler角或Euler角与四元数直接组

使用DirectX IDXGIOutput::GetDisplaySurfaceData进行DWM屏幕捕获

我正在尝试使用DXGI捕获DWM的DirectX曲面,并使用Direct3D 10/11捕获GetDisplaySurfaceData 但是,在调用GetDisplaySurfaceData之前,当我使用IDXGIOutput::TakeOwnership获得适配器输出的所有权时,整个屏幕会暂时变黑,然后恢复,就像在显示模式切换期间一样 为什么会发生这种情况,我怎样才能防止这种情况发生?我知道现在已经非常晚了。但无论如何,文档明确指出,您不应该直接呼叫收购,因为结果将是不可预测的 我知道现在已经

在DirectX 11中渲染精灵的最佳实践是什么?

我目前正在尝试使用DirectX API,我想知道在DirectX 11中渲染精灵的常用方法是什么(例如,对于俄罗斯方块克隆) 是否有类似于ID3DX10Sprite的界面,如果没有,在DirectX 11中绘制sprite的常用方法是什么 编辑:这是为我工作的HLSL代码(投影坐标的计算可以做得更好): struct SpriteData { 浮动2位; 2号; 4色; }; 结构输出 { 浮动4位置:SV_位置; 浮动4颜色:颜色; }; cbuffer屏幕大小:寄存器(b0) { 2屏幕大

如何在MinGW中编译DirectX 11应用程序

我已经看过了,但找不到任何与使用Direct3d 10或11与MinGW相关的材料。我该怎么做才能让事情顺利进行?DXSDK提供的头文件中有错误 甚至没有人想到建议使用Visual Studio。这里似乎解释了如何使用MinGW从SDK获取DX头: 使用谷歌翻译将网页翻译成英语 或者,从以下位置尝试使用mingw64项目中的DirectX标头: 您需要“下载头文件和CRT源代码v2.0.1(r4623)(7.0MB)”。或者您可以直接从svn中查看它们:可能这就是答案 我尝试了日本网站的建议,也

Directx 网格的顶点结构与顶点着色器的顶点结构

[使用HLSL、一个*.fx文件和DirectX9] 我对使用着色器很陌生,有一个场景可以工作,但不明白为什么。我很困惑网格如何可以有一个版本的顶点偏移,而着色器可以定义另一个版本 我用D3DXCreateSphere(…)创建了一个ID3DXMesh球体,它是用D3DFVF_XYZ | D3DFVF_NORMAL设置的。我调用ID3DXMesh::DrawSubset(0)进行渲染;内部BeginPass/EndPass调用 然后我有一个定义了结构的顶点着色器: struct Vertex {

Directx 默认情况下创建的深度模具缓冲区导致的问题

我正在学习影子地图上DirectX SDK中的一个示例。此示例在初始化过程中创建了模具曲面,并显示: Create the depth-stencil buffer to be used with the shadow map We do this to ensure that the depth-stencil buffer is large enough and has correct multisample type/quality when rendering the shad

Directx 为什么球体纹理贴图实际上无法匹配

我在我的3d项目中有一个球体,我有一个地球纹理,我使用来自的算法来计算纹理坐标。 我的效果文件中的代码如下所示: float pi = 3.14159265359f; output.uvCoords.x = 0.5 + atan2(input.normal.z, input.normal.x) / (2 * pi); output.uvCoords.y = 0.5f - asin(input.normal.y) / pi; 结果如下图所示: 从左边看(有一行,这是我的问题) 从前面看 从右

Directx 裁判和哈尔有什么区别?

这个问题的表述不完全正确,因为用一句话来说有点难,所以真正的问题是: 在Direct3D9中创建表示设备的对象的函数如下所示 HRESULT IDirect3D9::CreateDevice( UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, ID

Directx (2d纹理阵列)vs(纹理图集)vs(多个绑定/绘制)

我的问题涉及处理多个纹理的最佳方法。首先是一些背景: 我在非游戏应用程序中使用DirectX-11;gui专门使用DirectX。我正在使gui可蒙皮,以便用户可以根据自己的喜好自定义gui 我编写代码的方式是,gui布局和每个gui元素的大小可以根据配置文件进行更改。gui目前仅通过DrawIndexedInstanced使用DirectX primatives,但我希望支持用户提供的纹理。这些纹理的大小可能会有所不同。这些不同的纹理多达24种 我可以通过以下任一方法解决此问题: 动态组合纹理

Directx 尝试使用TriangleStrip Topologu创建三角形时的奇怪行为

我尝试在中创建这个2D三角形,将输入汇编程序设置为三角形带: 1.(0.0f, 0.0f, 0.5f) 2.(-0.5f, 0.0f, 0.5f) 3.(-0.5f, -0.5f, 0.5f) 但是,没有绘制三角形,事实上渲染目标上没有绘制任何东西,甚至没有绘制一条直线。我到处乱搞,然后我交换了坐标2和3,结果成功了。三角形是按我的意图画的。这种奇怪行为的原因是什么?您以逆时针顺序定义顶点,而Direct3D默认情况下将以逆时针顺序定义消隐面,因此在背面消隐期间对三角形进行消隐,因此您没有得到

Directx 计算着色器、缓冲区或纹理

我正在尝试使用计算着色器实现。在本文中,有一系列的过程是在纹理上完成的,因为这是在计算着色器之前编写的 在纹理或缓冲区上进行每次传递是否会更快?最终的过程无论如何都必须应用于纹理。我建议使用适合模拟的资源维度。如果是1D模拟,请使用RWBuffer;如果是2D模拟,请使用RWTexture2D;如果是3D模拟,请使用RWTexture3D 您链接的算法中似乎存在使用双线性过滤的阶段。如果您限制自己使用缓冲区,则必须执行4或8次内存提取(取决于2D或3D),然后执行更多指令来计算加权平均值。尽可能

Directx DXGI可等待的交换链未等待

我设置了一个DX12应用程序,它只在每一帧清除backbuffer 这真的是赤裸裸的:没有PSO,没有根。。。 唯一的特殊性是,它在启动新帧()之前等待swapChain使用Present()完成(我也将帧延迟设置为1,并且on上只有2个缓冲区) 第一个帧工作正常,但它立即开始绘制第二个帧,当然,命令分配器会抱怨它在GPU上执行命令时被重置 当然,我可以在移动到新帧之前设置一个围栏,等待gpu完成,但我认为这是可等待交换链对象的工作 以下是渲染例程: if(m_命令\u分配器->重置()==E_

上一页   1   2   3    4   5   6  ... 下一页 最后一页 共 24 页