当前位置: 首页 > news >正文

.net做网站用什么技术可视化编程软件

.net做网站用什么技术,可视化编程软件,江西网络推广外包,浦东网站开发培训班这里介绍一个小TIPS#xff0c;很久没有这么有成就感了。我以前在学3D数学的时候#xff0c;书上就有一句话#xff0c;说你把矢量这些东西用久了#xff0c;就应该形成一种“直觉”#xff0c;仿佛这些东西就是你的左右手一样。而这次#xff0c;我居然真的用“直觉”来…这里介绍一个小TIPS很久没有这么有成就感了。我以前在学3D数学的时候书上就有一句话说你把矢量这些东西用久了就应该形成一种“直觉”仿佛这些东西就是你的左右手一样。而这次我居然真的用“直觉”来解决问题了可以说是“瞎猫碰到死耗子”式的解决问题方法 一问题起因 我现在在写的是一个软件光栅化的引擎。在软件光栅化的阶段有两个地方可以进行光照渲染一个是在世界空间下进行一个是在相机空间下进行。在世界空间下进行会很方便因为光照并不涉及旋转而只是涉及平移。但是因为矩阵乘法可以结合所以从物体空间变换到世界空间再变换到相机空间这两个矩阵可以合二为一因为我是写软件光栅化所以节约一些算力是有必要的。 二矢量旋转的问题 我有一个平行光。平行光是没有距离的只有方向这个方向用一个矢量像Vector3(1,1,1)这样。但在旋转中有两个问题 1、矢量的旋转不像点的旋转。顶点是可以通过矩阵进行旋转的但是矢量不行。虽然在数学上矢量和点都是等价的。但是因为旋转属于非线性变换所以最终在数学上的结果归一化之后这个矢量方向其实不是你想要的矢量。 2、从世界空间到相机空间的旋转其实是一个旋转的逆运算。也就是说相机的Rotation不是将世界空间按这个Rotation旋转而是要做逆旋转。 三解决的过程 当时我想了一些歪门邪道。开始的时候我尝试用两个点记录位置。比如将矢量转化为P1和P2。然后使用这P1和P2进行相机旋转因为P1和P2就是两个点点旋转之后之间的位置关系是不变的。在旋转之后再取这两个点计算矢量方向。理论上应该可行但不知道为什么失败了。 后来我将角度反转然后进行四元数的矢量旋转乘法四元数的矢量乘法公式如下 V要变换的矢量要进行齐次变化W设置为0Q旋转的四元数Q-1四元数的逆 V Q * V * (Q-1) 没到想居然成功了。这样得到的矢量居然是可以用的。光照计算没有问题。但是为什么我说瞎猫碰到死耗子因为在我的变换矩阵中有一个BUG。相机变换矩阵是按照XYZ三个轴进行变换的。我使用的是Unity的规则按照Z-X-YRoll-Pitch-Yaw的顺序变换。我在写相机变换矩阵的时候也是这么写的。但是我忘记了相机变换是一个逆变换其实应该写成Y-X-Z变换的。其实先后顺序只是规则的问题你怎么写实际变换上也不会出错。所以我一开始没看出这个BUG。 但是后来我在进行相机的旋转控制的时候我发现我的旋转控制有问题在进行了Yaw的旋转之后再使用Pitch会沿Y轴旋转而不是在地平线旋转。虽然在数学上这没有问题但做为玩家控制来说有大问题。这也是为什么Unity使用Z-X-Y旋转顺序的原因。 然后查出BUG之后才知道是我的旋转搞错了。我就把旋转改了。但这样一改原来那个我将角度反转之后再利用四元数旋转的方法就失灵了得到的是一个错误的结果。 四解决方法 这里就是靠“直觉”解决问题了。如果将角度反转没有作用那么将四元数的运算反转呢这是一个突发奇想我在教程书里面都没有见过这种说法所以我说“瞎猫碰到死耗子”当然这应该也有其它书里面说只是我没看到而已。但总之这个思路解决了问题。只需要将四元数旋转的运算改变就能够得到一个能成功变换到相机空间的矢量 使用逆运算公式V (Q-1) * V * Q // 旋转矢量 Vector3 RotateDirection(Vector direction, Quaternion rotation) {Quaternion re(rotation.GetEular());Vector3 transDirection re.RotateMulInverse(direction);return transDirection.Normalize(); }// 求四元数的逆 Quaternion Quaternion::GetInverse(void) const {// 这是四元数的长度// 因为四元数长度始终是单位1所以其实这一步可以省只要你确保它没发生蠕变float len Magnitude(); return Quaternion(-x / len, -y / len, -z / len, w / len); }// 四元数的乘法正常 Vector3 Quaternion::RotateMul(const Vector3 v) const {Quaternion vq(v.x, v.y, v.z, 0.0);Quaternion r *this * vq * this-GetInverse();return Vector3(r.x, r.y, r.z); }// 四元数的乘法逆向 Vector3 Quaternion::RotateMulInverse(const Vector3 v) const {Quaternion vq(v.x, v.y, v.z, 0.0);Quaternion r this-GetInverse() * vq * (*this);return Vector3(r.x, r.y, r.z); } OK。以上就是解决方案了。
http://www.hkea.cn/news/14478531/

相关文章:

  • 做直播网站收费吗中山精品网站建设策划
  • 网站开发服务商类似站酷的设计类网站
  • vs2013做简单的网站营销网络分布情况
  • 如何给一个公司做网站wordpress时间函数
  • 企业网站的结构以及内容.制作wordpress
  • 响应式网站例子西安模板建站公司
  • 巴西网站建设海外域名平台
  • 淄博网站建设给力臻动传媒揭阳专业的网站建设价格
  • 建设招标网是什么网站泰安网站建设广告
  • 我的网站为什么打不开怎么回事wordpress作者
  • 安阳市网站建设的公司网站开发赚钱吗
  • 网站模板红黑wordpress如何发邮件
  • 网站提交搜索引擎网站建设网络门户
  • 博客网站建设html静态网页源代码
  • 吉林省电力建设总公司网站东莞网站优化东莞seo最专业的东莞网络公司小红孩营销
  • 我想开个网站平台怎么开呢展示型网站设计案例
  • 上饶公司网站建设做的网站很卡是什么原因
  • 电子商务网站的重要性网站后台会员管理
  • 政务网站开发合同网店卖什么最赚钱
  • 济南网站设计报价网站建设服务器如何选择
  • 简单的企业网站网站演示代码
  • 找网站公司做网站用了织梦可以吗wordpress修改样式表
  • 做网站的像素是多少网站建设 壹起航
  • 服务行业网站建设做网站知乎
  • 做搜狗网站排名软件仿站WordPress
  • 丰台网站关键词优化做网站网页文件
  • 网站为什么要续费指数函数求导公式
  • 手机网站制作吧wordpress php5.4
  • 网站域名提交近期网络舆情热点事件
  • 国税网站模板最近中美关系最新消息