顶点坐标

DirectX 总结

强颜欢笑 提交于 2019-11-27 09:49:40
DDS DirectXDraw Surface file format, .dds。 这是微软从DirectX7开始引进的一种文件格式,它用来存储压缩的或未压缩的纹理,该格式支持mimaps cube maps和volume maps, D3DX和许多其他的DX工具都支持这种格式,比如DirectX Texture Editor(dxtex.exe)和Texture Conversion Tool(Texconv.exe),从D3D110开始,DDS文件也支持纹理数组 DXGI DirectX Graphics Infrastructure 转换为.x格式 MeshConvert.exe,这个tool位于Microsoft DirectX SDK \Utilities\bin\x86目录下面,可以用来转换.x文件,支持.x, .obj, .sdkmesh格式之间的相互转换,.sdkmesh是微软新的格式在DX10/DX11之后使用,用来取代.x格式,MeshConvert是一个命令行工具,使用方法如下 Usage: meshconvert <options> <input filename> <input filename> Input mesh filename. The input file can be of .x, .obj, or .sdkmesh format /o

游戏开发中的噪声算法

好久不见. 提交于 2019-11-27 06:22:22
目录 噪声 随机性 哈希性 平滑性 柏林噪声 原理 实现(二维) Simplex噪声 原理 实现(二维) Value噪声 原理 实现(二维) 可平铺的噪声 分形噪声 结语 噪声 噪声是游戏编程的常见技术,广泛应用于地形生成,图形学等多方面。 那么为什么要引入噪声这个概念呢?在程序中,我们经常使用直接使用最简单的rand()生成随机值,但它的问题在于生成的随机值太“随机”了,得到的值往往总是参差不齐,如下图使用随机值作为像素点的黑白程度: 而使用噪声,我们得到的值看起来虽然随机但平缓,这种图也看起来更自然和舒服: 而根据wiki,现在噪声类型已经有很多种类: 类别 名称 基于晶格的方法(Lattice based) Perlin噪声,Simplex噪声,Wavelet噪声,Value噪声 基于点的方法(Point based) Worley噪声 本文主要说明Perlin噪声,Simplex噪声,Value噪声这三种常见的噪声。 随机性 随机性是噪声的基础,不必多说。 哈希性 在《Minecraft》里,由于世界是无限大的,它以“Chunk”区块(25×25×100格子)为单位,只加载玩家附近的区块。也就是说,当玩家在移动时,它会卸载远离的区块,然后加载靠近的区块。 一个问题是,当玩家离开一个区块时,进入第二个区块,然后又回到第一个区块,此时玩家期望看到的第一个区块和之前看到的保持一致

翻译的一篇关于VBO的文章

邮差的信 提交于 2019-11-27 03:31:18
原文章地址: http://www.songho.ca/opengl/gl_vbo.html OpenGL Vertex Buffer Object (VBO) 创建VBO 绘制 VBO 更新 VBO 例子 GL_ARB_vertex_buffer_object 扩展通过提供顶点数组和显示列表(注:在最新版本的OpenGL中,显示列表已经被废弃)来提高OpenGL的绘制效率,同时除去了它们在实现中的一些缺点。顶点缓存对象(VBO) 将顶点数组的数据存储在高效的服务端显存中,这极大提高了数据传输效率。如果我们使用缓存对象来存储像素数据,它就被称作像素缓存对象(PBO)。 使用顶点数组可以减少函数调用的数量和冗余的共用顶点的数据传输。然而,顶点数组的缺点在于顶点数组函数都在用户端,这导致每次调用顶点数组时所有数据都必须重新发送到服务端显存。 另一方面,显示列表是服务端的函数,所以它避免了大量的数据传输;但是,一旦显示列表被编译,其中的数据便再也不能修改。 顶点数组对象(VBO)在服务端的高速内存(注:未必是显存)中为顶点数据创建“缓存对象”,并提供类似于曾在顶点数组中使用过的操作函数,比如glVertexPointer(), glNormglNormalPointer(), glTexCoordPointer(), 等等。 根据用户的要求(分为target模式和usage模式)

颜色和基础光照

