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

做赛事下注网站违法吗什么是seo标题优化

做赛事下注网站违法吗,什么是seo标题优化,做网站要找什么人,站台建筑本实例主要讲解内容 这个Three.js示例展示了WebGL 2环境下的整数属性渲染技术。通过创建大量随机分布的三角形,并为每个三角形分配不同的整数索引,实现了基于索引动态选择纹理的效果。 核心技术包括: WebGL 2环境下的整数属性支持顶点着色…

本实例主要讲解内容

这个Three.js示例展示了WebGL 2环境下的整数属性渲染技术。通过创建大量随机分布的三角形,并为每个三角形分配不同的整数索引,实现了基于索引动态选择纹理的效果。

核心技术包括:

  • WebGL 2环境下的整数属性支持
  • 顶点着色器与片段着色器中的整数变量传递
  • 多纹理动态切换
  • 几何体与材质的自定义着色器实现

在这里插入图片描述

完整代码注释

<!DOCTYPE html>
<html lang="en"><head><title>three.js WebGL 2 - buffergeometry - integer attributes</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><link type="text/css" rel="stylesheet" href="main.css"></head><body><div id="container"></div><div id="info"><a href="https://threejs.org" target="_blank" rel="noopener">three.js</a> WebGL 2 - buffergeometry - integer attributes</div><script type="importmap">{"imports": {"three": "../build/three.module.js","three/addons/": "./jsm/"}}</script><script type="module">import * as THREE from 'three';let camera, scene, renderer, mesh;init();function init() {// 初始化相机camera = new THREE.PerspectiveCamera( 27, window.innerWidth / window.innerHeight, 1, 3500 );camera.position.z = 2500;// 初始化场景scene = new THREE.Scene();scene.background = new THREE.Color( 0x050505 );scene.fog = new THREE.Fog( 0x050505, 2000, 3500 );// 创建几何体const triangles = 10000; // 三角形数量const geometry = new THREE.BufferGeometry();// 存储顶点位置、UV坐标和纹理索引const positions = [];const uvs = [];const textureIndices = [];// 三角形分布范围和大小const n = 800, n2 = n / 2; // 三角形分布的立方体范围const d = 50, d2 = d / 2; // 单个三角形的大小// 生成随机三角形for ( let i = 0; i < triangles; i ++ ) {// 随机位置const x = Math.random() * n - n2;const y = Math.random() * n - n2;const z = Math.random() * n - n2;// 三角形的三个顶点const ax = x + Math.random() * d - d2;const ay = y + Math.random() * d - d2;const az = z + Math.random() * d - d2;const bx = x + Math.random() * d - d2;const by = y + Math.random() * d - d2;const bz = z + Math.random() * d - d2;const cx = x + Math.random() * d - d2;const cy = y + Math.random() * d - d2;const cz = z + Math.random() * d - d2;// 添加顶点位置positions.push( ax, ay, az );positions.push( bx, by, bz );positions.push( cx, cy, cz );// 添加UV坐标uvs.push( 0, 0 );uvs.push( 0.5, 1 );uvs.push( 1, 0 );// 添加纹理索引(0,1,2 循环)const t = i % 3;textureIndices.push( t, t, t );}// 设置几何体属性geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );geometry.setAttribute( 'uv', new THREE.Float32BufferAttribute( uvs, 2 ) );geometry.setAttribute( 'textureIndex', new THREE.Int16BufferAttribute( textureIndices, 1 ) );geometry.attributes.textureIndex.gpuType = THREE.IntType; // 指定GPU使用整数类型geometry.computeBoundingSphere(); // 计算边界球体// 加载纹理const loader = new THREE.TextureLoader();const map1 = loader.load( 'textures/crate.gif' );const map2 = loader.load( 'textures/floors/FloorsCheckerboard_S_Diffuse.jpg' );const map3 = loader.load( 'textures/terrain/grasslight-big.jpg' );// 创建自定义着色器材质const material = new THREE.ShaderMaterial( {uniforms: {uTextures: {value: [ map1, map2, map3 ] // 纹理数组}},vertexShader: /* glsl */`in int textureIndex; // 从几何体传入的纹理索引(整数)flat out int vIndex; // "flat" 表示不进行插值(整数属性必须)out vec2 vUv; // UV坐标void main()	{vIndex = textureIndex;vUv = uv;gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );}`,fragmentShader: /* glsl */`flat in int vIndex; // 从顶点着色器传入的纹理索引in vec2 vUv; // UV坐标uniform sampler2D uTextures[ 3 ]; // 纹理数组out vec4 outColor; // 输出颜色void main()	{// 根据索引选择不同的纹理if ( vIndex == 0 ) outColor = texture( uTextures[ 0 ], vUv );else if ( vIndex == 1 ) outColor = texture( uTextures[ 1 ], vUv );else if ( vIndex == 2 ) outColor = texture( uTextures[ 2 ], vUv );}`,side: THREE.DoubleSide, // 双面渲染glslVersion: THREE.GLSL3 // 使用GLSL 3.0} );// 创建网格并添加到场景mesh = new THREE.Mesh( geometry, material );scene.add( mesh );// 初始化渲染器(必须支持WebGL 2)renderer = new THREE.WebGLRenderer( { antialias: true } );renderer.setPixelRatio( window.devicePixelRatio );renderer.setSize( window.innerWidth, window.innerHeight );renderer.setAnimationLoop( animate );document.body.appendChild( renderer.domElement );}// 动画循环function animate() {const time = Date.now() * 0.001;// 旋转网格mesh.rotation.x = time * 0.25;mesh.rotation.y = time * 0.5;renderer.render( scene, camera );}</script></body>
</html>

WebGL 2整数属性技术解析

WebGL 2与整数属性

WebGL 2相比WebGL 1提供了更强大的功能,包括对整数数据类型的直接支持:

  1. 整数顶点属性:WebGL 2允许在顶点着色器中使用整数类型的属性,这在WebGL 1中是受限的
  2. 更高的精度:支持16位和32位整数,提供更精确的数据表示
  3. 更高效的数据传输:整数数据可以更高效地从CPU传输到GPU
  4. 简化的着色器逻辑:避免了在WebGL 1中需要将整数编码为浮点数的复杂操作

在本示例中,我们使用了Int16BufferAttributeTHREE.IntType来定义和指定整数属性。

顶点着色器与片段着色器通信

在着色器编程中,数据从顶点着色器传递到片段着色器需要特别注意:

  1. 插值行为:默认情况下,顶点着色器输出的变量会在光栅化阶段进行插值,这对于浮点数是合适的,但对于整数会导致错误
  2. flat限定符:使用flat限定符可以禁止插值,确保每个片段接收到的是顶点的原始整数值
  3. 数据类型匹配:顶点着色器和片段着色器中的变量类型必须严格匹配

在本示例中,我们使用了flat out int vIndexflat in int vIndex来确保整数数据正确传递。

多纹理动态选择

本示例展示了如何基于整数属性动态选择不同的纹理:

  1. 纹理数组:在着色器中定义uniform sampler2D uTextures[3]来存储多个纹理
  2. 条件判断:在片段着色器中使用if-else语句根据整数索引选择相应的纹理
  3. 高效切换:通过整数索引直接访问纹理数组,避免了使用多个材质的开销

这种技术在需要大量不同纹理的场景中非常有用,比如地形渲染、角色换装系统等。

性能优化考虑

使用整数属性和自定义着色器时,需要注意以下几点:

  1. 数据类型选择:根据实际需求选择合适的整数类型(Byte, Short, Int),避免浪费GPU内存
  2. 批处理:将多个具有相同材质的对象合并为一个,减少Draw Call
  3. 纹理管理:确保纹理尺寸合理,并考虑使用纹理图集(Texture Atlas)减少纹理切换
  4. 着色器复杂度:避免在片段着色器中使用复杂的条件判断,可能影响性能

这种技术适用于需要在单个几何体上应用多种纹理或材质属性的场景,通过减少材质和Draw Call数量来提高渲染性能。

http://www.dtcms.com/wzjs/508112.html

相关文章:

  • 网站开发怎么谈查排名的软件有哪些
  • gdrp wordpress插件网站建设推广优化
  • 做网站过程中的自身不足人力资源培训机构
  • 深圳网站建设公司联系方式优化网站找哪家
  • 深圳商城网站设计制作企业网站建设方案范文
  • b2c网站的功能有哪些安徽搜索引擎优化seo
  • 重庆网上制作网站色目人
  • 哪里医院做无痛人流便宜 咨询网站在线代写文章价格表
  • 石家庄网站设计外贸网络推广怎么做
  • 网站模板及素材天津seo培训机构
  • wordpress网站如何引流seo专业优化公司
  • 广州网站设计成功柚米科技google网站登录入口
  • 怎么做网站流量附近的教育培训机构有哪些
  • 黄山网站开发抖音营销软件
  • 网站建设售后协议小网站广告投放
  • 网站几种颜色新品推广策划方案
  • 龙华做网站哪家便宜上海网络营销
  • 美国网站加速器wordpress
  • 做网站分期付款比例百度云
  • 网站开发服务外包合同企业邮箱登录入口
  • 怎样在手机上面建设网站如何制作一个个人网站
  • 商业网站建设案例课程百度云杭州seo薪资水平
  • 深圳惠州网站建设合肥百度推广公司哪家好
  • 有没有网站学做总结泰安网站seo推广
  • 深圳龙岗网站建设哪家好公司网络游戏推广怎么做
  • 免费微网站怎么做百度指数属于行业趋势及人群
  • 怎么配置网站服务器深圳网站建设找哪家公司好
  • 点击最多的网站bt磁力搜索器
  • 个人网站不能有盈利性质友情链接出售
  • 武汉网站建设网站推广seo流量是什么