首页 > 其他分享 >第三章:多个坐标空间

第三章:多个坐标空间

时间:2023-10-22 11:46:24浏览次数:39  
标签:第三章 多个 对象 矢量 坐标 bmatrix 空间 vec

第三章:多个坐标空间

本章提供一些用于图形和游戏的常用坐标空间示例,然后我们将讨论坐标空间如何嵌套在其他坐标空间中。

1. 为什么需要多个坐标空间

从理论上讲,所有点都可以使用单个“世界”坐标系来表达。但有些信息是有意义的或仅在特定上下文环境中可用(表述有点怪,但能理解意思就行),为此开发人员需要不同的坐标空间。

2. 一些有用的坐标空间

下面来看看一些常见坐标空间。

  1. 世界空间,也称为全局坐标空间或通用坐标空间。它为所有其他要指定的坐标系建立了一个“全局”参考系。
  2. 对象空间,也称为模型空间或体空间,是与特定对象关联的坐标空间。每个对象都有自己独立的对象空间。当一个对象移动或改变方向时,它也会随之移动或改变方向。
  3. 相机空间,是对象空间的一个特例,其是与用于渲染视点相关联的对象空间。
    img
  4. 直立空间,本书提出的一个坐标空间,对象的直立空间可以看作是世界空间与其对象空间的“中间过渡”。
    img
    img

3. 基矢量和坐标空间转换

我们知道如何在一个坐标空间中表达一个点,我们需要在其他坐标空间中表达这个点。该计算的技术术语是坐标空间转换。在转换的过程中点的实际位置是没有变化的。
任意矢量\(\vec{v}\)可以扩展为基矢量的线性组合:

\[\vec{v}=x\vec{p}+y\vec{q}+z\vec{r} \]

在这里\(\vec{p}\)、\(\vec{q}\)和\(\vec{r}\)是三维空间的基矢量。如果不太明白的话,就请想象:\(\vec{p}=\begin{bmatrix}1,0,0\end{bmatrix}\)、\(\vec{q}=\begin{bmatrix}0,1,0\end{bmatrix}\)和\(\vec{r}=\begin{bmatrix}0,0,1\end{bmatrix}\),是否想到了什么?这正是笛卡尔三维坐标系的三个相互垂直的轴向单位向量,它也算是一个基矢量,而且一组相互垂直的基矢量也被称为正交基
上述情况是常见的,但基矢量不必保证垂直。这种情况下进行点积,就不能像上一章那样,通过与基矢量的点积来分解一个矢量了(因为此时坐标不是解耦的,当你试图只增加\(\vec{a_x}\)时,会发现\(\vec{a_y}\)也会变化)。
img
可以表示为基矢量的线性组合的矢量集被称为基矢量的跨度,上图所示的基向量的跨度是无限的二维平面,如果是三维向量的话(只要基向量没有平行,或者专业点叫线性相关)跨度就是三维空间内的任意平面。
用于描述基所跨越的空间的维数的术语是基的。跨越的维数与基矢量的元素数相同,就叫满秩。比如先前介绍的基矢量就是满秩的。如果有一组\(\vec{p}=\begin{bmatrix}1,0\end{bmatrix}\)、\(\vec{q}=\begin{bmatrix}-1,0\end{bmatrix}\),那它的秩是1<元素数2,非满秩。

4. 嵌套坐标空间

将对象分成具有嵌套坐标空间的分层组织的对象序列,程序员可以在单独的分量中计算运动,并相对容易地与线性代数工具结合。比如,我们像知道某只羊耳朵的世界坐标,就可先计算它身体所在的世界坐标,再计算它耳朵所在的体空间下的坐标。然后一“结合”,就可以得到想要的结果(“结合”过程就是以后要学习的内容了)。

5. 针对直立空间的再解释

