3D 空间(模型/世界、视图/眼睛、投影)

2024-01-09

这不是一个问题,但我对 3D 空间对应什么感到非常困惑。我习惯于听到模型、视图、投影空间,但在我的工作中他们使用世界、眼睛、投影。我没有意识到世界和眼睛是模型和视图的同义词,因此如果有人对此有任何困惑,我发现以下说明可以帮助您(希望它会对您有所帮助)。

局部空间:这些是在 3Ds Max 或任何其他渲染程序中构成 3D 模型的坐标。它定义 3D 模型本身的顶点空间。

模型/世界空间:将局部空间坐标乘以模型/世界矩阵会将它们带入模型/世界空间。模型/世界空间是我们想象的 3D 世界,没有考虑任何视角。

视野/眼睛空间:将模型/世界空间坐标乘以视图/眼睛矩阵会将它们带入视图/眼睛空间。这是坐标放置在屏幕上的位置,偏离所使用的视角。因此,如果您使用透视投影,这将定位所有坐标,使其看起来有深度。

投影矩阵:将视图/眼睛空间坐标乘以投影矩阵将获取 3D 透视点并将它们正确映射到 2D 视口(也称为屏幕)。

视口/均匀空间:乘以投影矩阵后,您的点需要映射到“真实平面”。这本质上是一种标准化;我们获取每个 x、y、z 坐标并将其除以它的 w 分量。坐标也被调整以将原点从屏幕中心移动到左上角。

请随时提供建设性的批评,我愿意接受任何建议。这是我使用的一些附加信息http://antongerdelan.net/opengl/raycasting.html http://antongerdelan.net/opengl/raycasting.html


只是作为一个想法,但您可以添加最后一个阶段“视口空间”(或类似的东西)。

您在投影矩阵阶段暗示过它,但它是应用于投影矩阵之后的顶点的单独变换,其中 x、y 和 z 坐标除以它们的 w 分量以将它们映射到“真实平面”,从齐次坐标,坐标调整为将原点(0,0)从屏幕中心移动到左上角。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3D 空间(模型/世界、视图/眼睛、投影) 的相关文章

  • 将列表与 R 中的矩阵行进行匹配

    a 是列表 b 是矩阵 a lt list matrix c 0 2 0 1 0 2 0 0 1 0 0 0 0 0 2 2 4 matrix c 0 1 0 0 0 1 1 0 0 0 0 0 3 matrix c 0 0 0 0 2 0
  • 一次性渲染阴影

    考虑到阴影投射的成本 我想知道对于动态定位的静态对象 例如 程序城市 是否有一个功能或可能 实验性的方法可以在 Three js 中仅渲染一次阴影贴图 甚至在 webgl 中 因此 结果可以在静态对象的下一帧中免费使用 仅当物体移动时才会进
  • 光线追踪三角形

    我正在用java编写一个光线追踪器 并且我能够追踪球体 但我相信我追踪三角形的方式有问题 据我了解 这是基本算法 首先确定射线是否与plane三角形已打开 剪裁所有点 使它们与三角形位于同一平面上 因此xy以平面为例 根据沿着新平面向任意方
  • 如何用opengl制作2D地形?

    我想制作一个简单的二维地形 只有一些颠簸和高度变化 我想过只使用随机数来描述某个顶点的高度 但我不知道如何从中制作一个网格 我正在寻找一种方法来查找地形的顶点和索引缓冲区 我该怎么做呢 您可以仅将 GL POLYGON 与所有顶点的列表一起
  • CPU 到 GPU 法线映射

    我正在创建一个地形网格 然后这个答案 https stackoverflow com a 5284527 1356106我正在尝试将 CPU 计算法线迁移到基于着色器的版本 以便通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能
  • Numpy - 两个矩阵的行之间的协方差

    我需要计算两个不同矩阵的每一行之间的协方差 即第一个矩阵的第一行与第二个矩阵的第一行之间的协方差 依此类推 直到两个矩阵的最后一行 我可以在没有 NumPy 的情况下使用下面附加的代码来完成此操作 我的问题是 是否可以避免使用 for 循环
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

    我正在学习有关使用 OpenGL 在 Java 中创建游戏引擎的教程 我正在尝试在屏幕上渲染一个三角形 一切运行良好 我可以更改背景颜色 但三角形不会显示 我还尝试运行作为教程系列的一部分提供的代码 但它仍然不起作用 教程链接 http b
  • QOpenGLFunctions 缺少重要的 OpenGL 函数

    QOpenGLFunctions 似乎缺少重要的函数 例如 glInvalidateFramebuffer 和 glMapBuffer 据我了解 QOpenGLFunctions 加载桌面 OpenGL 函数和 ES 函数的交集 如果是这样
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • 在Python中沿特定轴广播操作

    在Python中 假设我有一个正方形numpy matrix X 尺寸n x n我有一个numpy vector a尺寸的n 很简单 我想执行广播减法X a 但我希望能够指定沿哪个维度 以便我可以指定沿轴 0 或轴 1 进行减法 如何指定轴
  • 自动适合衣服的算法?

    想象一下 客户要求您设计一款软件 以满足一些相当粗略的规格 如下所示 1 它将面向时尚行业营销 2 用户将是 设计衣服和东西 的人 可能有一个特定的术语 但我没有想到 3 由于各种原因 能够快速制作原型设计并查看它们在模型上的外观会很有用
  • 将 R 中的向量按特定顺序转换为下三角矩阵

    我有一个向量 其中元素的顺序很重要 比如说 x lt c 1 2 3 4 我想将我的向量排列成具有特定顺序的下三角矩阵 其中每行包含向量的前一个元素 我的目标是获得以下矩阵 lower diag matrix 1 2 3 4 1 4 0 0
  • OpenGL 着色器不与着色器程序链接

    我正在尝试使用 GLFW GLEW 添加着色器 我收到一个错误 指出着色器已加载 但它们没有有效的对象代码 这是我用于加载着色器的代码 class SHADER public void LoadShaders const char vert
  • lnk1104:无法打开“LIBC.lib”链接

    使用 GLee 将着色器写入我的 OpenGL 项目并编译后 我收到了错误LNK1104 cannot open file LIBC lib 我尝试按照其他人的建议添加它并忽略它 但没有解决问题 有没有其他方法可以解决我错过的这个问题 以下
  • Windows 8 SDK 中的 DirectX

    Summary 是否应该从针对 Windows 8 的应用程序中删除 directX 包含文件 Details 我是 Windows 开发新手 我正在尝试使用 Visual Studio 2012 如果可能 在 Windows 8 上编译
  • 将像素传递给 glTexImage2D() 后会发生什么?

    例如 如果我创建一个像素数组 如下所示 int getPixels int pixels new int 10 pixels 0 1 pixels 1 0 pixels 1 1 etc glTexImage2D getPixels glTe
  • CSS3 矩阵 3d 矩形到梯形的转换

    我正在尝试使用 webkit 对 CSS3 的支持transform matrix3d
  • 为什么在 Windows 上安装预编译版本的 LAPACK 时出现错误?

    我正在尝试使用犰狳矩阵库进行矩阵计算 它需要 BLAS 和 LAPACK Armadillo 文档建议从以下位置获取预编译版本http www stanford edu vkl code libs html http www stanfor
  • 将 mat3 转换为 mat4 的最简单方法

    我提取了 mat4 的左上角 3x3 旋转矩阵 glm mat4 model glm mat3 rot glm mat3 model 现在我想要单位矩阵 左上角是我的新 mat3 最简单的方法是什么 glm mat4 result resu
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A

随机推荐