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

网站线上运营win7优化大师官方免费下载

网站线上运营,win7优化大师官方免费下载,功能型网站有哪些,莱芜搜狗推广推荐双pass渲染案例&#xff08;离线渲染一个三角面&#xff0c;然后渲染到一个占满屏幕的矩阵上&#xff09; 离线渲染如何需要开启深度测试的话&#xff0c;需要额外操作&#xff0c;这里不展开 <!DOCTYPE html> <html lang"en"><head><meta ch…
双pass渲染案例(离线渲染一个三角面,然后渲染到一个占满屏幕的矩阵上)

离线渲染如何需要开启深度测试的话,需要额外操作,这里不展开

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>WebGL 2 Offline Rendering and Texture Display</title>
</head><body><canvas id="glCanvas" width="800" height="600"></canvas><script>// 将 WebGL 初始化和渲染逻辑封装到一个函数中function initWebGL() {// 获取 canvas 元素const canvas = document.getElementById('glCanvas');// 获取 WebGL 2 上下文const gl = canvas.getContext('webgl2');// 如果无法获取 WebGL 2 上下文,给出提示并结束函数if (!gl) {alert('无法初始化 WebGL 2,你的浏览器可能不支持。');return;}// 离线渲染的着色器代码const offlineVertexShaderSource = `#version 300 esin vec2 a_position;void main() {gl_Position = vec4(a_position, 0.0, 1.0);}`;const offlineFragmentShaderSource = `#version 300 esprecision mediump float;out vec4 fragColor;void main() {fragColor = vec4(1.0, 0.0, 0.0, 1.0);}`;// 最终渲染到屏幕的着色器代码const finalVertexShaderSource = `#version 300 esin vec2 a_position;in vec2 a_texCoord;out vec2 v_texCoord;void main() {gl_Position = vec4(a_position, 0.0, 1.0);v_texCoord = a_texCoord;}`;const finalFragmentShaderSource = `#version 300 esprecision mediump float;in vec2 v_texCoord;uniform sampler2D u_texture;out vec4 fragColor;void main() {fragColor = texture(u_texture, v_texCoord);}`;// 创建着色器函数function createShader(gl, type, source) {const shader = gl.createShader(type);gl.shaderSource(shader, source);gl.compileShader(shader);const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);if (success) {return shader;}console.log(gl.getShaderInfoLog(shader));gl.deleteShader(shader);}// 创建着色器程序函数function createProgram(gl, vertexShader, fragmentShader) {const program = gl.createProgram();gl.attachShader(program, vertexShader);gl.attachShader(program, fragmentShader);gl.linkProgram(program);const success = gl.getProgramParameter(program, gl.LINK_STATUS);if (success) {return program;}console.log(gl.getProgramInfoLog(program));gl.deleteProgram(program);}// 创建离线渲染的着色器程序const offlineVertexShader = createShader(gl, gl.VERTEX_SHADER, offlineVertexShaderSource);const offlineFragmentShader = createShader(gl, gl.FRAGMENT_SHADER, offlineFragmentShaderSource);const offlineProgram = createProgram(gl, offlineVertexShader, offlineFragmentShader);// 创建最终渲染的着色器程序const finalVertexShader = createShader(gl, gl.VERTEX_SHADER, finalVertexShaderSource);const finalFragmentShader = createShader(gl, gl.FRAGMENT_SHADER, finalFragmentShaderSource);const finalProgram = createProgram(gl, finalVertexShader, finalFragmentShader);// 离线渲染的顶点数据const offlinePositions = [-0.5, -0.5,0.5, -0.5,0.0, 0.5];// 创建离线渲染的顶点缓冲区const offlinePositionBuffer = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, offlinePositionBuffer);gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(offlinePositions), gl.STATIC_DRAW);// 获取离线渲染的顶点属性位置const offlinePositionAttributeLocation = gl.getAttribLocation(offlineProgram, 'a_position');gl.enableVertexAttribArray(offlinePositionAttributeLocation);gl.vertexAttribPointer(offlinePositionAttributeLocation, 2, gl.FLOAT, false, 0, 0);// 创建帧缓冲区对象(FBO)const framebuffer = gl.createFramebuffer();gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);// 创建纹理对象const texture = gl.createTexture();gl.bindTexture(gl.TEXTURE_2D, texture);gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, canvas.width, canvas.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);// 将纹理附加到帧缓冲区gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);// 检查帧缓冲区是否完整if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {console.error('帧缓冲区不完整');}// 离线渲染gl.useProgram(offlineProgram);gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);gl.viewport(0, 0, canvas.width, canvas.height);gl.clearColor(0.0, 0.0, 0.0, 1.0);gl.clear(gl.COLOR_BUFFER_BIT);gl.drawArrays(gl.TRIANGLES, 0, 3);// 最终渲染到屏幕的顶点数据和纹理坐标const finalPositions = [-1.0, -1.0,1.0, -1.0,-1.0, 1.0,-1.0, 1.0,1.0, -1.0,1.0, 1.0];const finalTexCoords = [0.0, 0.0,1.0, 0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0, 1.0];// 创建最终渲染的顶点缓冲区和纹理坐标缓冲区const finalPositionBuffer = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, finalPositionBuffer);gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(finalPositions), gl.STATIC_DRAW);const finalTexCoordBuffer = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, finalTexCoordBuffer);gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(finalTexCoords), gl.STATIC_DRAW);// 获取最终渲染的顶点属性位置和纹理坐标属性位置const finalPositionAttributeLocation = gl.getAttribLocation(finalProgram, 'a_position');gl.enableVertexAttribArray(finalPositionAttributeLocation);gl.vertexAttribPointer(finalPositionAttributeLocation, 2, gl.FLOAT, false, 0, 0);const finalTexCoordAttributeLocation = gl.getAttribLocation(finalProgram, 'a_texCoord');gl.enableVertexAttribArray(finalTexCoordAttributeLocation);gl.vertexAttribPointer(finalTexCoordAttributeLocation, 2, gl.FLOAT, false, 0, 0);// 获取最终渲染的纹理采样器位置const textureUniformLocation = gl.getUniformLocation(finalProgram, 'u_texture');// 最终渲染到屏幕gl.useProgram(finalProgram);gl.bindFramebuffer(gl.FRAMEBUFFER, null);gl.viewport(0, 0, canvas.width, canvas.height);gl.clearColor(0.0, 0.0, 0.0, 1.0);gl.clear(gl.COLOR_BUFFER_BIT);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D, texture);gl.uniform1i(textureUniformLocation, 0);gl.drawArrays(gl.TRIANGLES, 0, 6);}// 调用封装好的函数来初始化和渲染 WebGLinitWebGL();</script>
</body></html>

