顶点坐标

图解WebGL&Three.js工作原理

我怕爱的太早我们不能终老 提交于 2020-02-05 04:12:42
“哥,你又来啦?” “是啊,我随便逛逛。” “别介啊……给我20分钟,成不?” “5分钟吧,我很忙的。” “不行, 20分钟,不然我真很难跟你讲清楚。” “好吧……” “行,那进来吧,咱好好聊聊” 一、我们讲什么? 我们讲两个东西: 1、WebGL背后的工作原理是什么? 2、以Three.js为例,讲述框架在背后扮演什么样的角色? 二、我们为什么要了解原理? 我们假定你对WebGL已经有一定了解,或者用Three.js做过了一些东西,这个时候,你可能碰到了这样一些问题: 1、很多东西还是做不出来,甚至没有任何思路; 2、碰到bug无法解决,甚至没有方向; 3、性能出现问题,完全不知道如何去优化。 这个时候,我们需要了解更多。 三、先了解一个基础概念 1、什么是矩阵? 简单说来,矩阵用于坐标变换,如下图: 2、那它具体是怎么变换的呢,如下图: 3、举个实例,将坐标平移2,如下图: 如果这时候,你还是没有理解,没有关系,你只需要知道,矩阵用于坐标变换。 四、WebGL的工作原理 4.1、WebGL API 在了解一门新技术前,我们都会先看看它的开发文档或者API。 查看Canvas的绘图API,我们会发现它能画直线、矩形、圆、弧线、贝塞尔曲线。 于是,我们看了看WebGL绘图API,发现: 它只能会点、线、三角形?一定是我看错了。 没有,你没看错。 就算是这样一个复杂的模型

(十)UI Mesh

