顶点坐标

Shader学习七,UnityCG.cginc

给你一囗甜甜゛ 提交于 2020-01-15 00:47:17
常用的着色器文件:E:\Other\install\Unity_2018.3.13f1\Unity\ Editor\Data\CGIncludes 我的安装路径是这个没有CGIncludes这个文件夹的可能就要去官网下载对应版本的着色器了 常用的文件如下: UnityCG.cginc:包含了最常用的帮助函数,宏和结构体等 UnityShaderVariables.cginc:在编译UnityShader时,会被自动包含进来。包含了许多内置的全局变量,如UNITY_MATRIX_MVP等 Lighting.cginc:包含各种内置的光照模型,如果编写的是SurfaceShader的话会自动包含进来 HLSLSupport.cginc:在编译UnityShader时,会自动包含进来。声明了很多用于跨平台编译的宏和定义 UnityCG.cginc中一些常用的结构体 appdata_base:可用于顶点着色器的输入,包含顶点位置,顶点法线,第一组纹理坐标 appdata_tan:可用于顶点着色器输入,包含顶点位置,顶点切线,顶点法线,第一组纹理坐标 appdata_full:可用于顶点着色器的输入,包含顶点位置,顶点切线,顶点法线,四组(或更多)纹理坐标 appdata_img:可用于顶点着色器的输入,包含顶点位置,第一组纹理坐标 v2f_img:可用于顶点着色器的输出

使用 mesh 实现多边形裁剪图片!Cocos Creator!

