x軸z軸代表的方向圖片_游戲中到底是Z軸朝上還是Y軸朝上?

c8f723529e73514ee12e1b4655a109ac.png
本文轉自我的公眾號——游戲開發那些事

在談到游戲世界中的坐標軸時,我們經常會看到這樣的爭論。

“游戲中Y軸是向上的好么?這你都不知道?”
“不對,空間直角坐標系不就是Z軸向上的么?”
“拜托,請搞清楚坐標系再來討論好么?”.....

對于長期接觸Z軸向上的空間直角坐標系的我也存在著同樣的困惑,左右手坐標系已經夠讓人頭大了,為什么連哪個軸向上都不能統一一下?而后當我試圖通過搜索引擎尋找答案時,發現這個問題確實有不少人在討論,也終于搞清楚了其中的緣由。

762cde6e0ce05b73a00da730a10fa80c.png

8905c420c716c4a488a53237258449ec.png

故事可能要從著名的三維建模軟件3DS Max說起。3DS Max是公司AutoDesk第一款建模軟件,它于1990年發布,主要用于設計和建筑領域。

16e76eed47adc8ebbf111fc4addbeadc.png

在建筑學中,通常要先從平面圖開始設計,所以先在2D網格上繪制X軸和Y軸,隨后在將其拉伸成3D模型。很自然的,他們將下一個軸設置向上,即在3DMAX里面向上的便是Z軸(Z-Up)。這種思路與我們在學校時第一次從平面幾何踏入空間幾何的想法完全契合。

e98ab62afd0a0b044f2666ef61850267.png

而在1998年,另一款著名的建模軟件——Maya誕生了。Maya一開始主要作為動畫軟件系統發行,廣泛用于動畫電影當中。

acba225f9a0a9de8f8b2a6f2c38152d0.png

與建筑領域相似,當時的動畫通常也是2D的,即正面看Y軸向上,X軸向右。不過早期的迪士尼和其他動畫作品為了能在不改變2D畫面效果的條件下增加維度(例如2D平臺游戲),保留了X軸和Y軸的朝向,新增的Z軸便成為了深度。當然,這里也有一定程度的歷史原因——由于Maya一開始為SGI的(硅谷圖形公司Silicon Graphics, Inc.)硬件開發,SGI早期提供的渲染引擎就是Y軸向上的,所以Maya就跟隨SGI的標準制定坐標系(Y-Up)。

078deb481e1055decb3094eb27bcdf09.png

其實,造成這種差異的根本原因在于你是在屏幕空間中思考還是在世界空間中進行思考。
在屏幕空間中,給定X和Y的屏幕坐標,將Z作為深度可以方便的處理遮擋問題(即Y-Up)。許多渲染技術(DX、OpenGL)都使用“ Z緩沖區”之類的名稱的來處理屏幕空間渲染(三維空間的渲染最后還是會輸出到屏幕空間)。很明顯,在二維環境中,Y軸向上的坐標系更有意義一些。

1cc00989586905a8714e83873c984100.png

然而在世界空間中,我們通常希望像現實一樣構建三維的世界。正常的三維空間示意圖都將第三個坐標視為垂直方向的(即Z-Up)。要在世界空間中定義一個矩形,則要給出其長、寬、高。如果將Y視為垂直方向,那么就會陷入了一種不符合常識的情況,與我們多年來接觸的笛卡爾坐標系相悖。

6895e754884b441897caa1e35f6afba9.png

當你仔細調查一下目前流行的軟件時,你會發現不同的軟件其坐標系默認都是不一樣的。除了前面提到的兩款三維建模軟件,另外兩款著名的游戲引擎Unity與Unreal也有著不同的坐標系。受到歷史因素的影響,Unreal誕生時3DS Max是當時大多數開發人員選擇的建模工具包(Maya還沒有誕生),所以采用了Z軸向上的左手系坐標。而Unity3D在2000以后才正式發布,采用的則是Y軸朝上左手坐標系。

045bdaeb964dd59d916038e7693dca0c.png

由于標準的不同,導致我們在使用不同游戲引擎以及不同建模軟件交互時需要手動處理坐標系的轉換。而對于那些只接觸過部分軟件的人往往會保留“Z軸向上”或者“Y軸的向上”的固有印象,從而造成了前面提到的爭論現象。無論哪種坐標系,都有其一定的道理,我們理解其中的緣由并能靈活的運用即可。

最后,再幫大家復習一下左手坐標系和右手坐標系(揮動雙手的同時不妨點個贊支持一下)。

7cda5e968f16e4ec65bd8d1c0cd7af70.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273239.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

補發《超級迷宮》站立會議三

那天我給自己的任務是實現控件的控制,但結果明顯很不理想,我僅僅加載了兩個控件(即兩個小人),一個是玩家,另一個是守關者,玩家控制基本實現,通過方向鍵進行控制;但守關者…

mysql003三表查詢.三表查詢.自鏈接查詢

-- 多表查詢 三表查詢 -- 查詢員工的編號,姓名,薪水,部門編號,部門名稱,薪水等級 -- 可以先兩表查詢,在修改成三表查詢 -- 第一行查詢的內容,第二,三行查詢需要的表, -- 和條件…

[轉]jQuery源碼分析系列

文章轉自:jQuery源碼分析系列-Aaron 版本截止到2013.8.24 jQuery官方發布最新的的2.0.3為準 附上每一章的源碼注釋分析 :https://github.com/JsAaron/jQuery 正在編寫的書 - jQuery架構設計與實現 本人在慕課網的教程(完結) jQue…

hook xposed 自定義類_【開始學習React Hook(1)】Hook之useState

