DirectX3D 正交投影学习记录

这篇具有很好参考价值的文章主要介绍了DirectX3D 正交投影学习记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

所谓正交投影变换,就是已知盒状可视空间内任意点坐标(x,y,z),求解垂直投影到xy平面的对应点坐标。
按照这个定义,xyz坐标系本身就是正交坐标系,盒状可视空间内任意点的坐标(x,y,z)投影到(x,y)平面,只要简单地丢弃z坐标就可以啦,即(x,y,z)变换到(x,y,0)即可,这个理解完全没有问题,但却不是正确的结果,那么原因是什么呢?

主要原因是有两个需要考虑的问题:

规范化坐标系:现实情况几乎所有的图形系统都把坐标系的空间范围限定在(-1,1)范围内,这么做是为了方便移植,使坐标系独立于各种尺寸的图形设备。
z坐标需要保留:想象一下可视空间内存在多个物体的场景,前面的物体可能遮挡后面的物体导致无法被看见,绘制图像时需要利用z坐标来判断前后遮挡关系来觉得那个物体需要绘制,因此保留z坐标是最终图形呈现所必须的参数。

所以正交投影变化起始就是把选择的一个矩形区域缩放平移到标准位置和大小。
知乎这篇文章计算的应该是 opengl 的公式,opengl 的标准位置和大小是 [-1,1]^3。
DirectX3D 正交投影学习记录,directX,正交投影,directX

directX3d 正交投影矩阵

directX3D 的标准位置是 xy 的范围是 [-1,1]^2,z的范围是[0,1],所以 directX3D 的正交投影公式是下面这个。
DirectX3D 正交投影学习记录,directX,正交投影,directX

XMMatrixOrthographicLH 的计算公式和上面也是对应的(directX和oepngl的横纵也是反的,所以需要转置一下)
XMMatrixOrthographicLH 框起来的范围应该是x:(-viewWidth/2, viewWidth/2),y:(-viewHeight/2,viewHeight/2),z:(nearZ, farZ)

float fRange = 1.0f / (FarZ - NearZ);

XMMATRIX M;
M.m[0][0] = 2.0f / ViewWidth;
M.m[0][1] = 0.0f;
M.m[0][2] = 0.0f;
M.m[0][3] = 0.0f;

M.m[1][0] = 0.0f;
M.m[1][1] = 2.0f / ViewHeight;
M.m[1][2] = 0.0f;
M.m[1][3] = 0.0f;

M.m[2][0] = 0.0f;
M.m[2][1] = 0.0f;
M.m[2][2] = fRange;
M.m[2][3] = 0.0f;

M.m[3][0] = 0.0f;
M.m[3][1] = 0.0f;
M.m[3][2] = -fRange * NearZ;
M.m[3][3] = 1.0f;
return M;

参考文献

https://zhuanlan.zhihu.com/p/473031788
https://blog.csdn.net/qq_31910239/article/details/118583533
https://blog.csdn.net/qq_20828983/article/details/82382573文章来源地址https://www.toymoban.com/news/detail-725197.html

到了这里,关于DirectX3D 正交投影学习记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 3d,正交投影,所有面都一种颜色

    !DOCTYPE html html lang=\\\"en\\\" head   meta charset=\\\"UTF-8\\\"   meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge\\\"   meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\"   titleてst/title /head body   !-- canvas:用来展示WebGPU渲染的结果 --   canvas id=\\\"webgpu\\\" width=\\\"500\\\" height=\\\"500\\\"/canvas   translationx:input type=\\\"range

    2024年03月08日
    浏览(31)
  • DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(5/5)镜面反射积分项2及光照合成

    3.5.4、根据 Epic 近似假设进一步拆分积分项为两部分之积   通过之前的步骤,实际上以及得到了我们想要的镜面反射项的蒙特卡洛积分重要性采样的形式,并且根据我们的假设认为视方向等于法线方向,实际上以及可以编码实现这个积分计算过程,而且依据假设我们不再需

    2023年04月08日
    浏览(36)
  • DirectX11 简介+环境配置

    DX11是Win7的产物,它是09年发布的,可谓是非常古老。那么为什么我们还要学习呢?这是为了给下一步的DX12做准备。 如果你是Win10用户,且安装了Windows 10 SDK可以跳至 链接库。此节主要是为了Win7及以下的用户,但我手头只有Win10,只是拿来演示一下,内容大致差不多。 你可以

    2024年02月04日
    浏览(27)
  • DirectX修复工具

    [.dll修复工具] DirectX修复工具最新版:DirectX Repair V4.2 标准版   NEW! 版本号:V4.2.0.40217 大小: 30.7MB/7z格式压缩,101MB/zip格式压缩  ,231MB/解压后 其他版本:增强版  在线修复版 软件类型:免费绿色软件 语言:简体中文/繁体中文/English 软件类型:系统修复/系统增强 DirectX Re

    2024年02月15日
    浏览(22)
  • Android OpenGL ES 学习(四) -- 正交投影

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序 Android OpenG

    2024年02月13日
    浏览(30)
  • 怎么在Windows电脑更新 DirectX ?

    玩游戏的人应该都对DirectX不陌生,它可以提高游戏或多媒体程序的运行效率,增强3d图形和声音效果。但很多人都不知道DirectX该如何更新,这篇文章将以Win10为例,教大家怎么在电脑上更新DirectX。 如果你不确定电脑现在运行的是什么版本的DirectX,可以在更新之前先检查一下

    2024年02月14日
    浏览(25)
  • 游戏找不到DirectX的解决方法

    DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口,是一种应用程序接口(API)。DirectX可以让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来

    2024年02月08日
    浏览(69)
  • ScreenCapture:通过DirectX 库进行屏幕捕获

    具有音频混合功能的 DirectX 硬件屏幕捕获和编码。 H264/H265/VP80/VP90/FLAC/MP3。 以硬件方式捕获视频和屏幕截图。 有很多关于它的东西。 这是一个简单的单头文件,硬件加速。 如果使用 Windows 8 或更高版本,您可以轻松地将其包含在您的项目中。 Windows 8 或更高版本。 我们需要

    2024年02月04日
    浏览(28)
  • 13.1 使用DirectX9绘图引擎

    DirectX 9 是由微软开发的一组多媒体应用程序接口API,用于创建和运行基于Windows平台的多媒体应用程序,尤其是游戏。它是DirectX系列中的一个版本,于2002年发布,是DirectX系列中的一个重要版本,DirectX 9在其发布时引入了许多新的功能和性能优化,成为当时PC游戏开发的主要标

    2024年02月08日
    浏览(31)
  • Windows常用运行库--VC++、DirectX、.NET

    windows系统下,使用一些软件时有时会提醒缺少一些库,例如\\\"xxx.dll\\\",或者时某个\\\"xxx.dll\\\"激活上下文生成失败,找不到从属程序集。 这种情况下,可能是缺少某个运行库,下面是几个常用运行库。 2.1.1 下载源 睿派克论坛(2020年论坛倒了,已停止维护) 果核剥壳: https://www

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包