你。 提交于 2019-11-27 00:44:55
一: 颜色 我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色。 那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色。 白色的阳光实际上是所有可见颜色的集合,物体吸收了其中的大部分颜色。它仅反射了代表物体颜色的部分,被反射颜色的组合就是我们所感知到的颜色。 当我们在OpenGL中创建一个光源时,我们希望给光源一个颜色。在上一段中我们有一个白色的太阳,所以我们也将光源设置为白色。 当我们把光源的颜色与物体的颜色值相乘,所得到的就是这个物体所反射的颜色(也就是我们所感知到的颜色) 。 二: 构建一个光照场景 首先我们需要一个物体来作为被投光(Cast the light)的对象,我们将使用前面教程中的立方体箱子。我们还需要一个物体来代表光源在3D场景中的位置。简单起见,我们依然使用一个立方体来代表光源。 首先需要一个顶点着色器来绘制箱子。与之前的顶点着色器相比,容器的顶点位置是保持不变的(虽然这一次我们不需要纹理坐标了),因此顶点着色器中没有新的代码。 更新你的顶点数据和属性指针使其与新的顶点着色器保持一致 因为我们还要创建一个表示灯(光源)的立方体,所以我们还要为这个灯创建一个专门的VAO。当然我们也可以让这个灯和其它物体使用同一个VAO,简单地对它的model(模型)矩阵做一些变换就好了

不规则的Ifc构件顶点提取方法

橙三吉。 提交于 2019-11-26 21:21:53
BIM模型中有很多不规则的构件,在IFC中这些不规则的构件一般用顶点的形式表示,顶点坐标提取路径: IfcObject->IfcProductDefinitionShape->IfcShapeRepresentation->Item属性->IfcExtrudedAreaSolid ->IfcArbitraryClosedProfileDef->IfcPolyline->IfcCartesianPoint revit中创建不规则形状并导出ifc文件 导入teslamanage中 自定义三角形楼板 常用的表面是矩形形状的构件属于规则构件,只有一个顶点坐标和长宽值(XDim,YDim),订单制需要自己推算 来源: https://www.cnblogs.com/herd/p/11935870.html

OpenGL学习笔记:单一纹理

守給你的承諾、 提交于 2019-11-26 17:16:46
#include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> #include <windows.h> #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" const unsigned int SCR_WIDTH = 800; const unsigned int SCR_HEIGHT = 600; // 定义顶点着色器 // 我们需要调整顶点着色器使其能够接受顶点坐标为一个顶点属性,并把坐标传给片段着色器 const char *vertexShaderSource = "#version 330 core\n" "layout (location = 0) in vec3 aPos;\n" "layout (location = 1) in vec3 aColor;\n" "layout (location = 2) in vec2 aTexCoord;\n" "out vec3 ourColor;\n" "out vec2 TexCoord;\n" "void main()\n" "{\n" " gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n" " ourColor = aColor;\n"

WebGL深度测试与α融合

て烟熏妆下的殇ゞ 提交于 2019-11-26 16:41:45
深度测试与α融合 本文是 WebGL电子书 的1.16节内容 大家都知道立方体的顶点数据经过顶点着色器、光栅、片元着色器等渲染管线单元处理后会得到立方体每个面的片元数据, 每个片元不仅包含RGB像素值,还有透明度分量A,片元的深度值Z,屏幕坐标(X,Y)等数据。 屏幕坐标(X,Y) 屏幕坐标指的是每一个片元的像素值在显示器canvas画布上的显示位置,如果一个网页上有多个canvas画布,或者打开多个包含canvas画布的网页窗口, 每一个引入WebGL的canvas的画布都有一个自己的屏幕坐标,这些不需要开发者管理控制,浏览器的WebGL图形系统会自动管理,每个canvas画布都有一个默认的帧缓存, 帧缓存颜色缓冲区中的数据会被图形显示系统扫描显示在帧缓存对应的canvas画布上。 片元的深度值Z 片元的深度值Z反应的是一个片元距离观察位置的远近,两个顶点之间的片元深度值Z来源与两个顶点z坐标值的插值计算,所有片元的深度值Z都存储在帧缓存的深度缓冲区中。 深度测试单元位于片元着色器之后,如果开启了渲染管线的深度测试单元,所有的片元会经过该功能单元的逐片元测试,通过比较片元深度值Z,WebGL图形系统默认沿着Z轴正方向观察, 同一个屏幕坐标位置的所有片元离观察点远的会被舍弃,只保留一个离眼睛近的片元,把它的像素值RGB存储到帧缓存的颜色缓冲区中。 如果渲染管线没有开启深度测试单元,

