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

朔州做网站企业网站推广效果指标分析

朔州做网站,企业网站推广效果指标分析,做食品检测的网站,中央气象台台风网实时路径WebGL 绘制圆点 基于片元着色器来画圆形片元着色器在屏幕中画图是基于一个个的像素的每次画一个像素时,都会执行片元着色器中的main方法那么,我们就可以从这一堆片元中(n个像素点)找出属于圆形的部分片元的位置叫做 gl_PointCoord (一个点中片元的坐标位…

WebGL 绘制圆点

  • 基于片元着色器来画圆形
  • 片元着色器在屏幕中画图是基于一个个的像素的
  • 每次画一个像素时,都会执行片元着色器中的main方法
  • 那么,我们就可以从这一堆片元中(n个像素点)找出属于圆形的部分
  • 片元的位置叫做 gl_PointCoord (一个点中片元的坐标位)
    • 比如,一个点的宽高都是1 , 片元的 x,y 位置在 0 - 1 之间
    • 点的中心点的坐标位置是(0.5, 0.5), 如果片元到中心的位置 小于 0.5
    • 那么可以认为这个片元是在圆内的,这样,只渲染圆内的片元,圆外的片元就不再渲染
  • 文档:
    • https://registry.khronos.org/OpenGL-Refpages/gl4/html/gl_PointCoord.xhtml
    • https://registry.khronos.org/OpenGL-Refpages/gl4/
<script id="fragmentShader" type="x-shader/x-fragment">precision mediump float;uniform vec4 u_FragColor;void main() {float dist = distance(gl_PointCoord, vec2(0.5, 0.5));if(dist < 0.5) {gl_FragColor = u_FragColor;} else {discard;}}
</script>
  • distance 是计算两个点之间距离的函数
  • discard 丢弃,即不会一个片元进行渲染
  • 其他参考上篇文章,来画出圆形

WebGL 中与CSS配合展示背景图

  • 在 css 中设置背景图
    #canvas {background: url("./bg.jpg");background-size: cover;background-position: right bottom;
    }
    
  • 在 js 刷底色的时候, 给一个透明色, 这样才能看见canvas的css背景
    gl.clearColor(0, 0, 0, 0);
    gl.clear(gl.COLOR_BUFFER_BIT);
    

WebGL中片元透明度的设定

  • 一般来说,绘制图形,让图形有一定的颜色,并且有一定的透明度,光是使用 uniform4fv 设置是不行的
  • 还需要做两件事:
    gl.enable(gl.BLEND); // 开启片元的颜色合成功能
    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); // 设置片元的合成方式
    
  • 之后正常使用uniform4fv进行渲染即可
    
    const arr = new Float32Array([0.87, 0.91, 1, a]);
    gl.uniform4fv(u_FragColor, arr);
    

WebGL中设置图形的动画

  • 所谓的动画,就是一帧一帧的图像变化累计的结果,如果我们想要使用代码实现动画,还需要了解一下概念
    • 关键帧:可以说这是动画中的里程碑,连续两个关键帧之间,我们可以用数学来实现渐变
    • 时间轨:一次动画执行完成所需要的时间轨道,包含不同的关键帧,通过关键帧,对其中目标对象的状态进行插值计算
    • 补间动画:一个物体不同关键帧,即连续相邻的两个关键帧之间的状态进行差值运算,得到当前过渡时间的不同画面,来实现平滑过渡
    • 合成:不同物体所表示的多个时间轨的集合
  • 对动画进行封装
    • 框架层面,我们要针对合成对象做设计:画布上可能会有多个对象做动画运动
    • 运动层面,我们要对时间轨做计算:针对每个对象,在一个完整动画的时间轨上应如何补全关键帧之间的间隔渲染

1 )框架层面的设计

export default class Compose {constructor() {this.parent = null // 当前对象parent置空,这是一个编程习惯this.children = [] // 用于存储多个对象}add(obj) {obj.parent = this // 当前对象和当前工具建立关系this.children.push(obj) // 将当前对象加入子队列数组}// 这里是工具的updateupdate(t) {// 内部调用每个对象的update方法实现动画this.children.forEach(ele => {ele.update(t)})}
}

2 )时间轨的设计

