顶点坐标

IfcTopologyResource(拓扑资源)

﹥>﹥吖頭↗ 提交于 2020-01-22 10:23:54
IfcTopologyResource(拓扑资源) IfcTopologyResource定义用于拓扑表示的资源。此资源的主要应用是用于产品模型的形状或几何形式的边界表示。 ISO/IS 10303-42:1994中的定义经过了一个改编过程,其特点是: ①IFC命名惯例的改编(IFC前缀) ②ISO 10303实体的改编,其中使用了多重继承或非排他继承(即和或或或和或子类型约束) ③使用subtype和select pruning选择IR的子集 ④在表示项中省略name属性 形状的拓扑表示是根据10303-42的调整定义的。类型、类和功能语义定义部分遵循工作草案的调整后的措辞,在每次引用时都会明确指出和引用。几何和拓扑表示的定义(摘自ISO/CD10303-42:1992)明确排除在本规范的版权范围之外。 有关正式ISO标准中定义的更多信息,请参考:ISO/IS 10303-42:1994,工业自动化系统和集成:产品数据表示和交换-第42部分:集成通用资源。几何和拓扑表示。正式标准可通过各个国家的标准发布机构获得。 以下内容在拓扑架构的范围内: ●基本拓扑实体顶点、边和面的定义,每个拓扑实体都有一个专门的子类型,使其分别与点、曲线或曲面的几何图形相关联; ●收集基本实体,形成路径、环和壳的拓扑结构和约束,确保这些结构的完整性; ●拓扑实体的方向。 Types 1 IfcShell

StarWink UV顶点动画制作详解