戏子无情 提交于 2020-02-03 21:33:41
文章目录 1.概述 2.UI Mesh 2.1 操作步骤 3.2 VertexHelper添加顶点 3.2.1 普通方法 3.2.2 顶点编辑 3.2.3 顶点流方法 3.2.4 添加quad 3.2.5 添加三角形流 1.概述 在unity 网格系列的最后来处理一下UGUI的mesh问题。ugui所有的网格mesh默认为四边形,边长为1,即mesh顶点坐标为四个。由于所有的ui均从Graphic类衍生,所以只要重写虚方法OnPopulateMesh即可。OnPopulateMesh存在两个,入口参数不同,一个时VertexHelper一个时Mesh。入口参数为Mesh的方法已经过失,所以本文主讲VertexHelper生成mesh的方法。如下所示: protected override void OnPopulateMesh ( VertexHelper vh ) { base . OnPopulateMesh ( vh ) ; vh . Clear ( ) ; vh . AddVert ( new Vector3 ( - 50 , - 50 ) , Color . white , new Vector2 ( 0 , 0 ) ) ; vh . AddVert ( new Vector3 ( 50 , - 50 ) , Color . red , new Vector2 ( 1 ,

初级入门 --- 认识 WebGL

淺唱寂寞╮ 提交于 2020-01-31 00:34:40
WebGL 是什么? WebGL 是一组基于 JavaScript 语言的图形规范,浏览器厂商按照这组规范进行实现,为 Web 开发者提供一套 3D图形 相关的 API。 这些 API 能够让 Web 开发者使用 JavaScript 语言直接和显卡(GPU)进行通信。当然 WebGL 的 GPU 部分也有对应的编程语言,简称 GLSL 。我们用它来编写运行在 GPU 上的着色器程序。着色器程序需要接收 CPU(WebGL 使用 JavaScript) 传递过来的数据,然后对这些数据进行流水线处理,最终显示在屏幕上,进而实现丰富多彩的 3D 应用,比如 3D 图表,网页游戏,3D 地图,WebVR 等。 WebGL 工作原理 3D 模型数据从诞生到最终显示在屏幕上,大家可以想象一下 流水线 的生产过程,流水线按照既定的步骤对原料进行加工,当前步骤只对前一步骤的结果进行处理,然后将处理后的结果传递给下一步骤,最终将原材料生产成完整的产品。WebGL 的工作方式和流水线类似,也是按照流水线的方式将 3D 模型数据渲染到 2D 屏幕上的,业界把这种渲染方式称为 图形管线 或者 渲染管线 。 WebGL 只能够绘制 点 、 线段 、 三角形 这三种基本图元,但是我们经常看到 WebGL 程序中含有立方体、球体、圆柱体等规则形体,甚至很多更复杂更逼真的不规则模型,那么 WebGL

Unity Shader——Writing Surface Shaders(1)——Surface Shader Examples

我怕爱的太早我们不能终老 提交于 2020-01-30 04:09:00
  这里有 Surface Shader 的一些例子。下面的这些例子关注使用内建的光照模型;关于如何使用自定义光照模型的例子参见 Surface Shader Lighting Examples 。 简单   我们将会以一个非常简单的shader作为开始,并在此基础上逐渐完善。下面这个shader会把表面颜色置成“白色”。它使用内建的Lambert(漫反射)光照模型。 Shader "Example/Diffuse Simple" { SubShader { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf Lambert struct Input { float4 color : COLOR; }; void surf (Input IN, inout SurfaceOutput o) { o.Albedo = 1; } ENDCG } Fallback "Diffuse" }   以下是使用两个 lights 作用在某个模型上的样子: 纹理   一个全白的对象太无聊了,所以让我们添加一个纹理。我们将会在shader中添加一个 Properties block ,这样我门就能在材质中获得一个纹理选择器。以下粗体为其他改变: Shader "Example/Diffuse Texture" {

unity shader 着色器实例 代码+详解注释 【模型顶点抖动,顶点无节操的随机升降抖动效果】

筅森魡賤 提交于 2020-01-28 05:36:17
如果代码中有什么不清楚请查看以下基础知识 Shader基础知识 unity3d 中 七种坐标知识详解 随机抖动的效果 该效果随机上下抖动顶点,适合给静态模型增加动感。类似小时候我们看的一些定格动画或剪纸的效果。有些2d游戏也会使用类似的功能,这是3d版本,2d同理。 shader的随机数 shader中没有随机函数。所以需要我们自己编写。代码中出现的随机数实现方式是网上摘抄的,由于发现了很多帖子都有这段代码,所以没法注明出处。有人知道原版是谁的请告诉我,我好注明出处。 Shader "Unlit/simple" { //变量接口 Properties { //线段长度 _LineLength ( "Length" , float ) = 1. //线段颜色 _LineColor ( "Color" , COLOR ) = ( 0 , 1 , 0 , 1 ) } //着色器正文 SubShader { //着色器程序块 Pass { Tags { "RenderType" = "Opaque" } LOD 200 CGPROGRAM # pragma target 5.0 //顶点着色器,用于处理位置信息 # pragma vertex vert //片元着色器,用于处理颜色 # pragma fragment frag //几何着色器,DirectX 10新增的

从零开始手撸WebGL3D引擎2:WebGL和3D编程基础概念

佐手、 提交于 2020-01-28 04:53:38
我们在第一篇里面浏览了一下WebGL的参考卡片,也列出了一些WebGL的功能点,但是对于没有接触过3D编程的人来说,这些东西很难理解并形成一个统一的认识。所以这篇我就以WebGL为参考平台谈谈3D编程的一些基础概念。 3D坐标系变换 正常来说,人们学习新东西都会从已有的知识出发,对于3D编程,在屏幕上画出3D图形,如果有2D图形API使用的基础,就会想着从2D编程的经验出发。比如对于2D编程,都是指定一个屏幕坐标,设定一个颜色,去画一个点,你能画点就能画任何东西,很简单很直观。但是到3D这儿就不行了,因为你没法简单直接且直观的指定一个立方体的各个点在屏幕上是什么位置。为了解决这个问题,在3D编程中,需要将3D空间的点变换到屏幕空间,即我们在3D空间指定点的坐标(一组3d坐标),然后设置一个摄像机,将摄像机镜头拍到的点映射到屏幕上,这样就可以绘制出来。这个过程就需要用不同的坐标空间,以及在这些坐标空间之间变换坐标。简单说一说。 模型空间 3D模型通常由很多三角形构成,而每个三角形又是由三个顶点构成。一个3D模型有很多顶点,这个顶点的坐标定义在模型自身的坐标系中,这个坐标系就是模型空间。坐标系的原点根据模型的形状特点以及使用的方便情况而设置。比如两足动物(人)的模型,通常将坐标原点放在两脚中间。而球的模型中心一般放在球心。使用模型空间一方面建模方便,另一方面同样的模型可以复用

求任意凸多边形面积

旧街凉风 提交于 2020-01-28 00:42:58
任意给出一个三角形ΔABC,设其顶点坐标分别为A(x 1 , y 1 ),B(x 2 , y 2 ),C(x 3 , y 3 ),那么根据线性代数的知识,ΔABC的有向面积可表示为: 给出任意一个多边形,其顶点坐标依次为(x 0 ,y 0 ),(x 1 ,y 1 ),(x 2 ,y 2 ),…,(x n ,y n )(其中n=2,3,4,…),则其面积可表示为: 故计算的函数为: double any_ploygon_area ( int x , int y , int n ) { double sum = 0 ; for ( int i = 0 ; i < n - 1 ; i ++ ) { sum += ( x [ i ] * y [ i + 1 ] - x [ i + 1 ] * y [ i ] ) ; } double square = ( fabs ( sum + ( x [ n - 1 ] * y [ 0 ] ) - ( x [ 0 ] * y [ n - 1 ] ) ) ) / 2 ; return square ; } 来源: CSDN 作者: Happig丶 链接: https://blog.csdn.net/qq_44691917/article/details/104095647

[Stage3D]初窥Stage3D(2)

穿精又带淫゛_ 提交于 2020-01-23 12:57:37
Vertex and Fragment Shader (顶点着色器 和 像素着色器) 1.什么是shader   Shader(着色器)是图形渲染管道中的可编程代码块,它是跑在GPU上面的程序,专门用于处理图像显示,分为 vertex shader(顶点着色器) 和 fragment shader (像素着色器)。顾名思义,这两个shader的功能,分别是负责顶点的处理,和像素的处理。 而在Stage3D中,提供了一个API叫Program3D,这个类实现了Shader 。也就是说,如果要在Actionscript中使用shader编程,则必须使用stage3D中的Program3D类。这个类会根据渲染需求生成一个shader实例并把它传递给GPU,此后GPU再执行这个shader实例从而执行渲染效果。    简而言之,shader是运行在GPU上面的程序,负责图形顶点计算和像素颜色渲染。 2.Shader的工作流程    (图片来自:http://www.adobe.com/devnet/flashplayer/articles/vertex-fragment-shaders.html)   如图所示为可编程图形管道的各个工作模块,模块之间是瀑布式的(即下一个模块的工作依赖于上一个模块的输出)。首先,假定我们有一组定义了一组三角形的顶点数据流。在图形管道中

【译】Unity3D Shader 新手教程(6/6) —— 更好的卡通Shader

浪尽此生 提交于 2020-01-22 19:09:03
本文为翻译,附上 原文链接 。 转载请注明出处—— polobymulberry-博客园 。 动机 如果你想了解以下几件事,我建议你阅读以下这篇教程: 想知道如何写一个multipass的toon shader。 在shader中学习更多不同参考坐标系(空间space)以及其作用。 深入学习一个实用的fragment shader。 学习矩阵相乘和Unity内建矩阵的使用。 该教程比 第五篇教程 更实用。 准备工作 为了实现一个描边的toon shader,我们需要做的是: 为模型描边。 将 第四篇文章 中的介绍的toon shader(使用的是surface shader)移植到vertex&fragment shader中。 描边 有很多方法进行描边,在 第四篇文章 中,我们使用了rim lighting(边缘光照)来给我们人物加上描边效果。现在我们采用另一种方法,额外使用一个Pass改善已有的描边效果。 不同于之前描边效果的实现,在这篇教程中,你可以将你看不到的模型部分(比如背面)放大一些,再渲染成全黑,这样也是可以实现描边效果的。这种方法可以将原模型的正面完好无损呈现出来。 所以我们首先试着: 单独写一个仅仅用来绘制模型背面的Pass。 扩展模型背面的顶点,使其看起来变大了一些。 下面这个Pass就是用来仅仅绘制模型背面(Cull Front,剔除正面的多边形): Pass

Unity3D中的Shader

女生的网名这么多〃 提交于 2020-01-22 19:05:00
简单的说,Shader是为渲染管线中的特定处理阶段提供算法的一段代码。Shader是伴随着可编程渲染管线出现的,从而可以对渲染过程加以控制。 1. Unity提供了很多内建的Shader,这些可以从官网下载,打开looking for older version的链接就能看到Build-in shaders。选择合适的Shader很重要,以下是开销从低到高的排序: (1)Unlit:仅使用纹理颜色,不受光照影响 (2)VertexLit:顶点光照 (3)Diffuse:漫反射 (4)Specular:在漫反射基础上增加高光计算 (5)Normal mapped:法线贴图,增加了一张法线贴图和几个着色器指令 (6)Normal Mapped Specular:带高光法线贴图 (7)Parallax Normal Mapped:视差法线贴图,增加了视差贴图的计算开销 (8)Parallax Normal Mapped Specular:带高光视差法线贴图 对于现在流行的移动平台游戏,Unity提供了几种专门的着色器放在Shader->Mobile下,它们是专门优化过的。 2. 在Unity中,可以编写3种类型的Shader: 表面着色器(Surface Shaders):最常用的Shader,可以与灯光、阴影、投影器交互,以Cg/HLSL语言进行编写,不涉及光照时尽量不要使用。