当前位置: 首页 > news >正文

知名排版网站怎么做一个网页

知名排版网站,怎么做一个网页,收费wordpress,南京市高淳县建设厅网站引言 在计算机图形中#xff0c;噪声是一个经常被讨论的话题。无论是为了制造自然的纹理#xff0c;还是为了模拟复杂的现实世界现象#xff0c;噪声函数都在其中起着关键作用。而在众多噪声函数中#xff0c;Perlin Simplex 噪声无疑是最受欢迎的一种。其原因不仅在于其干…引言 在计算机图形中噪声是一个经常被讨论的话题。无论是为了制造自然的纹理还是为了模拟复杂的现实世界现象噪声函数都在其中起着关键作用。而在众多噪声函数中Perlin Simplex 噪声无疑是最受欢迎的一种。其原因不仅在于其干净、快速的特性更因为其所提供的连续性和一致性非常适合图形渲染。本文将为你展示如何在C中实现一个Perlin Simplex噪声函数。 1. Perlin Simplex 噪声背后的原理 1.1 什么是Perlin噪声 Perlin噪声是由Ken Perlin在1983年为电影《Tron》开发的。它是一种渐变噪声不同于常规的随机噪声。渐变噪声的关键特性是它的连续性这意味着相邻的值会有某种逻辑上的联系而不是完全随机。 1.2 Simplex vs Classic Perlin噪声 尽管原始的Perlin噪声非常成功但Ken Perlin后来发现了一些可以改进的地方。这就是Simplex噪声的由来。与经典的Perlin噪声相比Simplex噪声提供了更少的视觉伪影更快的计算速度尤其在高维度的情况下。 2. C实现开始之前 为了实现Perlin Simplex噪声我们首先需要准备一些基础工具和数据结构。 2.1 导入必要的库 我们将使用C的标准库来完成大部分的工作 #include cmath #include vector #include algorithm2.2 定义基础数据结构 在进一步进行之前我们需要一个表示3D点的结构 struct Vector3 {float x, y, z;Vector3(float x 0.0f, float y 0.0f, float z 0.0f): x(x), y(y), z(z) {} };这样我们就有了一个简单的3D点来表示空间中的位置。 3. 网格与渐变向量 要理解Perlin Simplex噪声必须首先了解其背后的两个核心概念网格和渐变向量。 3.1 网格 首先我们假设空间被划分成了一个个的立方体。每个立方体都有一个整数坐标i, j, k。空间中的任何点都可以通过这三个坐标来定位。 3.2 渐变向量 为了生成噪声我们需要为每个立方体的角分配一个随机的3D向量这就是所谓的渐变向量。我们将使用一个预定义的数组来存储这些向量 std::vectorVector3 gradients;我们会在稍后的部分为这个数组分配随机向量。 注意为了简洁和清晰本文中的代码可能不是最优的或最完整的实现。为了获得完整的项目和更多的优化技巧请下载完整项目 4. 初始化渐变向量 为了生成连续的噪声我们需要确保每个顶点上的渐变向量是一致的。为此我们会使用一个预定义的渐变向量集并随机地为每个顶点选择一个向量。 4.1 预定义渐变向量集 我们可以选择以下12个3D向量作为预定义的渐变向量集 const std::vectorVector3 predefined_gradients {Vector3(1,1,0), Vector3(-1,1,0), Vector3(1,-1,0), Vector3(-1,-1,0),Vector3(1,0,1), Vector3(-1,0,1), Vector3(1,0,-1), Vector3(-1,0,-1),Vector3(0,1,1), Vector3(0,-1,1), Vector3(0,1,-1), Vector3(0,-1,-1) };4.2 为每个顶点分配渐变向量 接下来我们需要使用一种随机化策略为每个顶点分配一个渐变向量。为了保持结果的连续性我们使用一个hash函数来确保相同的输入总是产生相同的输出 int hash(int x, int y, int z) {int result x * 73856093 ^ y * 19349663 ^ z * 83492791;return result (predefined_gradients.size() - 1); }Vector3 getGradient(int x, int y, int z) {int hashedValue hash(x, y, z);return predefined_gradients[hashedValue]; }通过这种方式我们确保每个空间的顶点都被分配了一个固定的渐变向量。 5. 计算噪声值 有了渐变向量我们就可以开始计算Perlin Simplex噪声了。 5.1 计算权重 我们首先需要为空间中的每个点计算一个权重。权重是根据点与顶点的距离计算的 float weight(float distance) {float t 3.0f - 2.0f * distance;return t * t * t * (distance * distance * (6.0f * t - 15.0f) 10.0f); }5.2 为每个顶点计算贡献 接下来我们将计算空间中每个点受其相邻顶点的影响 float computeNoiseContribution(float x, float y, float z, int gridX, int gridY, int gridZ) {Vector3 gradient getGradient(gridX, gridY, gridZ);float distanceX x - (float)gridX;float distanceY y - (float)gridY;float distanceZ z - (float)gridZ;float dotProduct gradient.x * distanceX gradient.y * distanceY gradient.z * distanceZ;float weightValue weight(sqrt(distanceX * distanceX distanceY * distanceY distanceZ * distanceZ));return dotProduct * weightValue; }这个函数返回点x, y, z受顶点(gridX, gridY, gridZ)的影响。 5.3 计算总噪声值 现在我们可以为任意点计算其Perlin Simplex噪声值了 float computePerlinNoise(float x, float y, float z) {int intX (int)x;int intY (int)y;int intZ (int)z;float result 0.0f;for (int dx 0; dx 1; dx) {for (int dy 0; dy 1; dy) {for (int dz 0; dz 1; dz) {result computeNoiseContribution(x, y, z, intX dx, intY dy, intZ dz);}}}return result; }以上就是计算Perlin Simplex噪声值的过程。 这是第二部分的内容描述了如何在C中实现Perlin Simplex噪声。在接下来的部分我们将探讨如何优化和使用这个函数以及它在实际应用中的可能用途。 6. 优化和调整 虽然上述实现已经能够为我们生成Perlin Simplex噪声但在实际应用中我们通常需要进行一些优化和调整以适应特定的需求。 6.1 多重Octave 为了获得更丰富的噪声纹理我们通常会使用多个频率和振幅的噪声叠加。这种方法称为多重Octave。下面是如何实现它 float computeMultiOctavePerlinNoise(float x, float y, float z, int octaves, float persistence) {float total 0;float frequency 1;float amplitude 1;float maxValue 0;for(int i0; ioctaves; i) {total computePerlinNoise(x * frequency, y * frequency, z * frequency) * amplitude;maxValue amplitude;amplitude * persistence;frequency * 2;}return total / maxValue; }在这里octaves决定了噪声叠加的次数而persistence决定了每一次叠加时振幅的衰减。 6.2 无缝平铺 在某些应用中我们可能需要无缝地平铺噪声纹理。要实现这一点可以通过周期性地包装噪声值来实现 float computeTiledPerlinNoise(float x, float y, float z, float tileWidth) {float tiledX fmod(x, tileWidth) / tileWidth;float tiledY fmod(y, tileWidth) / tileWidth;float tiledZ fmod(z, tileWidth) / tileWidth;return computeMultiOctavePerlinNoise(tiledX, tiledY, tiledZ, 4, 0.5); }7. Perlin Simplex噪声的应用 Perlin Simplex噪声具有广泛的应用价值。以下是一些常见的应用场景 7.1 地形生成 可以使用Perlin Simplex噪声来创建自然且连续的地形高度图。 7.2 纹理生成 噪声可以帮助我们创建各种各样的自然纹理如云、水、火等。 7.3 模拟 在物理模拟中噪声可以为流体或火焰动画添加细节和随机性。 7.4 3D建模 在3D建模中噪声可用于产生随机的表面细节如岩石或树皮的纹理。 结论 Perlin Simplex噪声是图形学中的一个强大工具尤其是在需要模拟自然现象或创建复杂纹理的场合。本文为您提供了一个在C中实现该噪声的方法希望您能够利用这一技术为您的项目带来更多创意和实用性。 注意为了简洁和清晰本文中的代码可能不是最优的或最完整的实现。为了获得完整的项目和更多的优化技巧请下载完整项目
http://www.w-s-a.com/news/288414/

