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

网站仿制wordpress做ftp

网站仿制,wordpress做ftp,外贸网站设计多少钱,星光影视园网站建设案例文章目录 前言一、观察空间矩阵推导1、求观察空间基向量2、求观察空间的基向量在世界空间中的矩阵 的 逆矩阵2、求平移变换矩阵3、相乘得出 观察空间转化矩阵4、得到顶点的世界空间坐标,然后转化到观察空间5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕 二、最终效…

文章目录

  • 前言
  • 一、观察空间矩阵推导
    • 1、求观察空间基向量
    • 2、求观察空间的基向量在世界空间中的矩阵 的 逆矩阵
    • 2、求平移变换矩阵
    • 3、相乘得出 观察空间转化矩阵
    • 4、得到顶点的世界空间坐标,然后转化到观察空间
    • 5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕
  • 二、最终效果
    • 1、这是我们用默认Shader,在该摄像机坐标下的游戏界面
    • 2、使用我们的Shader,并且给我们的ViewPos赋值为摄像机坐标
    • 3、最终代码


前言

在上篇文章中,我们是实现了Shader中的观察空间推导。

  • Unity中Shader观察空间推导

我们在这篇文章中,根据上篇文章的推导,在Shader中实现观察空间矩阵的推导。


一、观察空间矩阵推导

  • Pview = [Wview] * Pworld

  • Pview = [Vworld]-1 * Pworld

  • Pview = [Vworld]T * Pworld

  • 在属性面板定义测试使用到的 摄像机坐标 和 测试顶点坐标

_ViewPos(“View Pos”,vector) = (0,0,0,0)
_ViewTarget(“View Target”,vector) = (0,0,0,0)

1、求观察空间基向量

  • Z坐标轴基向量

float3 ViewZ = normalize(_ViewPos - _ViewTarget);

  • 假设Y坐标轴基向量为(0,1,0)

float3 ViewY = float3(0,1,0);

  • 求 X 坐标基向量

float3 ViewX = cross(ViewZ,ViewY);

  • 求 Y 坐标基向量

ViewY = cross(ViewX,ViewZ);

2、求观察空间的基向量在世界空间中的矩阵 的 逆矩阵

在这里插入图片描述

float4x4 M_viewTemp = float4x4
(
ViewX.x,ViewX.y,ViewX.z,0,
ViewY.x,ViewY.y,ViewY.z,0,
ViewZ.x,ViewZ.y,ViewZ.z,0,
0,0,0,1
);

2、求平移变换矩阵

1 0 0 − T x 0 1 0 − T y 0 0 1 − T z 0 0 0 1 \begin{matrix} 1&0&0&-T~x~\\ 0&1&0&-T~y~\\ 0&0&1&-T~z~\\ 0&0&0&1\\ \end{matrix} 100001000010T x T y T z 1

float4x4 M_viewTranslate = float4x4
(
1,0,0,-_ViewPos.x,
0,1,0,-_ViewPos.y,
0,0,1,-_ViewPos.z,
0,0,0,1
);

3、相乘得出 观察空间转化矩阵

float4x4 M_view = mul(M_viewTemp,M_viewTranslate);

4、得到顶点的世界空间坐标,然后转化到观察空间

float3 vertexWS = TransformObjectToWorld(v.vertexOS);
float3 vertexVS = mul(M_view,float4(vertexWS,1));

5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕

o.vertexCS = TransformWViewToHClip(vertexVS);


二、最终效果

1、这是我们用默认Shader,在该摄像机坐标下的游戏界面

在这里插入图片描述

2、使用我们的Shader,并且给我们的ViewPos赋值为摄像机坐标

请添加图片描述

3、最终代码

