图形流水账0:模型坐标与NDC的相互转化

2023-12-07 05:58

本文主要是介绍图形流水账0:模型坐标与NDC的相互转化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

模型坐标转换到NDC
1.模型坐标到世界坐标
2.世界坐标到观察坐标
3.观察坐标到裁剪坐标
4.裁剪坐标透视除法转换为NDC(归一化设备坐标)

透视投影
摄像机
其中:
nearClipPlaneHeight = 2 * Near(摄像机到近裁剪平面的距离)*tan(FOV/2)
farClipPlaneHeight = 2 * Far(摄像机到远裁剪平面的距离)tan(FOV/2)
Aspect = nearClipPlaneWidth/nearClipPlaneHeight = farClipPlaneWidth/farClipPlaneHeight
设当前物体所在观察坐标坐标为V(x,y,-z)则此时所在
视椎体平面的高度:height = (-z)tan(FOV/2)
视椎体平面的宽度:width = Aspect * height = Aspect * (-z)tan(FOV/2)
则当:
-height < y < height => z < y * cot(FOV/2) < -z
-width < x < width => z <( x * cot(FOV/2))/Aspect < -z
near < z < far => z < -z(Far + Near)/(Far - Near) - 2Near
Far/(Far - Near) < -z
以上成立的物体不会被裁剪,则此时的裁剪矩阵为
裁剪矩阵
正交投影
同理可得
此时裁剪坐标P = Mf * V = (x,y,z,V.z)

透视除法
NDC = (x/V.z,y/V.z,z/V.z,1)
当已知NDC求观察坐标V时,设Mf的逆矩阵表示为Mf(逆)则由
T = Mf(逆) * NDC = 1/V.z{Mf(逆) * (x,y,z,1)} = 1/V.z * V
则此时可得T.w = 1/Vz,即V = T/(1/V.z) = T/T.w

参考书籍:Shader入门精要第四章

这篇关于图形流水账0:模型坐标与NDC的相互转化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/464735

相关文章

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首