Catlike Coding网站文章解析 -- 1.Procedural Grid

news/2024/5/20 5:11:20/文章来源:https://blog.csdn.net/yinfourever/article/details/89474068

原文英文版链接https://catlikecoding.com/unity/tutorials/procedural-grid/,里面有每一部分的untiy工程链接,文章内容也更详实。

本章内容:

  • 创建一系列点
  • 使用协程实现他们的摆放位置
  • 定义一个由三角形组成的平面
  • 自动生成法线
  • 添加纹理坐标和切线

1.渲染啥

你如果想在unity中看见什么东西,那你肯定需要一个mesh。它可能是一个由其他软件导出的3D模型或者是程序化生成的mesh。它可能是一个sprite,UI元素或者粒子特效,总之在unity里你想看到点东西你就得用mesh去渲染。

所以mesh是个啥?从概念上讲,一个mesh是图形硬件用于渲染复杂东西的一系列数据组合,它至少包括顶点的集合以及一系列三角形。三角形是最基本的2d图形,它连接了三个点,无论mesh是什么样,都是这些三角形组成了每个平面。

三角形平坦且边缘直,可以完美的展示平坦平直的东西,比如一个立方体的面。带弧度或者凹进去的平面只能通过大量小三角形近似模拟。如果这些小三角形足够小,小于一个像素,那你对这种近似就没有感知。但是对于实时的渲染不太可行,这些平面(圆弧的面)在某些角度看上去会有锯齿。

                                              Unity's default capsule, cube, and sphere, shaded vs. wireframe 

 在unity中渲染3D物体需要两个组件mesh filter 和 mesh rendere,filter指向你想要渲染的mesh(渲染what),renderer定义如何渲染(how 怎么渲染)。

 

提供一个albedo颜色贴图可以是最简单便捷的方式使得mesh渲染时富有细节。通过UV坐标,可以实现贴图的采样从而进行渲染。

2.创建一系列顶点

 如何创建自己的mesh?

  创建C#Grid类

using UnityEngine;
using System.Collections;
public class Grid : MonoBehaviour {public int xSize, ySize;
}

自动添加所需的component