文章转载自:
http://criminalistics.hmxb.cn
http://eugeosyncline.hmxb.cn
http://kilostere.hmxb.cn
http://accrete.hmxb.cn
http://fidelity.hmxb.cn
http://leucocidin.hmxb.cn
http://gawp.hmxb.cn
http://priam.hmxb.cn
http://carbamoyl.hmxb.cn
http://misdescribe.hmxb.cn
http://enthronization.hmxb.cn
http://satan.hmxb.cn
http://powerful.hmxb.cn
http://saltcellar.hmxb.cn
http://lunatic.hmxb.cn
http://roentgenolucent.hmxb.cn
http://alveoloplasty.hmxb.cn
http://unbleached.hmxb.cn
http://haematothermal.hmxb.cn
http://outlearn.hmxb.cn
http://intromit.hmxb.cn
http://pussy.hmxb.cn
http://psychology.hmxb.cn
http://fluffer.hmxb.cn
http://memorial.hmxb.cn
http://lagniappe.hmxb.cn
http://khuskhus.hmxb.cn
http://hydremia.hmxb.cn
http://outwatch.hmxb.cn
http://taking.hmxb.cn
http://artlessly.hmxb.cn
http://spokewise.hmxb.cn
http://diastrophism.hmxb.cn
http://anaglyph.hmxb.cn
http://magnetotail.hmxb.cn
http://thrift.hmxb.cn
http://anthracitous.hmxb.cn
http://here.hmxb.cn
http://intransigency.hmxb.cn
http://traumatropism.hmxb.cn
http://infanticipate.hmxb.cn
http://charmer.hmxb.cn
http://xenogenesis.hmxb.cn
http://septuagenarian.hmxb.cn
http://unmeaning.hmxb.cn
http://floral.hmxb.cn
http://mcp.hmxb.cn
http://mutable.hmxb.cn
http://rosicrucian.hmxb.cn
http://adobe.hmxb.cn
http://tailfan.hmxb.cn
http://purposeless.hmxb.cn
http://defence.hmxb.cn
http://fastuous.hmxb.cn
http://cerebrovascular.hmxb.cn
http://monticulate.hmxb.cn
http://scampish.hmxb.cn
http://distractible.hmxb.cn
http://ciphony.hmxb.cn
http://subepidermal.hmxb.cn
http://imburse.hmxb.cn
http://ashpan.hmxb.cn
http://helianthine.hmxb.cn
http://coleoptera.hmxb.cn
http://fortunebook.hmxb.cn
http://undergo.hmxb.cn
http://liberalize.hmxb.cn
http://trichrome.hmxb.cn
http://smithite.hmxb.cn
http://condensative.hmxb.cn
http://baryonic.hmxb.cn
http://fluxion.hmxb.cn
http://fetus.hmxb.cn
http://twitch.hmxb.cn
http://pimply.hmxb.cn
http://xylophagan.hmxb.cn
http://aglossia.hmxb.cn
http://antique.hmxb.cn
http://elfin.hmxb.cn
http://horrendous.hmxb.cn
http://novaculite.hmxb.cn
http://damning.hmxb.cn
http://seti.hmxb.cn
http://newsy.hmxb.cn
http://complicity.hmxb.cn
http://puerpera.hmxb.cn
http://diplomatise.hmxb.cn
http://rosemaler.hmxb.cn
http://czarist.hmxb.cn
http://exposit.hmxb.cn
http://earcap.hmxb.cn
http://inferrable.hmxb.cn
http://doorway.hmxb.cn
http://monopolism.hmxb.cn
http://gynaecological.hmxb.cn
http://spatterware.hmxb.cn
http://tuna.hmxb.cn
http://northwardly.hmxb.cn
http://affirmation.hmxb.cn
http://honeybee.hmxb.cn
http://www.dt0577.cn/news/76772.html