react hook是react推出的一種特殊函數。這些函數可以讓你在不創建react class的情況下依然可以使用react的一些特性(諸如目前react的鉤子函數擁有的所有特性)。最常用的hook有useState, useEffect, 日常開發使用這兩個就足夠了。如果再懂點useReduer, us…

mysql004子查詢.相關子查詢.不相關子查詢

子查詢:相關子查詢,不相關子查詢 -- 不相關子查詢 -- 一條SQL語句含有多個select,先執行子查詢,在執行外部查詢。子查詢可以獨立運行,成為不相關子查詢。 -- 需求1:查詢所有比姓名為“CLARK”工資高的員工的信息。 …

文件無刷新上傳(swfUpload與uploadify)

文件無刷新上傳并獲取保存到服務器端的路徑 遇到上傳文件的問題,結合之前用到過的swfUpload,又找了一個無刷新上傳文件的jquery插件uploadify,寫篇博客記錄一下分別介紹這兩個插件的實現方法 swfUpload 導入swfUpload的開發包 添加js引用&am…

ediplus 復制編輯一列_vi編輯器的使用詳解

一個編輯器具備的功能一個編輯器(例如Windows中的記事本)具備的功能:打開文件、新建文件、保存文件光標移動文本編輯(多行間|多列間)復制、粘貼、刪除查找和替換vi編輯器的環境設置為了更方便的使用vi編輯器,我們需要先對vi編輯器進行一些配置。打開虛擬…

myjdbc鏈接數據庫.增刪改查

-- 創建user表 CREATE TABLE user( uid int PRIMARY KEY auto_increment, uname VARCHAR(55), pwd VARCHAR(55), realName VARCHAR(55) ) SELECT * FROM user; Jdbc增刪改查 package myjdbc; import java.sql.Connection; import java.sql.DriverManager; import java.…

JAVA中通過時間格式來生成唯一的文件名

有時候我們需要截圖,在要截圖時,有人用到了時間格式,但是時間格式中的:在文件名稱中是不被允許的字符,所以就會報錯,如何生成唯一的時間文件名: package com.demo;import java.text.ParseException; import…

python返回字符串長度的函數_Python如何查找字符串的長度?(代碼示例)

在Python中字符串是Unicode代碼點的不可變序列。給定一個字符串,我們如何查找它的長度?本篇文章就來給大家介紹在Python中查找字符串長度的四種方法,希望對大家有所幫助。【相關視頻教程推薦:Python視頻教程】方法一:使…

K-means算法和矢量量化

語音信號的數字處理課程作業——矢量量化。這里采用了K-means算法,即假設量化種類是已知的,當然也可以采用LBG算法等,不過K-means比較簡單。矢量是二維的,可以在平面上清楚的表示出來。 1. 算法描述 本次實驗選擇了K-means算法對數…

docker 主進程 日志_運維筆記--docker高效查看后臺日志

場景描述:應用程序運行在 Docker環境中,經常使用的查看后臺日志的命令是:docker attach 容器名該命令優點:實時輸出;不足之處:日志大量輸出的時候,屏幕一閃而過,不便于調試&#xff…

jdbc.properties文件

drivercom.mysql.cj.jdbc.Driver (//主機:端口號、數據庫名)urljdbc:mysql://localhost:3306/mydb?useSSLfalse&useUnicodetrue&characterEncodingutf8&serverTimezoneAsia/Shanghaiusername(鏈接的用戶)passwd(密碼)

ifix如何設畫面大小_如何讓你的視頻又小又清晰?視頻編碼輸出軟件來了

如何讓視頻保持清晰同時又讓其體積盡可能的小?這是很多小伙伴們都很頭疼的問題而且很多時候我們需要會在微信或者朋友圈等社交平臺上傳我們的作品但它們對視頻大小有著比較嚴格的控制所以蜜蜂菌就為大家帶來了視頻壓縮神器小丸工具箱幫助你輕松壓縮出又小又清晰的視…

智能集群理論優化控制_探索群體智能的奧妙——ROB-MAS多智能體協作

人類對未知領域總是充滿好奇和敬畏。因為好奇,所以不斷探索,因為敬畏,所以小心謹慎。談到人工智能,已經不僅僅是停留在智能手機、家用電器這個層次,要知道,人工智能的作用,不僅僅是為了方便生活…

mybatis.xml文件

mybatis.xml <?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>&l…

note同步不及時 one_朱海舟回應錘子便簽同步不及時:工程師已經解決

集微網消息(文/數碼控)&#xff0c;有不少網友反映自己用的錘子便簽沒法及時同步數據&#xff0c;對此錘子科技產品經理朱海舟回應稱工程師已經把該問題解決&#xff0c;用戶只需更新APP即可。至于部分安卓用戶無法同步錘子便簽數據的問題&#xff0c;也很好解決&#xff0c;只…

NEC學習 ---- 模塊 - 帶點文字鏈接列表

帶點文字鏈接列表, 實現的效果是, 調整字體大小, 點的位置不會跟著變動. HTML如下: <div class"container"><div class"m-list2"><ul><li><i class"dot"></i><a href"#">帶點文字鏈接列表…

shell復習筆記----命令與參數

shell最基本的工作就是執行命令. 每鍵入一道命令, shell 就會執行. $cd work;ls -l whizprog.c 首先:格式很簡單,以空白(Space 鍵或者 Tab鍵)隔開命令行中的各個組成部分. 其次,命令名稱是命令行的第一個項目.通常后面會跟著選項(option),任何額外的參數(argument)都會放在選項…

enkey java_近期的Java項目(前端)

1.項目名&#xff1a;欄目選擇框(前端)2.項目源碼--話不多說&#xff0c;直接附上源碼吧&#xff0c;感受會更直觀一些package java項目;import java.awt.BorderLayout;import java.awt.Container;import java.awt.FlowLayout;import javax.swing.ButtonGroup;import javax.swi…