也许你仍不打算区分世界空间和直立空间(我曾经也,那请假设一个情况,有一个float3数据类型,它既用来存储“点”,又用来存储“矢量”(这种情况在游戏行业的代码中很常见,因为很多高级着色器语言鼓励使用泛型float3类型)。
如果,有一个float3表示某物体在对象空间下的位置,我们想知道它在世界空间下的位置,要进行这个转换,我们势必会对它进行平移;而如果有一个float3表示某物体的正面朝向,我们想知道它在世界空间下的方向,那这个转换过程就不应该包含平移(矢量是没有位置的)。
也就是说,有些float3数据应该发生平移,而有些不行,但当它们写成代码时就不好区分了。所以为了让代码更易于理解和编写,这本书自创了直立空间,将它与“世界空间”区分开,这样可以更好的表达矢量在转换过程中的数学细节。

标签:第三章,多个,对象,矢量,坐标,bmatrix,空间,vec
From: https://www.cnblogs.com/OwlCat/p/17779870.html

相关文章

  • 20211128《信息安全系统设计与实现》第三章学习笔记
    一、任务内容自学教材第10章,提交学习笔记(10分)1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分) “我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:“请你以苏......
  • 已知两点坐标和角度,求圆心的计算 附c#
    本来想简单拿来主义,找一个结果找了半天没有拿来使用的,使用chartGPT试试,可能使用的是3.5版本,漏洞百出,过程完全不对,就只有自己去思考了。1.先使用CAD画了一个样图,如下: 2.计算思路如下:a)利用正弦原理求出半径长度,b)根据勾股定理计算斜边长度c) 最后计算圆心X,Y位置3.c# 代......
  • 学习笔记6(第三章)
    一、知识点归纳(一)知识点内容教材学习内容总结本章主要讨论Unix/Linux中的进程管理。讲述了多任务处理,以及进程的相关知识:进程的概念;进程创建、终止。还讲到了Unix/Linux进程管理的系统调用:fork()wait()exec()exit()第一节:多任务处理在计算机技术中,多任务处理指的是同时执......
  • C++ 使用EPSG进行坐标转换
    场景将WGS84坐标转换为CGCS2000坐标使用epsg.io网站的坐标系转换功能可以检查转换结果是否正确下面网址是示例代码https://epsg.io/transform#s_srs=4326&t_srs=4538&x=88.0000000&y=47.0000000转换示例代码projver.9.2.0安装proj库,使用vcpkg(vcpkginstallproj:x64-wind......
  • 第三章 Unix/Linux进程管理
    #第三章Unix/Linux进程管理##多任务处理Unix/Linux中的多任务处理是指通过操作系统的调度机制,使多个进程可以同时运行,互不影响,并共享计算机系统的资源。这样可以提高系统的效率和利用率。1.进程状态:进程可以处于运行(Running)、就绪(Ready)、等待(Blocked)等不同的状态,调度器根......
  • 第一章:笛卡尔坐标系
    第一章:笛卡尔坐标系1.一维数学在进入三维的学习之前,先厘清一些关于数字系统和计数的问题。自然数,又称计数数字。是几千年前发明的,可能是为了跟踪记录死羊(本书作者的神奇脑洞),也是数学的萌芽。将绵羊排成一排以便计数的习惯进而导致了数字排队的概念。负债概念的出现导致了负......
  • 《Unix/Linux系统编程》教材学习笔记第三章
    chapter3多任务处理一般来说,多任务处理指的是同时进行几项独立活动的能力。在计算机技术中,多任务处理指的是同时执行几个独立的任务。在单处理器(单CPU)系统中,一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到......
  • C++函数如何具有多个返回值?
      本文介绍在C++语言中,使用一个函数,并返回两个及以上、同类型或不同类型的返回值的具体方法。  对于C++语言而言,其不能像Python等语言一样在一个函数中返回多个返回值;但是我们也会经常遇到需要返回两个甚至更多个值的需求。针对这种情况,我们可以通过pair、tuple(元组)等数据结......
  • Unix/Linux系统编程自学笔记-第三章:Unix/Linux进程管理
    Unix/Linux系统编程自学笔记-第三章:Unix/Linux进程管理1、概念介绍多任务处理计算机技术概念中的多任务处理指的是同时执行若干独立任务。无论是在多处理机系统还是单处理机系统都可以实现多任务处理。对于单处理机系统,多任务处理的实现依靠着多路复用技术,通过上下文的快速......
  • makefile学习记录 :一个工程里有多个makefile 如何make根目录下的makefile 调用子目录
    注:本文个人学习记录目的:一个工程里有多个makefile如何make根目录下的makefile调用子目录下的makefile,编译所有.c文件如图所示目录结构,根目录server:makefile;子目录so:makefile  根目录makefile:GCC=gccAPP=server ALL_C=$(wildcard./*.c)C_OBJ=$(notdir$......