//平移变换
//缩放变换
//旋转变换(四维)
Shader "MyShader/URP/P3_6_5"
{Properties{_Translate("Translate(XYZ)",Vector) = (0,0,0,0)_Scale("Scale(XYZ)",Vector)= (1,1,1,1)_Rotation("Rotation(XYZ)",Vector) = (0,0,0,0)[Header(View)]_ViewPos("View Pos",vector) = (0,0,0,0)_ViewTarget("View Target",vector) = (0,0,0,0)}SubShader{Tags{"PenderPipeline"="UniversalPipeline""RenderType"="Opaque""Queue"="Geometry"}Pass{HLSLPROGRAM#pragma vertex vert#pragma fragment frag#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"struct Attribute{float4 vertexOS : POSITION;};struct Varying{float4 vertexCS : SV_POSITION;};CBUFFER_START(UnityPerMaterial)float4 _Translate;float4 _Scale;float4 _Rotation;float4 _ViewPos;float4 _ViewTarget;CBUFFER_ENDVarying vert (Attribute v){Varying o;//平移变换float4x4 M_Translate = float4x4(1,0,0,_Translate.x,0,1,0,_Translate.y,0,0,1,_Translate.z,0,0,0,1);v.vertexOS = mul(M_Translate,v.vertexOS);//缩放交换float4x4 M_Scale = float4x4(_Scale.x,0,0,0,0,_Scale.y,0,0,0,0,_Scale.z,0,0,0,0,1);v.vertexOS = mul(M_Scale,v.vertexOS);//旋转变换float4x4 M_rotateX = float4x4(1,0,0,0,0,cos(_Rotation.x),sin(_Rotation.x),0,0,-sin(_Rotation.x),cos(_Rotation.x),0,0,0,0,1);float4x4 M_rotateY = float4x4(cos(_Rotation.y),0,sin(_Rotation.y),0,0,1,0,0,-sin(_Rotation.y),0,cos(_Rotation.y),0,0,0,0,1);float4x4 M_rotateZ = float4x4(cos(_Rotation.z),sin(_Rotation.z),0,0,-sin(_Rotation.z),cos(_Rotation.z),0,0,0,0,1,0,0,0,0,1);v.vertexOS = mul(M_rotateX,v.vertexOS);v.vertexOS = mul(M_rotateY,v.vertexOS);v.vertexOS = mul(M_rotateZ,v.vertexOS);//观察空间矩阵推导//P_view = [W_view] * P_world//P_view = [V_world]^-1 * P_world//P_view = [V_world]^T * P_worldfloat3 ViewZ = normalize(_ViewPos - _ViewTarget);float3 ViewY = float3(0,1,0);float3 ViewX = cross(ViewZ,ViewY);ViewY = cross(ViewX,ViewZ);float4x4 M_viewTemp = float4x4(ViewX.x,ViewX.y,ViewX.z,0,ViewY.x,ViewY.y,ViewY.z,0,ViewZ.x,ViewZ.y,ViewZ.z,0,0,0,0,1);float4x4 M_viewTranslate = float4x4(1,0,0,-_ViewPos.x,0,1,0,-_ViewPos.y,0,0,1,-_ViewPos.z,0,0,0,1);float4x4 M_view = mul(M_viewTemp,M_viewTranslate);float3 vertexWS = TransformObjectToWorld(v.vertexOS);float3 vertexVS = mul(M_view,float4(vertexWS,1));o.vertexCS = TransformWViewToHClip(vertexVS);//o.vertexCS = TransformObjectToHClip(v.vertexOS.xyz);return o;}half4 frag (Varying i) : SV_Target{return 1;}ENDHLSL}}
}
http://www.yayakq.cn/news/789544/

相关文章:

  • 简单描述一下网站制作的流程自动升级wordpress失败 —— 请再试一次.
  • html用表格做网站网站创建多少年了
  • 嘉兴网站建设一薇html教程 it教程网
  • 郑州做网站制作的公司南京师范大学课程建设网站
  • 比较有名的设计网站做暧电影在线观看网站
  • 男女做某事网站免费网站软件下载安装
  • 制作app免费网站模板我的qq中心手机版登录入口
  • 嘉兴网站建设科技有限公司asp网站仿制
  • 哪个网站做h5比较好涂料做哪个网站好
  • 深一互联网站建设怎样基于html的网站设计
  • 网页制作网站首页设计wordpress打开html
  • 系统优化的影响因素seo赚钱
  • 做视频上传多少个网站百度网页推广费用
  • 完全菜鸟七天学会建网站wordpress 加载排版
  • 漂亮网站欣赏格拉苏蒂手表网站
  • 做竞价网站服务器多少钱ip域名查询地址
  • 网站开发人员主要干什么的安装完成wordpress后如何使用
  • 济宁房产网站建设银川网站建设哪家好叫啥名字
  • 企业网站用什么套站百度商城官网首页
  • 制作天下网站wordpress备份文件
  • 购物网站开发一般使用什么语言docker运行wordpress
  • 快速优化网站建设中国电子网
  • 潍坊住房和城乡建设局招标网站网站备案换接入商
  • 做网页设计卖钱的网站深圳建设网站推荐
  • 网站 申请建设教育工程网站
  • 流行用什么做网站玩游戏的网页
  • 优化企业门户网站网页浏览器软件有哪些
  • 专门做衬衣网站wordpress php调优
  • 房地产建设企业网站国外app推广平台有哪些
  • 网站建设深圳给原码获取网页 代码 做网站