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

北京营销型网站建设培训班石家庄做网站多少钱

北京营销型网站建设培训班,石家庄做网站多少钱,宿迁发布最新通告,html5网站管理系统接下来让我们使用 UniformBuffer。UniformBuffer 是一个只读内存区域,可以在着色器上访问。 这次,我们将传递给着色器的矩阵存储在 UniformBuffer 中。演示示例 1.在顶点着色器中的 UniformBuffer 这次我们在顶点着色器里定义一个名为Uniforms的新结构体…

接下来让我们使用 UniformBuffer。UniformBuffer 是一个只读内存区域,可以在着色器上访问。
这次,我们将传递给着色器的矩阵存储在 UniformBuffer 中。演示示例

1.在顶点着色器中的 UniformBuffer

这次我们在顶点着色器里定义一个名为Uniforms的新结构体,并定义一些成员变量来将我们想要传递的矩阵存储在其中。我们准备了三个矩阵:投影矩阵projectionMatrix 、视图矩阵viewMatrix 和世界矩阵worldMatrix(或者说模型矩阵)。

struct Uniforms {projectionMatrix : mat4x4<f32>,viewMatrix : mat4x4<f32>,worldMatrix : mat4x4<f32>,
}
@binding(0) @group(0) var<uniform> uniforms : Uniforms;struct VertexOutput {@builtin(position) Position : vec4<f32>,@location(0) fragColor : vec4<f32>,
}@vertex
fn main(@location(0) position: vec4<f32>,@location(1) color: vec4<f32>
) -> VertexOutput {var output : VertexOutput;output.Position = uniforms.projectionMatrix * uniforms.viewMatrix * uniforms.worldMatrix * position;output.fragColor = color;return output;
}

2.生成UniformBuffer

下面是生成 UniformBuffer 的代码。

  const uniformBufferSize = 4 /* bytes */ * 16 * 3; // 4x4 matrix * 3const uniformBuffer = g_device.createBuffer({size: uniformBufferSize,usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,});

usage除了GPUBufferUsage.UNIFORM的选项,还有一个GPUBufferUsage.COPY_DST选项,这个选项是用来表明将数据复制到 GPU 内存区域。

3.复制矩阵到UniformBuffer

然后将具体的矩阵数据复制到 UniformBuffer 中,这次我们使用 glMatrix 库来处理矩阵。

function getTransformationMatrix(uniformBuffer: GPUBuffer) {const projectionMatrix = glMatrix.mat4.create();glMatrix.mat4.perspective(projectionMatrix, (2 * Math.PI) / 5, 1, 1, 100.0);g_device.queue.writeBuffer(uniformBuffer,4 * 16 * 0,projectionMatrix.buffer,projectionMatrix.byteOffset,projectionMatrix.byteLength);const viewMatrix = glMatrix.mat4.create();glMatrix.mat4.translate(viewMatrix, viewMatrix, glMatrix.vec3.fromValues(0, 0, -4));g_device.queue.writeBuffer(uniformBuffer,4 * 16 * 1,viewMatrix.buffer,viewMatrix.byteOffset,viewMatrix.byteLength);const worldMatrix = glMatrix.mat4.create();const now = Date.now() / 1000;glMatrix.mat4.rotate(worldMatrix,worldMatrix,1,glMatrix.vec3.fromValues(Math.sin(now), Math.cos(now), 0));g_device.queue.writeBuffer(uniformBuffer,4 * 16 * 2,worldMatrix.buffer,worldMatrix.byteOffset,worldMatrix.byteLength);
}

设置每个矩阵后,使用g_device.queue.writeBuffer将数据复制到 GPU 上的 UniformBuffer。 注意第二个参数指定了复制目标的偏移量,它指定应放置每个矩阵数据的起始地址。

4.生成GPUBindGroup

接下来,创建一个名为 GPUBindGroup 的对象。WebGPU 在为 GPU 设置 GPU 资源(例如 UniformBuffers、纹理和采样器)时使用此对象。

前面创建的 uniformBuffer 设置为entities[0].resource.buffer

  const bindGroup = g_device.createBindGroup({layout: g_pipeline.getBindGroupLayout(0),entries: [{binding: 0, // @binding(0) in shaderresource: {buffer: uniformBuffer,},},],});

这里binding: 0对应的是顶点着色器中写的属性@binding(0)layout:g_pipeline.getBindGroupLayout(0)中的0对应顶点着色器中写的属性@group(0)

5.在renderPassEncoder中设置GPUBindGroup

最后,使用renderPassEncoder上的setBindGroup方法设置 GPUBindGroup。

  const renderPassEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);renderPassEncoder.setPipeline(pipeline);renderPassEncoder.setBindGroup(0, uniformBindGroup); // <--- 设置bindGrouprenderPassEncoder.setVertexBuffer(0, verticesBuffer);renderPassEncoder.draw(cubeVertexCount);renderPassEncoder.end();g_device.queue.submit([commandEncoder.finish()]);

setBindGroup的第一个参数0对应于顶点着色器中写入的属性@group(0)

总结

以上,使用UniformBuffer的绘制就完成了。

虽然这个立方体看起来很奇怪。。。这是因为我们还没有在绘图时启用深度测试。下次我们将启用深度测试以确保正确绘制立方体。

http://www.15wanjia.com/news/162069.html

相关文章:

  • 360的网站排名怎么做主题猫仿虎嗅wordpress
  • 怎么设计网站内容注册网站请签署意见是写无
  • 深圳自助网站建设有没有专门做京东天猫的人才网站
  • 网站使用特殊字体代驾网站开发
  • dw做网站背景音乐2023军文职人员招聘网官网
  • 网站备案 谁接入谁负责网站建设宣传广告语
  • 东莞网站快速优化排名深圳微信开发
  • 和田地区建设局网站第一活动线报网
  • 企业注册好了怎么做网站长宁区网站制作设计
  • 网站制作企业有哪些公司重庆市工程建设信息网官网新网
  • dw如何用表格做网站免费做英语卷子的网站
  • 网站后台上传的照片模糊长沙手机网站公司
  • 做一个网站成本多少单招网是哪个网站制作公司做的
  • 查询网站dns服务器株洲网站建设哪家好
  • 网站开发模板图片东莞高端品牌网站建设价格
  • 网站网页转小程序教程企业局域网组建与网站建设
  • 全功能电子商务网站建设长沙专业公司网站建设源头
  • 可以做 描文本链接的网站网络营销推广代理
  • 望京网站建设巨耀网站建设公司
  • 不需要写代码的网站开发软件门户网站建设课程设计
  • 域名命名网站门店库存管理软件
  • 设计师投稿网站提高网站转化率
  • 镇江网站建设推广app外包公司推荐
  • 长沙网站优化外包服务wordpress文章归档模板
  • 网站建设公司薪酬微网站如何建设方案
  • 小程序和网站开发难度用手机下载地图到内全卡
  • 货架网站开发百度小程序异常怎么办
  • 自己想开个网站怎么弄最新传奇网页游戏排行榜
  • 网站制作价格权威乐云践新无货源网店
  • 团购网站设计建网站 外贸