标签: directx

在 DirectX9 中更改分辨率

我发现很难找到很好的信息来源来解释 DirectX API,尽管我已经查看了一段时间的 DirectX 文档。

我正在尝试为 DX9 的包装类创建一个方法,该方法在运行时更改分辨率。我已经设法用 DirectDraw 处理了这个问题,但我没有找到关于 DX9 的信息,尽管它应该更常见。

我发现的只是对 SetDisplayMode 的引用,但是我的 Direct Object 或 DirectX Device 都没有这个方法。

我正在使用 DirectX 9。

示例方法:

void SetResolution(int width, int height, int depth)
{
   // I have access to DirectX device, object and the window HWND in this class
};
Run Code Online (Sandbox Code Playgroud)

...我是更改 HWND 窗口大小,还是在 DirectX 中处理此问题?我知道如何在 Windows 应用程序中更改分辨率,但不知道如何在 DX9 中执行此操作。

c++ directx directx-9

0
推荐指数
1
解决办法
4662
查看次数

DirectX 如何确定缠绕顺序?

DirectX 如何确定多边形缠绕顺序?我特别好奇背面剔除。通过研究,我发现 DX 计算表面法线并取其与相机矢量的点积,如果大于 0 则剔除。

首先,这是 DirectX 实际采用的技术吗?其次,如果是这种情况,假设每个表面都有两个法线(一个与另一个相对),DirectX 如何知道使用哪一个法线?

directx 3d direct3d culling

0
推荐指数
1
解决办法
1129
查看次数

DirectX 11:如何在使用多个顶点缓冲区时定义输入布局?

使用 Direct3D 11,我希望能够为位置和颜色使用单独的顶点缓冲区。当位置在运行时很少改变时,我想这样做,而颜色可能会经常改变。该主题并不新鲜,但我找不到正确处理许多顶点缓冲区/着色器的综合答案。如果我对如何创建和设置顶点缓冲区非常有信心,我不确定如何定义布局。为了进行实验,我从 MSDN 教程开始,该教程仅使用一个顶点着色器绘制单个三角形。我将着色器分成两部分,位置和颜色。

以下是我的 HLSL 和 C++ 代码的主要内容。

// ******着色器文件*****

struct VS_OUTPUT
{
    float4 Pos : SV_POSITION;
    float4 Color : COLOR0;
};

// Position shader
VS_OUTPUT VPS( float4 Pos : POSITION )
{
    VS_OUTPUT output = (VS_OUTPUT)0;
    output.Pos = Pos;
    return output;
}

// Color shader
VS_OUTPUT VCS( float4 Color : COLOR )
{
    VS_OUTPUT output = (VS_OUTPUT)0;
    output.Color = Color;
    return output;
}

// Pixel shader
float4 PS( VS_OUTPUT input ) : SV_Target
{
    return …
Run Code Online (Sandbox Code Playgroud)

c++ directx

0
推荐指数
1
解决办法
5319
查看次数

IntelliSense:标识符“XMFLOAT4”未定义

    #ifndef RENDERER_H
    #define RENDERER_H

    #pragma once

    #include "Font.h"
    #include "Color.h"

    #undef CreateFont

struct Vertex_t {
    XMFLOAT4 xyzrhw;
    D3DCOLOR color;

    enum {
        FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE
    };
};
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时出现此错误:

IntelliSense:标识符“XMFLOAT4”未定义。

我该如何解决?

c c++ directx intellisense direct3d

0
推荐指数
1
解决办法
2116
查看次数

顶点和索引缓冲区如何在 DirectX11 中与顶点、法线和 Texcoord 一起工作

我不明白 DirectX11 如何理解顶点缓冲区中的哪些值是顶点,哪些是法线,哪些是 Texcoords

例如:

以下代码有效,但它将模型绘制为全白色。但法线和顶点绘制正确

std::vector<float> vertex_buffer;
for (int i = 0, j = 0; i < num_vertices; i+=3, j+=2)
{
    vertex_buffer.push_back(attrib.vertices[i + 0]);
    vertex_buffer.push_back(attrib.vertices[i + 1]);
    vertex_buffer.push_back(attrib.vertices[i + 2]);
    vertex_buffer.push_back(attrib.normals[i + 0]);
    vertex_buffer.push_back(attrib.normals[i + 1]);
    vertex_buffer.push_back(attrib.normals[i + 2]);
    vertex_buffer.push_back(0.0F);
    vertex_buffer.push_back(0.0F);
    vertex_buffer.push_back(0.0F);
}

std::vector<UINT> index_buffer;
for (int i = 0, j = 0; i < num_indices; i+=3, j+=2)
{
    index_buffer.push_back(shapes[0].mesh.indices[i + 0].vertex_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 1].vertex_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 2].vertex_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 0].normal_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 1].normal_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 2].normal_index);
    index_buffer.push_back(0);
    index_buffer.push_back(0); …
