如何在 DirectX 9 中将 XMMATRIX 转换为 D3DMATRIX?

2023-12-11

我从 www.directxtutorial.com 学习 DirectX (DirectX 9) 并在 Windows 8 中使用 Visual Studio 2012。 d3dx9 (d3dx) 被其他标头(例如 DirectXMath)替换,因此我替换了所需的所有标头,但存在一个问题 - 将 XMMATRIX 转换为 D3DMATRIX。

问题代码(问题写法-/problem!/):

void render_frame(void) {
// clear the window to a deep blue
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

d3ddev->BeginScene();    // begins the 3D scene

// select which vertex format we are using
d3ddev->SetFVF(CUSTOMFVF);

// SET UP THE PIPELINE

DirectX::XMMATRIX matRotateY;    // a matrix to store the rotation information

static float index = 0.0f; index+=0.05f;    // an ever-increasing float value

// build a matrix to rotate the model based on the increasing float value
matRotateY = DirectX::XMMatrixRotationY(index);

D3DMATRIX D3DMatRotateY = matRotateY.r;

// tell Direct3D about our matrix
d3ddev->SetTransform(D3DTS_WORLD, &matRotateY); /*problem!*/

DirectX::XMMATRIX matView;    // the view transform matrix

DirectX::XMVECTOR CameraPosition = {0.0f,0.0f,10.0f};
DirectX::XMVECTOR LookAtPosition = {0.0f,0.0f,0.0f};
DirectX::XMVECTOR TheUpDirection = {0.0f,1.0f,0.0f};

matView = DirectX::XMMatrixLookAtLH(CameraPosition,    // the camera position
    LookAtPosition,    // the look-at position
    TheUpDirection);    // the up direction

d3ddev->SetTransform(D3DTS_VIEW, &matView);  /*problem!*/   // set the view transform to matView

DirectX::XMMATRIX matProjection;     // the projection transform matrix

DirectX::XMMatrixPerspectiveFovLH(&matProjection,
    DirectX::XMConvertToRadians(45),    // the horizontal field of view
                           1.0f,    // the near view-plane
                           100.0f);    // the far view-plane

d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection);  /*problem!*/   // set the projection

// select the vertex buffer to display
d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));

// copy the vertex buffer to the back buffer
d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

d3ddev->EndScene();    // ends the 3D scene

d3ddev->Present(NULL, NULL, NULL, NULL);   /* displays the created frame on the screen */ }

您可以使用XMStoreFloat4x4转换XMMATRIX to a XMFLOAT4X4.

您应该能够通过转换将 XMFLOAT4X4 传递给 setTransform。

DirectX::XMMATRIX matProjection;   
DirectX::XMFLOAT4X4 projectionMatrix;
DirectX::XMMatrixPerspectiveFovLH(&matProjection,DirectX::XMConvertToRadians(45),1.0f,100.0f); 
XMStoreFloat4x4(&projectionMatrix, matProjection);
d3ddev->SetTransform(D3DTS_PROJECTION, (D3DXMATRIX*)&projectionMatrix);  /*problem!*/   // set the projection
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 DirectX 9 中将 XMMATRIX 转换为 D3DMATRIX? 的相关文章