计算机图形学——顶点数组,缓存数组、索引...

╄→尐↘猪︶ㄣ 提交于 2019-11-26 12:59:47
以下操作只保证在兼容模式下可行,整理来自红宝书 顶点数组: 由于OpenGL需要进行大量的函数调用对几何图元进行渲染,为了减少函数调用次数以及相邻多边形的共享顶点的冗余处理,OpenGL提供了顶点数组函数, 1.1使用顶点数组的一般步骤是:激活最多可达八个数组,可用于存储不同类型的数据:顶点坐标、表面发现法线、RGBA颜色、辅助颜色、颜色索引、雾坐标、纹理坐标以及多边形的边界标志 实现函数: glEnableClientState(GLenum array) GLenum array可以是:GL_VERTEX_ARRAY,GL_COLOR_ARRAY,GL_INDEX_ARRAY,GL_NORMAL_ARRAY...等等具体可见红宝书第43页内容,如果使用光照,需要为每个顶点定义一条法线向量,需要同时激活表面法线数组和顶点坐标数组 用glDisableClientState()来关闭 1.2把数据放入数组,数组通过指向它们内存位置的指针进行访问 实现函数: void glVertexPointer(GLint size(每个顶点的坐标数量,必须是2/3/4),GLenum type(GL_SHORT,GL_INT,GL_FLOAT,GL_DOUBLE),GLsize stride(连续顶点之间的字节偏移量,为零时顶点紧密相连),const GLvoid *pointer

Unity基础之:UnityAPI的学习

自闭症网瘾萝莉.ら 提交于 2019-11-26 12:11:25
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址: http://www.cnblogs.com/raymondking123/ )以及微信公众号"优梦创客" 您可以自由转载,但必须加入完整的版权声明! Quaternion 表示旋转 矩阵 //9个浮点数,数据占用量大,且除了表示旋转外,还表示缩放((0,0),(1,1),(2,2)点表示x,y,z的三个缩放) //显卡使用 欧拉角 rotation,绕x,y,z轴的旋转量 //给定朝向的表示不惟一,通过限定yaw,roll在+-180度,pitch在+-90度可以解决该问题 (pitch,绕右向量旋转,点头;yaw,绕上向量旋转,摇头;roll,绕前方向,转头;常用于飞行模拟) //万向锁 如:一个平行于x轴的向量绕y轴旋转-90度,会平行于z轴,此时所有绕z轴的旋转都不再起作用 轴角对 //用旋转轴,旋转角度的对偶表示旋转 //旋转角无唯一 单位四元数:[1,0] 1是标量,0是零向量 四元数的模,4个数的平方和开根 identity :单位四元数 eulerAngles //返回四元数对应的欧拉角,是一个属性 W,x,y,z w表示转化后的旋转值,x,y,z表示转化后的旋转轴 LookRotation //给定一个方向向量,返回表示该方向旋转的四元数 public static Quaternion

脚本生命周期

﹥>﹥吖頭↗ 提交于 2019-11-26 03:11:09
Reset方法的调用机制 Reset方法可以重设为默认值。当用户点击监视面板上的内容按钮或者首次添加组件时被调用。这个函数只在编辑器模式下被调用。通常用于给定监视面板很好的默认值。 脚本生命周期 接下来,做出一下讲解:最先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,一般可以在这个地方将当前脚本禁用:this.enable=false,如果这样做了,则会直接跳转到OnDisable方法执行一次,然后其它的任何方法,都将不再被执行。 如果当前脚本处于可用状态,则正常的执行顺序是继续向下执行OnEnable,当然我们可以在另外一个脚本中实现这个脚本组件的启动:this.enab=true; 再向下执行,会进行一个判断,如果Start方法还没有被执行,则会被执行一次,如果已经被执行了,则不会再被执行。这是个什么意思呢?我们可以在某个脚本中将组件禁用this.enable=false,再启用时会转到OnEnable处执行,这时继续向下走,发现Start执行过了,将不再被执行。比如说:第一次启用时,将怪物的初始位置定在了(0,0,0)点,然后怪物可能会发生了位置的变换,后来被禁用了,再次启用时,不会让怪物又回到初始的(0,0,0)位置。 继续向后执行,就是Update了,然后是FixUpdate,再然后是LateUpdate,如果后面写了Reset