Run Code Online (Sandbox Code Playgroud)

c++ windows directx direct3d visual-studio

0
推荐指数
1
解决办法
1308
查看次数

从哪里开始创建 D3D11 Hook 来制作游戏叠加层?

我目前正在开发我的第一个 D3D 项目,其中涉及为游戏创建叠加层,以便向用户呈现实时信息。实际的数据采集已经处理完毕,将通过消息系统发送。目前,我的程序适用于无边框全屏模式,并且正在调整它以在窗口模式下按比例缩放(以确保所有内容都指向正确的位置,无论大小如何)。该应用程序是游戏的父级,但是,当游戏进入真正的全屏模式时,一切都会崩溃。研究表明,据我了解,我需要创建一个假的 .dll,并将其插入到游戏的本地目录中。该 .dll 将被打开,而不是它正在寻找的实际 directX DLL,我可以在那里制作所需的图形。

为了回答一些潜在的问题,我无法直接访问游戏,而且,虽然相关游戏的开发者已经同意这一点,但我宁愿它不要被反作弊软件捕获和惩罚。此外,我希望将性能影响保持在最低限度,因此目前覆盖层的 FPS 相当低(~10fps)。

预先感谢您的任何帮助!

c++ directx overlay directx-11

0
推荐指数
1
解决办法
2786
查看次数

如何通过 WM_INPUT 设置获得绝对鼠标位置?

我正在研究 Direct3D 游戏引擎,我从之前的项目中获得了鼠标和键盘设置,但最近遇到了问题:

问题是,我的引擎是针对射击/砍杀游戏的,因此它需要直接输入,这是在之前的项目中使用 RAWMOUSE 和 WM_INPUT 消息解析设置的。

    case WM_INPUT:
        if (wParam == RIM_INPUT)
        {
            dword dwSize = 48;
            RAWINPUT raw;

            if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, &raw, &dwSize,
                sizeof(RAWINPUTHEADER)) != dwSize)
                OutputDebugString(TEXT("GetRawInputData does not return correct size !\n"));

            if (raw.header.dwType == RIM_TYPEMOUSE)
            {
                this->mouse.TranslateMouseInput(raw.data.mouse);
            }
            break;
        }
Run Code Online (Sandbox Code Playgroud)

问题是,该代码仅返回鼠标的相对移动,它在设置相机查找时很有用,但是当涉及到由鼠标(按钮等...)控制的菜单或基本 GUI 时,事情就会变糟:GUI 和其他控件需要相对于客户端矩形计算光标位置。

我在 WinAPI 中找到的最接近答案是GetCursorPos()与 结合使用GetWindowRect(),但是如果窗口有标题栏相对偏移量,则它不算在内,并且 (0,0) 坐标设置在标题栏的顶部,但不在客户端区域上。

如何在不丢失相对鼠标移动的情况下解决该问题?

- 我应该尝试用 WM_INPUT 解析 WM_MOUSEMOVE 消息吗?

我一直在寻找一种流行的游戏引擎输入解决方案,但没有找到任何特定的解决方案。

附加信息

windows directx winapi mouseevent c++14

0
推荐指数
1
解决办法
2499
查看次数

dx12) 编译Shader时间太长

在此输入图像描述

分析时,仅着色器编译就花费了大约 14 秒。(尽管加载所有 obj 文件只花了 7 秒。)

我该如何优化这个?我可以选择预编译 hlsl 着色器吗?

c++ directx direct3d hlsl directx-12

0
推荐指数
1
解决办法
769
查看次数

DirectX与OpenGL?

我看到有关OpenGL的文章比DirectX更好,微软真的只是试图让每个人都使用DirectX,即使它比较差,因此游戏几乎专门用于Windows和XBox,但自2006年撰写它今天仍然有用吗?

另外我知道有很多游戏都是用DirectX编写的,但有没有人有任何用OpenGL编写的流行游戏的例子?

opengl directx

-1
推荐指数
1
解决办法
2139
查看次数

有关地形编辑器的好教程吗?

我是3D游戏编程的新手,现在正在Windows上研究DirectX和OpenGL.但我想出了一个地形编辑器,但我无法在网上获得任何开放的教程或想法.

有没有一个很好的教程或开源代码来学习这个?

简单的一个很好,我只是想知道如何提升或降低地形,或在地图上放一棵树,如下面的视频.

如下视频:http://www.youtube.com/watch?v =oaAN4zSkY24

opengl directx terrain game-engine heightmap

-1
推荐指数
1
解决办法
1792
查看次数