瘦欲@ 提交于 2020-01-13 18:51:23
和 mask 裁剪图片说拜拜,用上高性能的 mesh + shader 。文章底部获取完整代码! 效果预览: 使用方法: 创建一个空节点 添加用户脚本组件 mesh-texture-mask 添加图片 添加修改多边形顶点坐标 实现原理 创建 mesh mesh 是什么? mesh 是决定一个物体形状的东西。 例如在二维中可以是正方形、圆形、三角形等;在三维中可以是正方体、球体、圆柱体等。 mesh 初始化需要一个 VertexFormat 对象。这个对象是顶点格式对象。 其中 name 是对应顶点着色器的 attribute 变量的值。 type 对应数据类型,决定了每个数据大小。 num 对应有几个数据分量(猜的哈哈!)。例如二维坐标和纹理uv坐标一般只有 x 和 y 两个分量,所以设置为2;三维坐标有 xyz 三个变量,所以值为3;而颜色一般有 rgba 四个分量,所以设置为4。 normalize 表示归一化。 对于我们的多边形裁剪图片,只需要一个二维坐标和一个纹理uv坐标,创建 mesh 参考代码如下: const gfx = cc.gfx; let mesh = new cc.Mesh(); mesh.init(new gfx.VertexFormat([ { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32,

NDK OpenGL ES 3.0 开发(二十一):3D 模型加载和渲染

杀马特。学长 韩版系。学妹 提交于 2020-01-13 05:14:50
该原创文章首发于微信公众号:字节流动 OpenGL ES 3D 模型加载和渲染 上一节简单介绍了 常用的 3D 模型文件 Obj 的数据结构和模型加载库 Assimp 的编译 ,本节主要介绍如何使用 Assimp 加载 3D 模型文件和渲染 3D 模型。 3D 模型的设计一般是由许多小模型拼接组合成一个完整的大模型,一个小模型作为一个独立的渲染单元,我们称这些小模型为网格(Mesh)。 网格作为独立的渲染单元至少需要包含一组顶点数据,每个顶点数据包含一个位置向量,一个法向量和一个纹理坐标,有了纹理坐标也需要为网格指定纹理对应的材质,还有绘制时顶点的索引。 这样我们可以为 Mesh 定义一个顶点: struct Vertex { // 位置向量 glm : : vec3 Position ; // 法向量 glm : : vec3 Normal ; // 纹理坐标 glm : : vec2 TexCoords ; } ; 还需要一个描述纹理信息的结构体: struct Texture { GLuint id ; //纹理 id ,OpenGL 环境下创建 String type ; //纹理类型(diffuse纹理或者specular纹理) } ; 网格作为独立的渲染单元至少需要包含一组顶点数据以及顶点的索引和纹理,可以定义如下: class Mesh { Public :

Android OpenGL 开发详解 (渲染Camera数据到GLSurfaceView)

只愿长相守 提交于 2020-01-13 04:03:24
OpenGL 作为跨平台的开放式图形库,在我们android平台自然也是有很大用处的。 这篇文章是我自己学习OpenGL的一个记录总结,同时写下我的理解,希望可以对你有帮助。 我们就使用OpenGL+GLSurfaceView+Camera 来实现使用Camera采集数据,通过OpenGL渲染到GLSurfaceView显示。 首先我们先在xml中写一个GLSurfaceView控件,获取到它的实例。那为什么我们要使用GLSurfaceView而不是用SurfaceView,因为我们渲染的过程需要和OpenGL建立联系才可以进行绘制的,而GLSurfaceView本身提供给我们使用就已经通过特殊的EGL环境与OpenGL建立了联系,而SurfaceView的话我们如果要使用需要自己配置EGL环境。 对GLSurfaceView进行一些配置: GLSurfaceView glSurfaceview = findViewById(R.id.glsurfaceview); glSurfaceview.setEGLContextClientVersion(2); //设置所使用的EGLContext版本号。 glSurfaceview.setRenderer(new GLSurfaceView.Renderer() { //设置渲染器 @Override public void

Unity - 通用渲染管线(URP)HLSL库函数分析(1)

≯℡__Kan透↙ 提交于 2020-01-12 14:48:23
Unity - 通用渲染管线(URP)HLSL库函数分析(1) 在新管线写shader的时候发现好多方法和以前都不一样了,网上暂时也没搜到相关整理的文档,就只好自己去慢慢啃了。 com.unity.render-pipelines.universal Core.hlsl 名称 说明 GetVertexPositionInputs(float3 positionOS) 获取输入顶点坐标信息 GetVertexNormalInputs(float3 normalOS) 获取输入顶点法线信息 GetVertexNormalInputs(float3 normalOS, float4 tangentOS) 获取输入顶点法线信息(重载) GetScaledScreenParams() 获取屏幕缩放参数信息 NormalizeNormalPerVertex(real3 normalWS) 逐顶点法线正交 NormalizeNormalPerPixel(real3 normalWS) 逐像素法线正交 ComputeScreenPos(float4 positionCS) 计算屏幕坐标信息 (real)ComputeFogFactor(float z) 计算雾参数 (real)ComputeFogIntensity(real fogFactor) 计算雾强度 (half3)MixFogColor

算法分类合集

二次信任 提交于 2020-01-06 08:18:08
算法分类合集 ACM 所有 算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 一维线段树 二维线段树 树状数组 一维树状数组 N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表 Trie树(静态建树、动态建树) AC自动机 LCA和RMQ问题 KMP算法 图论 基本图算法图 广度优先遍历 深度优先遍历 拓扑排序 割边割点 强连通分量 Tarjan算法 双连通分量 强连通分支及其缩点 图的割边和割点 最小割模型、网络流规约 2-SAT问题 欧拉回路 哈密顿回路 最小生成树 Prim算法 Kruskal算法(稀疏图) Sollin算法 次小生成树 第k小生成树 最优比例生成树 最小树形图 最小度限制生成树 平面点的欧几里德最小生成树 平面点的曼哈顿最小生成树 最小平衡生成树 最短路径 有向无环图的最短路径->拓扑排序 非负权值加权图的最短路径->Dijkstra算法(可使用二叉堆优化) 含负权值加权图的最短路径->Bellmanford算法 含负权值加权图的最短路径->Spfa算法 (稠密带负权图中SPFA的效率并不如Bellman-Ford高) 全源最短路弗洛伊德算法Floyd 全源最短路Johnson算法 次短路径

使用UGUI绘制自定义几何图形

不打扰是莪最后的温柔 提交于 2020-01-03 08:37:58
本文展示了如何使用UGUI绘制矩形,同理可绘制其他几何图形。 UGUI的渲染体系,简单来说所有的控件和可显示的元素都是Graphic。Graphic持有一个CanvasRenderer,通过SetVertices设置顶点,最终完成绘制。 举例来说,Image控件就是一个Graphic,这个GameObject上面同时还有一个CanvasRenderer,两者结合起来最终把图片绘制完成。 重点在于绘制函数修改为OnPopulateMesh,使用VertexHelper来设置顶点,先设置所有的顶点,然后按照三角形或者者是四边形填充索引。 设置的顶点格式是UIVertex,包含position、color、uv0等属性。 如图所示,可以通过拖动顶点位置,改变几何形状。 脚本如下: using UnityEngine; using System.Collections; using UnityEngine.UI; public class Area : Graphic { // Use this for initialization void Start () { } // Update is called once per frame void Update() { SetAllDirty (); } protected override void OnPopulateMesh

DirectX11 With Windows SDK--18 使用DirectXCollision库进行碰撞检测

痞子三分冷 提交于 2020-01-01 22:07:19
前言 在DirectX SDK中,碰撞检测的相关函数位于xnacollision.h中。但是现在,前面所实现的相关函数都已经转移到Windows SDK的DirectXCollision.h中,并且处于名称空间DirectX内。这里面主要包含了四种包围盒(Bounding Volumes),并且是以类的形式实现的: BoundingSphere类--包围球(Bounding Box) BoundingBox类--轴对齐包围盒(Axis-aligned bounding box),又称AABB盒 BoundingOrientedBox类--有向包围盒(Oriented bounding box),又称OBB盒 BoundingFrustum类--包围视锥体(Bounding Frustum) 除此之外里面还包含有三角形(射线)与其余物体的碰撞检测。 后续的项目将会使用该碰撞库。 DirectX11 With Windows SDK完整目录 Github项目源码 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。 常见包围盒 包围球(Bounding Box) 一个球体只需要使用圆心坐标和半径就可以表示。结构体的一部分如下: struct BoundingSphere { XMFLOAT3 Center; // 球体中心坐标 float

OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成

喜夏-厌秋 提交于 2020-01-01 21:58:26
首先申明下,本文为笔者学习《OpenGL ES应用开发实践指南(Android卷)》的笔记,涉及的代码均出自原书,如有需要,请到原书指定 源码地址 下载。 《 Android学习笔记——OpenGL ES的基本用法、绘制流程与着色器编译 》中实现了OpenGL ES的Android版HelloWorld,并且阐明了OpenGL ES的绘制流程,以及编译着色器的流程及注意事项。本文将从现实世界中图形显示的角度,说明OpenGL ES如何使得图像在移动设备上显示的更加真实。首先,物体有各种颜色的变化,在OpenGL ES中为了生成比较真实的图像,对图像进行平滑着色是一种常见的操作。其次,移动设备存在横竖屏的切换,进行图像显示时,需要根据屏幕方向考虑屏幕的宽高比,使图像不因屏幕切换而变形。最后,现实中的物体都是三维的,我们观察物体都带有一定的视角,因此需要在OpenGL ES实现三维图像的显示。本文主要包括以下内容: 平滑着色 自适应宽高 三维图像生成 一、平滑着色 平滑着色是通过在三角形的每个点上定义不同的颜色,在三角形的表面混合这些颜色得到的。那么,如何用三角形构成实际物体的表面呢?如何混合定义在顶点出的不同颜色呢? 首先引入三角形扇的概念。以一个中心顶点作为起始,使用相邻的两个顶点创建第一个三角形,接下来的每个顶点都会创建一个三角形,围绕起始的中心点按扇形展开。为了使扇形闭合

用DirectX实现魔方(二)

六眼飞鱼酱① 提交于 2019-12-31 02:00:56
这篇说一下如何构造魔方,主要包括魔方几何体的构造及纹理贴图。以下论述皆以三阶魔方为例,三阶魔方共有3 x 3 x 3 = 27个小立方体。 构造魔方 在第一篇里面说过,最初模型用的是微软的.x文件格式,由于魔方要实现按层旋转,所以不能将整个模型做成一个.x文件,只能分成若干个小立方体,每个立方体对应一个.x文件。这导致在发布程序的时候也要发布这些模型文件,而且.x文件已经逐渐为微软遗弃,所以就干脆不用了,自己画吧。魔方由27个小立方体构成,所以只要绘制一个小立方体,并复制27分,再将这个27个小立方体按一定顺序堆叠在一起,最后贴上纹理,就可以构成一个完整的魔方了。 一个小立方体包含六个面,由于每个面的纹理可能不同,所以需要逐个面绘制,这样可以方便的为每个面单独设置纹理。 一个面由两个三角形构成,这里采用TriangleStrip的方式进行绘制,只需要指定四个顶点即可,如果是TriangleList,则需要六个顶点。 顶点结构 下面来分析一下顶点的数据结构,首先要有一个位置坐标(位置是一个顶点必须要包含的信息),其次,为了添加光照效果,还需要一个法向量。最后,为了实现纹理贴图,需要有纹理坐标。所以一个完整的顶点有以下三部分构成: 位置 法向量 纹理坐标 用一个结构体来表示顶点,如下: struct Vertex { float x, y, z; // position float