[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class Grid : MonoBehaviour {public int xSize, ySize;
}

Awake方法里调用Genrate函数

private void Awake () {Generate();}

由下图所示,对于大小横向为x纵向为y的grid,实际需要的顶点数量是 (x+1) * (y+1)

 创建顶点数组并赋予其每个点位置

private void Generate () {vertices = new Vector3[(xSize + 1) * (ySize + 1)];for (int i = 0, y = 0; y <= ySize; y++) {for (int x = 0; x <= xSize; x++, i++) {vertices[i] = new Vector3(x, y);}}}

Gizmos调试

	private void OnDrawGizmos () {Gizmos.color = Color.black;for (int i = 0; i < vertices.Length; i++) {Gizmos.DrawSphere(vertices[i], 0.1f);}}

Gizmos的效果(x = 10 y = 5)

3.创建Mesh 

 之后需要为mesh设置三角形片元,这里设置的值其实是之前顶点数组的索引,也就是数组的下标。

 上边这么设置三个点,是啥也看不到的,因为这三个点在一条线上,无法组成三角形

triangles[0] = 0;
triangles[1] = 1;
triangles[2] = xSize + 1;

这么设置组成了三角形,但是也看不到,这是因为这个顺序是逆时针顺序,会被判定为背面,渲染时会被剃除

顺时针是正面,逆时针是反面

按如下设置,我们将会得到第一个三角形

		                          triangles[0] = 0;triangles[1] = xSize + 1;triangles[2] = 1;

有了第一个三角形后,我们可以绘制两个三角形拼成一个正方形

之后我们就可以生成每一行,完整代码如下 

private void Awake () {Generate();}private void Generate () {GetComponent<MeshFilter>().mesh = mesh = new Mesh();mesh.name = "Procedural Grid";vertices = new Vector3[(xSize + 1) * (ySize + 1)];for (int i = 0, y = 0; y <= ySize; y++) {for (int x = 0; x <= xSize; x++, i++) {vertices[i] = new Vector3(x, y);}}mesh.vertices = vertices;int[] triangles = new int[xSize * ySize * 6];for (int ti = 0, vi = 0, y = 0; y < ySize; y++, vi++) {for (int x = 0; x < xSize; x++, ti += 6, vi++) {triangles[ti] = vi;triangles[ti + 3] = triangles[ti + 2] = vi + 1;triangles[ti + 4] = triangles[ti + 1] = vi + xSize + 1;triangles[ti + 5] = vi + xSize + 2;}}mesh.triangles = triangles;}

最后效果如下:

 

4.生成其他顶点数据

法线

我们还没有给我们生成的mesh赋予法线,默认的法线方向是(0,0,1),这并不是我们想要的。

每个Vertex(顶点)都需要设置法线,我们可以自己再创建一个数组来设置法线。还有更好的办法,用unity提供的功能,调用mesh中的RecalculateNormals函数,它会根据之前设置好的三角形数据自动计算法线。对于某个vertex,法线的计算是对包含该vertex的所有三角形的法线取平均值,并归一化。

有了法线才能进行光照的计算 

UV坐标

默认UV坐标都是0,所以我们必须为每个vertex顶点设置UV坐标,UV坐标范围是0到1,所以设置方法如下

上边的代码不会正确的显示结果,这是因为我们应该使用float来计算UV而不是整数除法

我们可以通过设置贴图的tiling属性来达到一些效果

法线贴图

我们可以用法线贴图来给渲染增加更多效果。关于法线贴图的原理和技术请自行学习吧

 

 目前法线贴图的信息是存储在切线空间(切线空间的知识请自行学习),所以我们需要为mesh中的顶点设置切线信息。因为我们目前做出来的是一个平坦的平面,所以切线信息很好设置,平行于平面。

法线贴图在一个平面上的效果,明明是一个平面,但是视觉上却有凹凸起伏的感觉 

 

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

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

相关文章

Catlike Coding网站文章解析 -- 2.Procedural Grid

本章内容 创建一个闭合的cube mesh给cube添加带弧度平滑的边缘定义法线使用sub-meshes&#xff08;子mesh&#xff09;创建一个常规shader合并碰撞体1.合成一个cube 上一章https://mp.csdn.net/postedit/89474068我们已经实现了一个平面mesh。一个cube由6个平面组成&#xff…

linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书

购买SSL证书要想使用https访问你的网址&#xff0c;首先得拥有颁发的SSL证书。我使用的是免费版&#xff0c;有效期为一年&#xff0c;过期后再重新申请。申请SSL证书购买后&#xff0c;可在搜索框输入证书关键字进入到控制台。点击证书申请&#xff0c;按照提示填写完相关信息…

mysql查询网址_bootstrap+flask+mysql实现网站查询

之前那篇文章是flaskredis的&#xff0c;如果用flaskmysql怎么实现呢&#xff1f;创建数据库&#xff1a;CREATE DATABASE web12306 DEFAULT CHARACTER SET utf8;创建表&#xff1a;CREATE TABLE web12306 (user_email varchar(100) NOT NULL DEFAULT ,user_pass varchar(100)…

网络连接异常、网站服务器失去响应_网站常见故障解决办法

网站在运行过程中&#xff0c;常常遇到各种服务器问题&#xff0c;虽然有服务器厂商的维护&#xff0c;但是往往耗时耗工小编对常见的服务器问题&#xff0c;进行了归纳整理&#xff0c;下面跟各位分享一下。常见故障分析一、恶意攻击在我平时管理网站时&#xff0c;可能会遭到…

搜索引擎提交软件_增加SEO超级外链须知的高权重网站目录提交方法

做SEO的朋友对开放式网站目录应该不陌生吧。网站目录就是按一定的分类方法把收录的网站进行分类归档。网站目录本身是不主动抓取网页的&#xff0c;一般只记录网站的名称&#xff0c;网址和有限的说明文字。和网址站、导航站、酷站网址大全等如同一辙。一般高质量的聚合目录网站…

c主线程如何等待子线程结束 linux_使用互斥量进行同步 - Linux C进程与多线程入门_Linux编程_Linux公社-Linux系统门户网站...

互斥简单地理解就是&#xff0c;一个线程进入工作区后&#xff0c;如果有其他线程想要进入工作区&#xff0c;它就会进入等待状态&#xff0c;要等待工作区内的线程结束后才可以进入。基本函数(1) pthread_mutex_init函数原型&#xff1a;int pthread_mutex_init ( pthread_mut…

xshell搭建宝塔没有远程命令密码框框弹出来_服务器安装宝塔控制面板+wordpress搭建个人网站...

准备工作服务器一台&#xff1a;服务器购买域名一个&#xff1a;随便买一个就行软件环境&#xff1a;宝塔面板第1步&#xff1a;SSH远程连接服务器通过ssh远程连接工具进行服务器主机连接&#xff08;Xshell、Putty等&#xff0c;百度下载&#xff09;需要更加详细的关于ssh远程…

php教育网站设计案例_酒店装修,精品酒店设计装修案例,酒店设计网站

酒店设计需要考虑&#xff1a;设计酒店的时候也要顺应市场潮流&#xff0c;不再单一的提供休息、洗漱、睡觉的空间&#xff0c;还要能提供社交、商务等功能&#xff0c;同顾客产生情况共鸣。这样能够引领生活方式的、能够互动&#xff0c;有仪式感的酒店&#xff0c;是很吸引人…

html5手机电商网页设计代码_Html5网站制作,干货!20个视觉体验和内容俱佳的优秀网页设计...

如何创建一个网页&#xff1f;“Html5网站制作”和“灵感干货&#xff01;20个视觉、体验和内容俱佳的优秀网页设计”有什么关系和内在关联&#xff1f;在图片方面&#xff0c;有三个具体方案&#xff1a;图片地图、Css Sprites、内联图片三种&#xff0c;最值得关注的是 Css S…

asp网站本地测试服务器,小旋风asp服务器,asp本地环境调试必备

学习asp&#xff0c;要在本地搭建一个asp服务器调试环境吧&#xff0c;那么必不可少的要找asp本地调试环境软件&#xff0c;超级小旋风AspWebServer是一个不错的选择。超级小旋风AspWebServer系统基于NetBox开发&#xff0c;可以跟IIS媲美的服务器。小旋风asp服务器 该软件是由…

将虚拟主机加入到netskills.net域环境_网站建设阿里云虚拟主机、ECS服务器、企业邮箱选择购买指南...

对于刚接触阿里云的人来说可能看到阿里云的产品介绍页面会比较头晕&#xff0c;各种产品分类&#xff0c;而且同一个产品在不同的分类目录下都能看到&#xff0c;下面简单介绍一下制作网站过程中常用的阿里云的产品。阿里云在网站建设方面常用的服务主要有云虚拟主机、ECS云服务…

seo黑帽劫持用的php,黑帽seo 论坛:黑帽seo防止网站被k的js劫持跳转代码

由于目前百度搜索百度搜索引擎对于js代码还没有办法完全辨别&#xff0c;因此也就出现了运用js代码跳转的黑帽优化提升手法。现如今在网络上有关js跳转代码不计其数&#xff0c;但是作为黑帽优化提升的seo手法之一&#xff0c;如何确保有效降低跳转的网址被k危害性&#xff0c;…

本机用域名不能访问_域名注册申请网站域名注意事项

互联网用户越来越多&#xff0c;也有越来越多人搭建网站&#xff0c;做个人博客也好、搭建企业官网也好&#xff0c;数量都在逐步上升。做网站的数量在上升&#xff0c;域名注册量肯定也在上升。有的朋友头一次注册域名&#xff0c;对域名不了解也不知道申请网站域名该注意哪些…

eclipse的tomcat如何运行自动弹网页_4个国外网页设计网站案例欣赏

原标题&#xff1a;4个国外网页设计网站案例欣赏要想把自己的网站制作得更加美观、吸引人&#xff0c;你需要多参考一些高质量的网站设计案例。今天就给大家看几个比较好的国外网页设计网站&#xff0c;你可以从中学习这些国外网页设计的思路。1.礼盒电商网站如何让自己的网站更…

vue seo关键词设置_SEO关键词优化排名的几个技巧

关键词是优化网站必须要思考分析的&#xff0c;SEO网站优化过程中&#xff0c;网站的文章内容及标题优化&#xff0c;那么必须要考虑到网站的主关键词与长尾关键词了。那么&#xff0c;SEO关键词优化排名的技巧有哪些&#xff1f;下面眼前一亮就跟大家分享下SEO关键词快速排名技…

未备案域名临时跳过备案提示_做好了网页,有域名和服务器,还要怎么搭建网站?...

不知道你选择的服务器是国内大陆的还是国外或者香港的&#xff0c;如果是国内大陆的服务器我们的网站域名还需要备案&#xff0c;你的服务器提供商是那家就在那家备案&#xff0c;备案流程跟着提示走就可以了&#xff0c;接下来我们开始正式进入将网站三要素&#xff08;域名、…

angular语言前端开发_web前端开发入门全套学习方法路径,兼职在家做网站也能月入上万...

前端学习路径1.WEB前端快速入门在本阶段&#xff0c;我们需要掌握 HTML 与 CSS 基础&#xff0c;当然&#xff0c;也包含 H5 和 C3 的新特性。这个部分内容非常简单&#xff0c;而且非常容易掌握。相信你也更愿意学习这个部分&#xff0c;毕竟他可以让你最直观的感受到前端的魅…

h5首页加载慢_H5网站制作注意了

H5自适应网站越来越受到企业的追捧&#xff0c;不同于原来的建站模式&#xff0c;H5网站可以很好是调整来达到PC端和移动端的良好展示效果&#xff0c;获得更友好用户体验。H5网站作为网站优化人员&#xff0c;小编第一个想到的并不是H5带来的炫酷效果&#xff0c;认识它解决了…

网站搭建从零开始(三)域名解析

前面介绍了网站搭建所需要的两大要素&#xff1a;域名和服务器&#xff0c;这次要说的是域名解析&#xff0c;也就是把域名和服务器进行绑定的过程。 我们在访问网络时&#xff0c;网址会被发送到DNS服务器&#xff0c;然后由DNS服务器返回我们所要访问的服务器IP地址&#xff…

网站搭建从零开始(四) 服务器的配置

域名解析设置好了&#xff0c;通常我们就可以访问我们的站点了&#xff0c;上篇里面没有详细讲服务器绑定域名的过程&#xff0c;可能不够清楚&#xff0c;这篇里面再做一下介绍。同时对服务器端的配置进行介绍&#xff08;由于各种服务器各不相同&#xff0c;这里也没法一一介…