谁都会走 提交于 2020-01-20 07:58:07
StarWink UV顶点动画制作详解 我们先来看最终效果 实现原理: 1.利用算法得到圆形差值的UV坐标(中间为0)去采样纹理,得到圆形扩散的循环纹理动画。 2.利用算法得到循环的圆形扩散遮罩,并作为顶点偏移遮罩控制顶点动画。 3.模型顶点UV做了同一块模型上的UV顶点坐标一致性的处理,使得同一块模型上的所有点偏移量一致。 此次制作使用ASE来做算法说明(代码不直观)。 算法实现: 1. 利用UV的取值范围映射到指定的取值范围,并求模(Remap和Length) 第一个算法是Remap方法: 将某个区间的取值范围([Min Old, Max Old])映射到指定区间范围([Min New, Max New])。 算法为:如要将Val从[a, b]映射到[A, B],则公式为 Val = A + Val * (B - A) / (b - a) 第二个算法是length方法,意思是求取向量模长。公式:Sqrt ( Dot ( Iput, Iput ) )。此处将 [-1, 1]的取值范围的二维坐标取模,因为中间点(0, 0)的模长为0,边界处模长为1,所以得到一个[0, 1]灰度渐变的圆(这里的渐变为线性的)。 2. 两向量间的距离,(Distance) 当B向量Time Speed = 0时,Distance如下图所示。 公式:Sqrt (dot ( ( B-A ), ( B-A

Qt 使用自带的OpenGL模块开发程序

荒凉一梦 提交于 2020-01-19 16:00:33
QT中使用opengl .pro文件中添加 QT += opengl 1、使用指定版本的OpenGL 如下使用opengl4.5调用方法,使用指定版本的接口,必须设备图形显示设备支持对应OpenGL版本才可。 Q:什么是CoreProfile和Compatibility Profile? A:在OpenGL的发展历程中,总是兼顾向下兼容的特性,但是到了一定的程度之后,这些旧有的OpenGLAPI不再适应时代的需要,还有一些扩展并不是驱动一定要实现的扩展,这些被统一划入可选的CompatibilityProfile;而由OpenGL规范规定必须支持的扩展,则是Core Profile,想要支持先进的OpenGL,相应的CoreProfile扩展必须被实现。所以如果使用#include < QOpenGLFunctions > 或者 #include <QOpenGLFunctions_4_5_Core>时,会发现如glDrawPixels等接口找不到的问题。所以我们使用Cmpatibility版本。所有opengl的接口函数都可以使用。 1 #include <QOpenGLFunctions_4_5_Cmpatibility> 2 //QOpenGLFunctions类提供了跨平台访问的OpenGL ES 2.0 API

如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)

房东的猫 提交于 2020-01-17 16:30:24
写在前面:    先说一下为什么决定写这篇文章,我也是这两年开始学习3D物体的光照还有着色方式的,对这个特别感兴趣,在Wiki还有NVIDIA官网看了相关资料后,基本掌握了渲染物体时的渲染管道(The rendering pipe-line)流程,以及各种空间坐标系(MVP),但是在用Unity的Shaderlab写shader的时候,对于具体怎么实现各种着色有很大的疑问,决定苦心钻研一下,过了几个月吧,现在对写shader还是比较熟练的,也解决了之前的疑惑,写这篇算是一篇笔记,以后可能用到,或者初学者想参考一下都是很好的,那么言归正传。 看这篇教程所需要的基础: 有一定的shader编写基础,能看懂vertex&fragment代码。 了解3D的物体的顶点存储有什么信息。 有一定的Unity基础,能看懂基本的C#代码。 初学者,想学习这方面技术的(虽然本篇本来就很基础) 那么本篇文章正式开始 三种着色方式的区别:   物体在屏幕中每个像素点的颜色,取决于两部分,一个是物体本身顶点的信息,比如位置,法线方向,颜色等等。另一个就是着色方式,着色函数可以根据顶点然后填充中间的部分,比如说你有三个顶点,你就可以用着色函数获取一个面,至于这个面怎么显示,就有各种各样的方法,本篇讲述三种比较常见的方法。 Flat Shading(平面着色) :平面着色简单来讲,就是一个三角面用一个颜色

一天干掉一只Monkey计划(四)——卡通着色,描边

◇◆丶佛笑我妖孽 提交于 2020-01-17 16:27:56
一天干掉一只Monkey计划(四)--卡通着色,描边 --Zephyroal 楔子: 实在无奈, Unreal 的世界浩如烟海,在里面一点一点地爬动,很充实,但也很无奈,加之最近加入自行车驴行俱乐部,几乎都没有什么时间出来搞些自己的小小兴趣爱好了,老大说的好“每一个年轻程序员都有一颗渲染的心”,正好有相关方面的应用,写下此篇,总结一下卡通渲染方面的知识,摘录不少,这里不一一谢过了,最后用 RM 做了相关的实现,工程文件就懒地放了,最怕害了一样手懒的童鞋,下个东西就当学习结束了,以我自己的深刻教训,理论与实际永远隔着一条银河,牢记,自勉: 实践是检验真理的唯一标准! 一、 技术背景 非真实感绘制 (Non-photorealistic rendering) (NPR)是计算机图形学的一类,主要模拟艺术式的绘制风格,也用于发展新绘制风格。和传统的追求真实感的计算机图形学不同,NPR受到油画,素描,技术图纸,和动画卡通的影响。NPR已经以"卡通造影"的形式出现在电影和电子游戏中,它也已出现在设计图纸和试验动画中 卡通渲染便是一种典型的常用非真实感绘制技术,它要求帖图由不明显的渐变色块夹杂一些不复杂的纹理组成。它强调粗细线条(Silhouette,轮廓勾边)和简单色块(ToonShading ,块状 色调着色),忽略细节。利用这些很简单很纯粹的线条和色块

Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘

筅森魡賤 提交于 2020-01-17 15:36:53
转自 冯乐乐的《Unity Shader 入门精要》 2010年的Unity 3 中,Surface Shader 出现了。 表面着色器的一个例子。 我们先做如下准备工作。 1)新建一个场景,去掉天空盒子 2)新建一个材质,新建一个Shader,赋给材质。 3)场景中创建一个胶囊体,上步材质赋给它 然后我们修改Shader代码: Shader "Unity Shaders Book/Chapter 17/Bumped Diffuse" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _BumpMap ("Normalmap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 300 CGPROGRAM #pragma surface surf Lambert #pragma target 3.0 sampler2D _MainTex; sampler2D _BumpMap; fixed4 _Color; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; void surf (Input IN,

第六章 基础纹理(2)

为君一笑 提交于 2020-01-17 15:36:05
目录 凹凸映射 1.1 高度纹理 1.2 法线纹理 1.3 使用模型空间存储法线的优点和使用切线空间的优点 2. 实践 2.1 在切线空间下计算 2.2 在世界空间下计算 3.Unity中的法线纹理类型 @ 凹凸映射 纹理另一种常见的应用就是凹凸映射(bump mapping)。凹凸映射的目的是使用一张纹理来修改模型表面的法线,以便为模型提供更多的细节。这种方法不会真的改变模型的顶点位置,只是让模型看起来好像是“凹凸不平”的,但可以从模型的轮廓处看出“破绽”。 有两种主要的方法可以用来进行凹凸映射:一种方法是使用一张高度纹理(height map)来模拟表面位移(displacement),然后得到一个修改后的法线值,这种方法也被称为高度映射(height mapping);另一种方法则是使用一张法线纹理(normal map)来直接存储表面法线,这种方法又被称为法线映射(normal mapping)。尽管我们常常将凹凸映射和法线映射当成是相同的技术,但读者需要知道它们之间的不同。 1.1 高度纹理 我们首先来看第一种技术,即使用一张高度图来实现凹凸映射。高度图中存储的是强度值(intensity),它用于表示模型表面局部的海拔高度。因此,颜色越浅表明该位置的表面越向外凸起,而颜色越深表明该位置越向里凹。这种方法的好处是非常直观,我们可以从高度图中明确的知道一个模型表面的凹凸情况

unity 蒙皮的实现方式

只愿长相守 提交于 2020-01-17 06:24:36
原理: 蒙皮,三维动画术语,也用于3D游戏中。三维动画的一种制作技术。在三维软件中创建的模型基础上,为模型添加骨骼。由于骨骼与模型是相互独立的,为了让骨骼驱动模型产生合理的运动。把模型绑定到骨骼上的技术叫做蒙皮。 因为蒙皮动画要改动的是我们的骨骼的缩放,平移,渲染。是跟骨骼有关系的。但是我们的模型是一个mesh,是由很多顶点组成的,那么要让骨骼改动的时候mesh也变化的话就需要改动mesh上的顶点。那么自然就需要骨骼和顶点间有一个关联关系。 蒙皮一般是美术做出来的骨骼与顶点的关联关系,也就是说蒙皮就是骨骼与顶点间的关系。 实现方式: 在unity中,我们要获取这个关联关系可以通过Mesh下的boneWeights来获取,这里获取的是每个顶点的关联骨骼信息。就包括boneIndex0到3和weight0到3。分别是顶点的关联骨骼索引和关联骨骼索引的权重。unity支持4个关联骨骼。 要做蒙皮的话我们需要把骨骼的顶点与他的有关联的骨骼索引关联起来。所以需要做一次所有骨骼的坐标转换到动画做动画的坐标系,需要做一次矩阵左乘。 我们要获取骨骼的矩阵信息,首先需要获取骨骼坐标下的骨骼矩阵,通过Mesh的bindposes可以获取所有的骨骼坐标信息。然后左乘动画世界坐标bones[j].localToWorldMatrix * bindPoses[j]。这样可以转换到世界坐标下。

Shader 基础

时间秒杀一切 提交于 2020-01-17 01:05:59
顶点和片元着色器 Vertex shader program(顶点着色程序)和 Fragment shader program(片断着色程序)分别被 Programmable Vertex Processor(可编程顶点处理器)和Programmable Fragment Processo(可编程片断处理器)所执行。 顶点着色程序从 GPU 前端模块(寄存器)中提取图元信息( 顶点位置、法向量、纹理坐标等 ),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“ 纹理坐标、光照信息等 ”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。 由于 GPU 对数据进行并行处理,所以每个数据都会执行一次 shader 程序程序。 即, 每个顶点数据都会执行一次顶点程序; 每个片段都会执行一次片段程序。 什么是片断?片断和像素有什么不一样?所谓片断就是所有的三维顶点 在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素都是经过深度比较的 开始 Cg 之旅 Cg 支持 7 种基本的数据类型: float, 32 位浮点数据,一个符号位。浮点数据类型被所有的 profile 支持(但是 DirectX8 pixel

unity shader 着色器实例 代码+详解注释 【显示模型法线方向的shader】

放肆的年华 提交于 2020-01-15 02:57:21
用于显示模型法线方向的shader 原理很简单,就是获取顶点坐标信息作为起点,沿着法线方向在指定长度的位置画一条线段。我的代码里都有详细注释。 翠花,上效果图~ Shader "Unlit/normal" { //变量接口 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新增的,介于顶点和片元着色器之间的可选着色器 # pragma geometry geo //引入空间转换宏 # include "UnityCG.cginc" float _LineLength ; fixed4 _LineColor ; //输入到顶点着色器的数据 struct v2g { //顶点位置 float4 pos :