相关文章:

  • 高端响应式网站建设wordpress 全屏主题
  • 国内工程机械行业网站建设现状ui是什么意思
  • 成都网站开发哪家公司好出售家教网站模板
  • 订阅号做流量 那些电影如何链接网站温州市建设监理协会网站
  • 成都网站建设成功案例单招网商丘网站建设大全
  • 受欢迎的购物网站建设网推专员是做什么的
  • 商城网站前期准备湖南郴州建设局网站
  • 企业如何在自己的网站上做宣传外贸自建站可以自己做网站吗
  • 甘肃网站建设制作商网站空间哪家公司的好
  • 思途旅游网站建设系统用vscode做网站
  • 广州站改造最新消息半年工作总结ppt模板
  • logo模板下载网站推荐哪家网站开发培训好
  • 做外贸网站效果图页面关键词优化
  • 广平网站建设成都活动轨迹
  • 小型网站网站建设需要网络公司是什么行业
  • 滑动 手机网站 代码网页制作与设计讨论
  • 自己做网站处理图片用什么软件wordpress html5支持
  • 校园网站怎么建软文文案范文
  • 中国建设官方网站如何创建自己的软件
  • 来宾住房与城乡建设网站天津西青区怎么样
  • 西安网站建设培训班鄂州网页定制
  • 西部数码网站备份自己怎么做网站啊
  • h5网站开发用什么软件制作公司网站建设代理怎么做
  • 网站建设资料准备网上购物app有哪些
  • 沧州做网站优化哪家公司便宜国内百度云网站建设
  • 网站的最近浏览 怎么做龙岩市人才网最新招聘信息
  • 网站建设需要找工信部吗网站开发账务处理
  • 做那种的视频网站个体工商网站备案
  • 推广网官方推广网站中国建设招聘信息网站
  • 医院网站建设需要多少钱网络营销渠道可分为哪几种