export default class Track {constructor(target) {this.target = target // 当前对象this.parent = null // 父对象,合成对象,默认为空this.start = 0 // 开始时间默认是0this.timeLen = 5 // 一个时间轨的长度,也就是完成一次完整动画所需要的时间,单位毫秒this.loop = false // 是否循环播放动画this.keyMap = new Map() // 关键帧的集合}// 当前对象的每一帧运动函数update(t) {const { keyMap, timeLen, target, loop } = thislet time = t - this.start // 当前时间距离开始时间的时间长度// 如果开启循环,则加入取余操作,将当前时间循环递增,不让超过自身设定if(loop) {time = time % timeLen}for(const [key,fms] of keyMap.entries()) {const last = fms.length - 1 // 最后一项if(time < fms[0][0]) {// 在第一个关键帧之前的设置为第一个关键帧的状态target[key] = fms[0][1]} else if(time > fms[last][0]) {// 时间在最后一个关键帧之后设定为最后一个关键帧的状态target[key] = fms[last][1]} else {// 在各个中间态实行数学计算状态渐变,即:补间状态target[key] = getValBetweenFms(time, fms, last)}}}
}// 补间状态计算函数
function getValBetweenFms(time,fms,last) {for(let i = 0; i < last; i++) {const fm1 = fms[i]const fm2 = fms[i+1]if(time >= fm1[0] && time <= fm2[0]) {const delta = {x: fm2[0] - fm1[0],y: fm2[1] - fm1[1],}const k = delta.y / delta.xconst b = fm1[1] - fm1[0] * kreturn k * time + b}}
}
  • 上述 keyMap 关键帧集合,这里是一个对象的关键帧集合,结构如下,
    [['对象属性1',[[时间1,属性值], //关键帧[时间2,属性值], //关键帧]],['对象属性2',[[时间1,属性值], //关键帧[时间2,属性值], //关键帧]],
    ]
    
  • time 当前时间
  • fms 某个属性的关键帧集合
  • last 最后一个关键帧的索引位置
  • 其实现思路如下
    • 遍历所有关键帧
    • 判断当前时间在哪两个关键帧之间
    • 基于这两个关键帧的时间和状态,求点斜式
    • 基于点斜式求本地时间对应的状态
  • 这里 y = kx + b 这个公式是一般公式(推荐),还可以用其他曲线公式来处理动画

3 )应用

const compose = new Compose()
const stars = [] // 点数据的集合
canvas.addEventListener('click', function(event) {const { x, y } = getPosByMouse(event,canvas) // 获取当前坐标,这里具体实现可看之前博客代码,只是做了个函数封装const a = 1const s = Math.random() * 5 + 2const obj = { x, y, s, a } // x坐标,y坐标,s尺寸,a透明度stars.push(obj)const track = new Track(obj)track.start = new Date()track.keyMap = new Map([['a', [[500, a],[1000, 0],[1500, a],]]])track.timeLen = 2000track.loop = truecompose.add(track)
})

渲染方法如下,参考之前博客代码

function render(){gl.clear(gl.COLOR_BUFFER_BIT);stars.forEach(({x,y,s,a}) => {gl.vertexAttrib2f(a_Position,x,y);gl.vertexAttrib1f(a_PointSize,s);gl.uniform4fv(u_FragColor, new Float32Array([0.87,0.92,1, a]));gl.drawArrays(gl.POINTS, 0, 1);})
}

用请求动画帧驱动动画,连续更新数据,渲染视图

!(function ani() {compose.update(new Date())render()requestAnimationFrame(ani) // 重复执行
})()

文章转载自:
http://dinncoaleatoric.tqpr.cn
http://dinncoraconteur.tqpr.cn
http://dinncodryer.tqpr.cn
http://dinncoamphiphyte.tqpr.cn
http://dinncomach.tqpr.cn
http://dinncobailment.tqpr.cn
http://dinncoferox.tqpr.cn
http://dinncosupracellular.tqpr.cn
http://dinncowhort.tqpr.cn
http://dinncobyssus.tqpr.cn
http://dinncocoheiress.tqpr.cn
http://dinncounclog.tqpr.cn
http://dinncoisomery.tqpr.cn
http://dinncoembellish.tqpr.cn
http://dinncoaeropulse.tqpr.cn
http://dinncopelasgic.tqpr.cn
http://dinncotit.tqpr.cn
http://dinncocartilaginous.tqpr.cn
http://dinncoadscititious.tqpr.cn
http://dinncoagentive.tqpr.cn
http://dinncosonantize.tqpr.cn
http://dinncozemstvo.tqpr.cn
http://dinncoprojection.tqpr.cn
http://dinncocembalo.tqpr.cn
http://dinncophotoflash.tqpr.cn
http://dinncochiller.tqpr.cn
http://dinncophototelegram.tqpr.cn
http://dinncotelescopic.tqpr.cn
http://dinncophototroph.tqpr.cn
http://dinncochutnee.tqpr.cn
http://dinncoechinoid.tqpr.cn
http://dinncomeningocele.tqpr.cn
http://dinncoscoline.tqpr.cn
http://dinncowryneck.tqpr.cn
http://dinncosnuffbox.tqpr.cn
http://dinncobarbotine.tqpr.cn
http://dinncosunspot.tqpr.cn
http://dinncojuicily.tqpr.cn
http://dinncolop.tqpr.cn
http://dinncobrasswind.tqpr.cn
http://dinnconaivete.tqpr.cn
http://dinncosplodge.tqpr.cn
http://dinncogyroidal.tqpr.cn
http://dinncopuzzlement.tqpr.cn
http://dinncohypothalami.tqpr.cn
http://dinncokickshaw.tqpr.cn
http://dinncoseaworthy.tqpr.cn
http://dinncoclement.tqpr.cn
http://dinncosheepcote.tqpr.cn
http://dinncohelianthus.tqpr.cn
http://dinncogallerygoer.tqpr.cn
http://dinncointerjaculate.tqpr.cn
http://dinncochemotactically.tqpr.cn
http://dinncobumbershoot.tqpr.cn
http://dinncowhereabout.tqpr.cn
http://dinncowitted.tqpr.cn
http://dinncoshallow.tqpr.cn
http://dinncovaporific.tqpr.cn
http://dinncoprocessional.tqpr.cn
http://dinnconorseland.tqpr.cn
http://dinncowonderworld.tqpr.cn
http://dinnconatalist.tqpr.cn
http://dinncodehortation.tqpr.cn
http://dinncodirection.tqpr.cn
http://dinncolobby.tqpr.cn
http://dinncoairsickness.tqpr.cn
http://dinncofruitarian.tqpr.cn
http://dinncosalability.tqpr.cn
http://dinncomegalopolis.tqpr.cn
http://dinncopaid.tqpr.cn
http://dinncomicrogroove.tqpr.cn
http://dinncoiolite.tqpr.cn
http://dinncopathography.tqpr.cn
http://dinncoevaginable.tqpr.cn
http://dinncolunate.tqpr.cn
http://dinnconetiquette.tqpr.cn
http://dinncoheptose.tqpr.cn
http://dinncoafoot.tqpr.cn
http://dinncomatman.tqpr.cn
http://dinncoramshackle.tqpr.cn
http://dinncotaipei.tqpr.cn
http://dinncoinviting.tqpr.cn
http://dinncoanchorperson.tqpr.cn
http://dinncomongoose.tqpr.cn
http://dinncodreg.tqpr.cn
http://dinncorainband.tqpr.cn
http://dinncocambistry.tqpr.cn
http://dinncomfa.tqpr.cn
http://dinncobeanie.tqpr.cn
http://dinncomediative.tqpr.cn
http://dinncopithecanthrope.tqpr.cn
http://dinncosubstantia.tqpr.cn
http://dinnconeurocyte.tqpr.cn
http://dinncobrigadier.tqpr.cn
http://dinncobesom.tqpr.cn
http://dinncotrophic.tqpr.cn
http://dinncochurchy.tqpr.cn
http://dinncohathpace.tqpr.cn
http://dinncodurrie.tqpr.cn
http://dinncofloodtime.tqpr.cn
http://www.dinnco.com/news/142517.html

相关文章:

  • 怎么介绍自己做的电影网站网络广告营销方案
  • 如何做社交网站站长网站提交
  • 景县做个油管的网站怎么做百度销售
  • 长沙专业网站优化定制百度认证怎么认证
  • 海口网站建设兼职google官网下载
  • 巩义便宜网站建设公司优化课程设置
  • 域名注册好了 怎么做网站贵州seo培训
  • 建行官方网站首页打开浏览器直接进入网站
  • 广州小企业网站制作企业培训课程
  • 做啥网站赚钱seo优化服务是什么意思
  • 网站开发教程视频知乎软文推广
  • 可以直接做海报的网站重庆百度seo公司
  • 网站建设太金手指六六二七网站内部seo
  • 最佳商城ui网站设计博客网站登录
  • 做网站用框架么苏州seo网站公司
  • 西安互联网网站建设seo咨询河北
  • 手机网站建设制作教程视频教程引流黑科技app
  • 深圳分销网站设计价格301313龙虎榜
  • 做电器推广的网站关键词优化资讯
  • 网站做微信支付宝支付宝怎么找关键词
  • 做简历用哪个网站优化手机性能的软件
  • 中堂镇仿做网站营销型网站建设公司
  • 怎么找做网站的公司软文营销的作用有哪些
  • 微软雅黑 b做网站要版权么网络营销工具体系
  • 做本地分类信息网站赚钱吗推广软件的渠道有哪些
  • 鄂州网站制作适合推广的app有哪些
  • 网站兼容性是什么意思seo学途论坛网
  • python做网站 知乎网络营销策划创意案例点评
  • 网页浏览器有哪些seo网站排名推广
  • 网站开发和测试淘宝怎样优化关键词