随机推荐

  • Java停止MIDI播放

    您好 我有一个 Java 应用程序 它可以从序列中播放 MIDI 消息 我正在使用 jfugue 库执行此操作 问题是当我尝试使用停止按钮 调用sequencer stop 和sequencer close 停止播放时 最后播放的音符在整个
  • 将列表列表转换为具有多种数据类型的 numpy 数组

    我有一个从文件中读取的列表列表 每个内部列表的长度为 6 个元素 并具有 3 个字符串和 5 个浮点数 如何将此列表列表转换为 numpy 数组 谢谢 您想要一个结构化数组 它具有一个复合数组dtype 列表示例 In 4 ll one t
  • SQLalchemy 具有一对一关系的批量插入

    我有以下模型 其中 TableA 和 TableB 具有 1 对 1 关系 class TableA db Model id Column db BigInteger primary key True title Column String
  • 如何将指标列转换为连接列(列名称)

    我有 3 列 由指标 0 1 组成 icols lt structure list delivery group c 0 1 1 0 0 culturally tailored c 0 0 1 0 1 integrated interven
  • xmlstarlet 追加并插入新行值

    我想知道如何使用 xmlstarlet 添加新行 我的目标是添加一个
  • 在 Python 中查找两个字符串之间最有可能的单词对齐方式

    我有 2 个类似的字符串 如何在 Python 中找到这两个字符串之间最可能的单词对齐方式 输入示例 string1 my channel is youtube dot com slash example and then I also d
  • 将旧日志从 Stackdriver 导出到 Bigquery

    我有可追溯到 9 月 3 日的 Stackdriver 日志 以及我在 9 月 14 日创建的接收器 将这些日志拉入 Bigquery 数据集 目前 Bigquery 中的数据仅从我创建接收器时开始 我可以将以前的日志导出到一个巨大的 cs
  • 为什么 PHP 中不推荐使用 mime_content_type() ?

    我只是想知道为什么mime content type 现在被认为已弃用 这种确定 mime 类型的方法比替换要容易得多Fileinfo功能 该方法并未被弃用 它曾经在手册中被错误地标记为已弃用 但已被修复https bugs php net
  • 确保用户以正确的格式输入了电子邮件地址字符串?

    我在 联系人 屏幕中有一个文本字段 用户需要输入电子邮件地址才能向我发送消息 确保用户输入有效电子邮件地址的最佳方法是什么 例如 email protected net org co il email protected email pro
  • 错误:(246, 5) 错误:资源“attr/rippleColor”的值与配置“重复”

    当我将 android studio 升级到版本 3 时 我遇到了这个问题 Error 246 5 error duplicate value for resource attr rippleColor with config 这是我的等级
  • Bootstrap 4 - 折叠外的导航栏项目

    好吧 我不得不承认 即使在 BS3 中 我也一直在努力如何正确工作 但我希望在折叠容器外部保持持久的导航栏链接 这就是我现在所拥有的
  • 在两个活动之间传递位图[重复]

    这个问题在这里已经有答案了 我正在开发一个绘画应用程序 我想在其中将位图图像从一个活动传递到另一个活动 但该项目没有响应 我将相对布局截图转换为位图并通过Intent传递 但问题没有解决 这是我的代码 绘画活动 package com ne
  • 使用 .net Web 服务从 iPhone 调用 http post URL

    当我点击按钮时 我需要从我的 iPhone 调用一个 url 该 url 将 UITextField 中的值作为参数 并且使用 POST 方法来调用 Web 服务 我如何在我的 iPhone 中使用该 URL 我用 GET 方法做了同样的事
  • iPhone 启动画面

    我真的很尽力 但我无法真正找出我的代码中出了什么问题 我做了很多搜索 但我想我只是无法理解一些客观的 c 基础知识 我的第一个问题与下面的代码有关 window addSubview tabBarController view UIImag
  • java.util.NoSuchElementException:即使我们使用流,也没有值存在

    我是 java 新手 我正在运行本地服务器 jar 并尝试访问 API 端点 所有数据都是正确的 我得到以下信息 java util NoSuchElementException 不存在值 执行似乎发生在代码片段的下面一行 得到 任何帮助是
  • 使用 openpyxl 将 pandas 数据框复制到 Excel

    我在模板文件中保存了一些复杂的格式 我需要将 pandas 数据框中的数据保存到其中 问题是当我使用 pd to excel 保存到此工作表时 pandas 会覆盖格式 有没有办法以某种方式将 df 中的值 粘贴到工作表中 我正在使用熊猫0
  • 是否可以通过Python脚本执行QPDF

    我正在开发一个处理 PDF 文件的 python 脚本 尽管其中一些文件包含加密 限制使用只能打印 我必须手动删除它们才能处理它们 为此我一直手动使用QPDF在运行脚本之前删除对单个 PDF 文件的这些限制 qpdf 的命令非常简单 在命令
  • 无法在 iOS 中将 XMPPFramework 连接到 Openfire 服务器

    我正在研究一个iOS用户登录应用程序的聊天应用程序 我已经下载了XMPPFramework来自 GitHubXMPP框架 我正在尝试连接XMPP框架与Openfire服务器通过以下方式本教程 这是我将 XMPP 连接到 openfire 的
  • 有人在 Windows 7 上成功使用 Visual Studio 6 吗?

    VS6 在 Windows 7 上安装期间出现了一系列错误 然后完全崩溃 我特别需要让 VB6 在 Windows 7 上运行 有人有运气吗 VB6 新闻组中的人们report他们已经设法让它在 Windows 7 上运行 There s
  • 如何在 DirectX 9 中将 XMMATRIX 转换为 D3DMATRIX?

    我从 www directxtutorial com 学习 DirectX DirectX 9 并在 Windows 8 中使用 Visual Studio 2012 d3dx9 d3dx 被其他标头 例如 DirectXMath 替换 因