java xy,java – 某个z深度的xy位置

我强烈建议你研究一些线性代数或矩阵数学用于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django mysql 游标,MySQL Cursor 存储过程之游标与相关循环

简单介绍游标在检索出来的行中,前进或者后退一行或多行,就需要用到所谓的“游标”。游标不是某个SELECT语句,但是它是被该语句检索出来的结果集。几个特点:MySQL游标只能用于存储过程(和函数)。游标是不能滚动的,也就是…

java 8 optional 类,Java8新特性-Optional类

Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。常用方法:Optional.of(T t) : 创建一个 Optional 实例Opt…

java 进度条jsp,jsp进度条_jsp技巧

开始页面:start.jsp状态页面:status.jspJSP进度条setTimeout(“locationstatus.jsp”, 1000);JSP进度条结果: %CELLPADDING0 CELLSPACING2> percent; i - 10) { %> 正在执行完成尚未开始已停止停止页面:stop.jsp业务逻辑bean:TaskBean.javapackage progress;import java.…

覆盖php配置文件,配置 – 用另一个文件覆盖php-fpm池配置值

必须自定义新服务器的php-fpm池配置,我想知道是否有可能/允许/建议有一个新的池文件,该名称在原始文件之后按字母顺序排列,其中只有值覆盖初始配置.原始配置位于/etc/php/7.0/fpm/pool.d,名为www.conf.看来,根据与安装相关的页面,工程师直接修改原件(保存初始值的副本).例如.[w…

子主题function php,php – 带有依赖项的子主题

我正在尝试创建一个儿童主题.父主题有一个style.css和all,我正在查看wp_enqueue_style()函数,它说你可以包含依赖项.这意味着主题自己的style.css可以是活动的,而在我的子主题中,如果我在style.css中指定相同的规则,它应该覆盖它.但依赖是一个句柄数组.我如何找到这些手柄&…

matlab节点导纳阵求逆,关于利用矩阵稀疏技术求解节点导纳矩阵的MATLAB编程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求大神帮忙看看这个程序,解释一下!%形成节点导纳矩阵%考虑参考节点%考虑互感支路function [d_g,d_b,u_g,u_b]calyy(itoi,noels_hgln,noelsnum_hgln,bs_noels,bs_cp,gb_hgln,gb_noels,gb_cp,lv_bs,lv_hgln,lv…

mysql还原txt表的字段结构,mysql 修改表结构(转)

1.增加一个字段(一列)alter table table_name add column column_name type default value; type指该字段的类型,value指该字段的默认值例如:alter table mybook add column publish_house varchar(10) default ;2.更改一个字段名字(也可以改变类型和默认值)alter table tabl…

python操作json字符串,超详细的Python文件操作知识

来自:CSDN,作者:南枝向暖北枝寒MA链接:https://blog.csdn.net/mall_lucy/article/details/104547365【导语】:python进行文件操作,在日常编程中是很常用的。为了方便大家,这里对各种文件操作的知…

php头尾分离,laravel怎么做模板的头尾分离

关注博主,每天分享项目实战经验1.首先找到页面的公共部分,放在layouts这个目录下的home.blade.php2.设置内容区域yield(content)3.在其他页面使用模板引擎,先继承,然后在使用section即可extends(layouts.home)section(content)I a…

oracle11g备份出错,Oracle 11g备份导入12c错误

Oracle 11g备份导入12c错误Oracle11g:用户名:FJCPP 表空间:FYSOFT_DATA01 临时表空间:FYSOFT_DATA01导入:expdp FJCPP/FJCPP DIRECTORYdump_dir DUMPFILEFJCPP_20190717_1517_137.dmp logfileFJCPP_20190717_1517_137.…

matlab数字图像处理课程设计报告,数字图像处理课程设计实验报告.doc

数字图像处理课程设计实验报告数字图像处理课程设计题 目:数字图像处理及Huufman(或小波变换)编码仿真实现学生姓名:学 院:信息工程学院系 别:电子信息工程系专 业:电子信息工程班 级:电子指导教师&#xf…

oracle大于条件,oracle中sql语句中的in的条件数量大于1000有问题

oracle中sql语句中的in的条件数量大于1000有问题oracle中sql语句中select * from t_Test t where t.Id in(1,2,3......)/*数量不能大于1000个*/解决方法 分割成多次in 然后再或上 如 select * from t_Test t where t.Id in(1,2,3......800) or t.Id in(801,802,803......13…

oracle ora-16003,ORA-31600错误分析

作者:guoge[more]今天在对9i数据库做export时,出现如下错误:E:>exp system/manager filebackbill.dmp ownerbackbillExport: Release 9.2.0.4.0 - Production on Thu Nov 18 14:42:11 2004Copyright (c) 1982, 2002, Oracle Corporation. All rights…

探寻FPGA技术的广泛应用与未来前景

目录 1. FPGA的基础 2. FPGA的工作原理 3. FPGA的优势 3.1 灵活性 3.2 快速开发周期 3.3 高性能 4. FPGA的应用领域 4.1 通信系统 4.2 图像处理 4.3 嵌入式系统 4.4 科学研究 5. FPGA的未来展望 1. FPGA的基础 FPGA,即现场可编程门阵列(Fiel…

oracle元数据到ods,将元数据存储到Jackrabbit存储库中

小编典典对于JCR 2.0,上传文件基本上与对于JCR 1.0而言是相同的。但是,JCR 2.0添加了一些有用的附加内置属性定义。“ nt:file”节点类型旨在表示文件,并且在JCR 2.0中具有两个内置属性定义(这两个属性定义都是在创建节点时由存储…

linux 负载命令,通过Linux命令查看系统平均负载的方法

1、Linux系统的平均负载的概念有时候我们会觉得系统响应很慢,但是又找不到原因,这时就要查看平均负载了,看它是否有大量的进程在排队等待。特定时间间隔内运行队列中的平均进程数可以反映系统的繁忙程度,所以我们通常会在自己的网…

linux 进程调度源码分析,Linux调度器源码分析

代码分析根据3.10版本通过对前面的学习我们知道Linux的调度分为两种周期调度 完成周期性算法参数的更新和系统其它实际的检查主调的 真正的调度过程我们现在来看下主调的的代码框架。入口根《调度发生的情况》的学习,我们知道所有的调度最后都会到 schedule 函数中。…

linux修改端口cost值,Linux下通过修改网卡驱动的参数调整Intel网卡的性能

下面列出paramerter中和性能相关的几个以及他们的取值范围和默认值。InterruptThrottleRate范围:100-100000 (0off, 1dynamic)默认:0注:不支持82542, 82543, 82545, 82544芯片RxDescriptors范围:80-256 for 82542 and 82543-based…

Linux跑齿轮命令,【转】glxgears命令

glxgears是一个测试你的Linux是否可以顺利运行2D、3D的测试软件。这个程序弹出一个窗口,里面有三个转动的齿轮,屏幕将显示出每五秒钟转动多少栅,所以这是一个合理的性能测试。窗户是可以缩放的,栅数多少极大程度上依赖于窗口的大小…