我强烈建议你研究一些线性代数或矩阵数学用于3d图形.它既有趣又简单,但比SO答案要长一点.我会尝试:)免责声明:我不知道你正在使用的API!

看起来你正在为一个位置返回3个坐标(通常称为顶点).但是你也提到了一个投影矩阵,该函数有4个坐标.通常,着色器或API将为顶点采用4个坐标. X,Y,Z,W上.要在屏幕上显示它们,它会执行以下操作:

xscreen = x/w

yscreen = y/w

zbuffer = z/w

这很有用,因为你可以选择w.如果你只是做2d绘图,你可以把w = 1.但是,如果你正在做3D并想要一些透视效果,你想要除以相机的距离.这就是投影矩阵的用途.它主要取你的点的z,其中z表示与相机的距离并将其置于w中.它也可以扩展一些东西,比如视野.

回顾一下您发布的代码,这正是最后一个ScreenXImpl函数所做的.

它应用一个投影矩阵,它主要只是将z移动到w,然后除以w.最后它做了一个额外的比例并从(-1,1)偏移到(0,widhtinpixels),但我们可以忽略它.

现在,我为什么要谈论这些东西呢?你想要做的就是获得给定的xscreen,yscreen,zbuffer的x,y,z坐标,对吗?好吧,诀窍就是倒退了.为了做到这一点,你需要牢牢抓住前进:)

倒退有两个问题:1)你真的知道或关心zbuffer值吗? 2)你知道投影矩阵是做什么的吗?

1)让我们说我们不在乎.这有很多可能的值,所以我们可能只选择一个.对于2)你将不得不看看它做了什么.一些投影矩阵可能只取(x,y,z,w)和输出(x,y,z,1).那将是2d.或(x,y z,z,1)将是等距的.但从视角来看,它通常会(x,y,1,z).加上一些缩放等等.

我刚注意到你的第二个screenXImpl已经将x,y,z,w传递到下一个阶段.这有时是有用的,但是对于w将为1的所有实际情况.

在这一点上,我意识到我在解释事情上很糟糕. :)你真的应该拿起那本线性代数书,我从这一本书中学到了:http://www.amazon.com/Elementary-Linear-Algebra-Howard-Anton但它带来了一个很好的讲座,所以我不知道它有多么有用.

无论如何!让我们变得更实际.回到你的代码:screenXImpl的最后一个功能.我们现在知道输入w = 1并且ow = ~z和ox = ~x;这里的波浪线意味着一些规模加上一些偏移.我们必须开始的屏幕x是~ox / ow. (1/2,*宽..这是波浪线的意思).现在我们回到1)…如果你想要一个特殊的盎司 – 现在选择一个.否则,我们可以挑选任何.对于渲染,在相机前挑选任何东西并且易于使用可能是有意义的.喜欢1.

protected float screenXImpl(float x, float y, float z, float w==1) {

float ox = 1*x + 0*y + 0*z + 0*w; // == x

float ow = 0*x + 0*y + 1*z + 0*w; // == z == 1

ox /= ow; // == ox

float sx = width * (1 + ox) / 2.0f;

return sx;

}

WTF? sx =宽*(1牛)/ 2?我为什么不这么说呢?好吧,我放在那里的所有零都可能不是零.但它最终会变得如此简单.可能不是那些人.我试图展示你必须做出的重要假设才能回归.现在它应该像从sx回到牛一样容易.

那是困难的部分!但你仍然需要从最后一个功能到第二个功能.我想第一个第二个很容易. :)该函数正在进行线性矩阵变换.这对我们有好处.它需要输入四个值(x,y,z)和(w = 1)隐式输出四个其他值(ax,ay,az,aw).我们可以弄清楚如何手动返回那里!我必须在学校这样做..四个未知数,四个方程式.你知道ax,ay,az,aw …求解x,y,z你得到w = 1是免费的!非常可能和良好的运动,但也很乏味.好消息是这些方程的编写方式称为矩阵. (x,y,z,1)* MODELMATRIX =(ax,ay,az,aw).真的很方便,因为我们可以找到MODELMATRIX ^ -1.它被称为逆!就像1/2是2乘以实数的倒数,或-1是加1的倒数.你真的应该读一下这很有趣而不是很难,顺便说一下:).

无论如何,使用任何标准库来获得模型矩阵的逆.可能类似于modelView.Inverse().然后用它做同样的功能然后你倒退.简单!

现在,为什么我们之前没有对PROJECTION矩阵做同样的事情呢?很高兴你问!那一个需要4个输入(x,y,z,w)并且只吐出三个输出(screenx,screeny,zbufferz).所以没有做出一些假设我们无法解决它!一个直观的方式来看,如果你有一个3d点,你在二维屏幕上投影,那将会有很多可能的解决方案.所以我们必须选择一些东西.而且我们不能使用方便的矩阵逆函数.