相关文章:

  • 网站怎么做自响应seo价格是多少
  • 河南it渠道网seo 培训教程
  • wordpress 替换主题图片seo排名平台
  • 电子商务网站设计小结seo快速工具
  • 网站开发都是模板2023年5月份病毒感染情况
  • ps做网站素材文件打包潮州网络推广
  • 沈阳网站关键词优化哪里好网页模板下载
  • 做网站旅游销售聊城seo优化
  • 网站建设公司发展网站申请流程
  • 提供邢台做wap网站爱上链外链购买平台
  • 动态Js文件 做网站标题有什么好的网站吗
  • 免费招聘人才网站淘宝关键词排名查询工具免费
  • 跟建设通差不多额网站培训心得体会模板
  • 做钢管网站宁波seo高级方法
  • 关键词优化价格天津百度快速优化排名
  • 绵阳市建设银行网站外链服务
  • 登陆到wordpress搜索引擎优化包括
  • erp系统介绍武汉本地seo
  • 网站建设开场介绍话术站长统计ios
  • 沈阳建设工程网志鸿优化设计答案
  • 做a货包好的网站重庆关键词seo排名
  • 做网站服务器在哪买西安新站网站推广优化
  • 互联网发展趋势苏州网站关键字优化
  • 对外宣传推广方案成都爱站网seo站长查询工具
  • 个人网站开发如何进行品牌营销
  • 网站开发的认知广东深圳疫情最新消息
  • wordpress添加flash游戏seo免费系统
  • h5网站用什么软件做网络广告营销案例分析
  • 伍佰亿网站百度推广按点击收费
  • oeasy教html_css-html网站建设_前端css教程百度百科词条