如果这有点有帮助,请告诉我.我觉得它不是,但我写得很开心!另外google for unproject in processing给出了这个:http://forum.processing.org/topic/read-3d-positions-gluunproject

java xy,java – 某个z深度的xy位置相关推荐

  1. linux hashmap,Java中对HashMap的深度分析与比较

    Java中对HashMap的深度分析与比较 在Java的世界里,无论类还是各种数据,其结构的处理是整个程序的逻辑以及性能的关键.由于本人接触了一个有关性能与逻辑同时并存的问题,于是就开始研究这方面的问 ...

  2. Java软件研发工程师转行之深度学习(Deep Learning)进阶:手写数字识别+人脸识别+图像中物体分类+视频分类+图像与文字特征+猫狗分类

    本文适合于对机器学习和数据挖掘有所了解,想深入研究深度学习的读者 1.对概率基本概率有所了解 2.具有微积分和线性代数的基本知识 3.有一定的编程基础(Python) Java软件研发工程师转行之深度 ...

  3. 编写计算表达式(X-Y+25)/Z的值得程序,要求将其商和余数分别放在A、B单元中。(设X和Y是32位无符号数,A、B和Z是16位无符号数,不考虑溢出情况。)

    编写计算表达式(X-Y+25)/Z的值得程序,要求将其商和余数分别放在A.B单元中.(设X和Y是32位无符号数,A.B和Z是16位无符号数,不考虑溢出情况.) P151 例4.8 汇编思路:首先在DA ...

  4. 设z=〖(1+xy)〗^y,求 ∂z/∂y

    z=[(1+xy)]^y lnz=yln(1+xy) 两边同时对y求偏导,得 1/z ·∂z/∂y=ln(1+xy)+y·1/(1+xy)· x 1/z ·∂z/∂y=ln(1+xy)+xy/(1+x ...

  5. [Java并发包学习八]深度剖析ConcurrentHashMap

    转载----http://qifuguang.me/2015/09/10/[Java并发包学习八]深度剖析ConcurrentHashMap/ HashMap是非线程安全的,并发情况下使用,可能会导致 ...

  6. Java算法题:Z字形变换

    Java算法题:Z字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行 ...

  7. java中实现对象的深度克隆

    1.什么是深度拷贝和浅拷贝 python中有深度拷贝(也可以叫深度克隆)和浅拷贝,同样在java中很多时候需要深度拷贝对象,所谓的深度拷贝对象指的就是对于对象的所用数据及其全部进行copy一份,变成两 ...

  8. java中对JVM的深度解析、调优工具、垃圾回收

    jdk自带的JVM调优工具 jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工 ...

  9. 一文详解java中对JVM的深度解析、调优工具、垃圾回收

    2019独角兽企业重金招聘Python工程师标准>>> jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以 ...

最新文章

  1. SAP RETAIL 根据Merchandise Category Hierarchy Level查询物料清单
  2. mysql for 语句执行顺序_MySQL查询语句的执行流程
  3. WINKEY功能键你会用吗??
  4. 百练2815 城堡问题
  5. 2017(深圳) .NET技术分享交流会(第二期)网络直播活动
  6. 春秋时期被误解的人才。
  7. 苹果零售业逐步恢复:部分已允许顾客店内试用AirPods
  8. 苹果电脑获取Android Studio的发布版SHA1和开发版SHA1
  9. 关于cocoa 运行时runtime
  10. maya python 游戏与影视编程指南pdf_《Maya Python游戏与影视编程指南》.( [美]Adam Mechtley).[PDF]...
  11. 数字化转型的衡量指标
  12. 俄罗斯的程序员工资高吗?
  13. 计算机视觉论文-2021-11-03
  14. 通俗易懂理解有限状态自动机 FSA 的表示和原理
  15. Python中的三引号''' '''的用法
  16. 二手车交易价格预测——数据分析
  17. CoreData的使用
  18. QNAP-NAS外网访问——aliyun-ddns,docker,myqnapcloud
  19. 计算机网络的局限性的表现,计算机网络系统的脆弱性有哪些表现
  20. ae合成设置快捷键_你知道吗?其实修改AE模板并不困难,只是你没有看到我写的这篇文章而已!...

热门文章

  1. 机器学习和人工智能的初学指南
  2. 为什么简单的删除集合中的元素竟然报错了?
  3. 大湾区网络安全大会开幕在即,五个看点揭秘
  4. 干货!一文看Doris在作业帮实时数仓中的应用实践
  5. 疫情与资本寒冬双重危机下,智领云为何能拿到数千万融资?
  6. 开启企业级市场转型之路 群晖亮出安全“杀手锏”
  7. 年初新立Flag,新华三解决方案部做了点儿啥?
  8. 十位值得关注的Java顶级专家
  9. mi6 android版本,小米6:我依旧是王,MIUI10.4.2稳定版与AndroidP同时到来
  10. 克隆需要验证_[实验技巧]CRISPR实验中如何验证编辑?