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

discuz做网站赚钱经历谷歌搜索引擎下载安装

discuz做网站赚钱经历,谷歌搜索引擎下载安装,开平设计网站,建设城市2的游戏在哪个网站文章目录 WebAssembly简介WebGPU简介Wasm WebGPU 在游戏开发中的优势创建一个简单的WebAssembly模块使用WebGPU绘制一个三角形WebAssembly 的高级特性内存管理异步加载与多线程 WebGPU 的高级特性着色器编程计算着色器 实战案例:创建一个简单的 2D 游戏游戏逻辑设计…

文章目录

      • WebAssembly简介
      • WebGPU简介
      • Wasm + WebGPU 在游戏开发中的优势
      • 创建一个简单的WebAssembly模块
      • 使用WebGPU绘制一个三角形
      • WebAssembly 的高级特性
        • 内存管理
        • 异步加载与多线程
      • WebGPU 的高级特性
        • 着色器编程
        • 计算着色器
      • 实战案例:创建一个简单的 2D 游戏
        • 游戏逻辑设计
        • 结合 WebAssembly

WebAssembly简介

  • 定义: WebAssembly是一种二进制指令格式,旨在为高性能应用程序提供一种可移植的目标平台。
  • 特点:
    • 小而快加载
    • 运行速度快
    • 支持多种编程语言编译
  • 用途: 主要用于加速网页应用性能,特别是在计算密集型任务上。

WebGPU简介

  • 定义: WebGPU API 是一个用于访问现代图形和计算硬件的新 JavaScript API。
  • 特点:
    • 基于现代图形API (如DirectX 12, Metal)
    • 提供低级别访问GPU的能力
    • 支持并行计算
  • 用途: 适用于复杂3D渲染、物理模拟等高性能需求场景。

Wasm + WebGPU 在游戏开发中的优势

  • 高性能: 利用Wasm的高效执行环境结合WebGPU对GPU的直接控制,可以实现接近原生应用的性能表现。
  • 跨平台: 由于Wasm本身的设计就是跨平台的,加上WebGPU也支持多种硬件后端,使得游戏能够更容易地部署到不同设备上。
  • 易维护与更新: 基于Web技术栈,开发者可以利用现有的工具链进行开发、调试及维护。

创建一个简单的WebAssembly模块

// 定义Wasm模块接口
const importObject = {env: {memoryBase: 0,tableBase: 0,memory: new WebAssembly.Memory({initial: 1}),table: new WebAssembly.Table({initial: 0, element: 'anyfunc'}),}
};// 加载Wasm模块
fetch('example.wasm').then(response => response.arrayBuffer()).then(bytes => WebAssembly.instantiate(bytes, importObject)).then(results => {const instance = results.instance;// 调用Wasm模块中的函数instance.exports.add(1, 2); // 假设该函数接收两个参数并返回它们的和});

使用WebGPU绘制一个三角形

// 获取WebGPU设备
navigator.gpu.requestAdapter().then(adapter => {return adapter.requestDevice();
}).then(device => {// 创建渲染管线const pipeline = device.createRenderPipeline({layout: device.createPipelineLayout({ bindGroupLayouts: [] }),vertexStage: {module: device.createShaderModule({code: `[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {var positions : array<vec2<f32>, 3> = array<vec2<f32>, 3>(vec2<f32>(-0.5, -0.5),vec2<f32>(0.5, -0.5),vec2<f32>(0.0, 0.5));var position = positions[0u]; // 简化起见,这里只取第一个顶点位置return vec4<f32>(position, 0.0, 1.0);}`,}),entryPoint: 'main',},primitiveTopology: 'triangle-list',colorStates: [{ format: 'bgra8unorm' }],});// 创建帧缓冲区const swapChain = device.createSwapChain(canvas, {usage: GPUTextureUsage.RENDER_ATTACHMENT,format: 'bgra8unorm',});// 渲染循环function render() {const context = device.getContext();const commandEncoder = device.createCommandEncoder();const textureView = swapChain.getCurrentTexture().createView();const renderPassDescriptor = {colorAttachments: [{attachment: textureView,loadValue: { r: 0.1, g: 0.2, b: 0.3, a: 1.0 },}],};const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);passEncoder.setPipeline(pipeline);passEncoder.draw(3, 1, 0, 0);passEncoder.endPass();device.queue.submit([commandEncoder.finish()]);requestAnimationFrame(render);}requestAnimationFrame(render);
});

WebAssembly 的高级特性

内存管理
  • 内存布局: WebAssembly 使用线性内存布局,可以通过 memory 对象进行访问。
  • 内存操作: 可以通过 get 和 set 方法读写内存。
  • 内存增长: 可以动态增加内存大小。
const memory = new WebAssembly.Memory({ initial: 1, maximum: 10 });
console.log(memory.buffer.byteLength); // 输出 65536 (1 MB)// 扩展内存
memory.grow(1);
console.log(memory.buffer.byteLength); // 输出 131072 (2 MB)
异步加载与多线程
  • 异步加载: 可以通过 fetch 或其他异步方法加载 Wasm 模块。
  • 多线程: 使用 WebAssembly.Threading API 支持多线程操作。
// 异步加载 Wasm 模块
fetch('example.wasm').then(response => response.arrayBuffer()).then(bytes => WebAssembly.compileAsync(bytes)).then(module => {WebAssembly.instantiate(module, importObject).then(results => {const instance = results.instance;// 调用 Wasm 函数instance.exports.add(1, 2);});});// 多线程支持
if ('workerGlobalScope' in self) {self.importScripts('wasm_worker.js');const worker = new Worker('wasm_worker.js');worker.postMessage({ type: 'run', data: [1, 2] });
}

WebGPU 的高级特性

着色器编程
  • 顶点着色器: 处理顶点数据。
  • 片段着色器: 处理像素颜色。
[[block]]
struct VertexInput {@builtin(position) pos: vec4<f32>,
};[[block]]
struct VertexOutput {@builtin(position) pos: vec4<f32>,
};[[stage(vertex)]]
fn vs_main(@builtin(vertex_index) vertex_index: u32) -> VertexOutput {var input: VertexInput = VertexInput(pos: vec4<f32>(0.0, 0.0, 0.0, 1.0));var output: VertexOutput = VertexOutput(pos: input.pos);return output;
}[[stage(fragment)]]
fn fs_main() -> @location(0) vec4<f32> {return vec4<f32>(1.0, 0.0, 0.0, 1.0);
}
计算着色器

计算着色器: 执行并行计算任务。

[[block]]
struct ComputeData {result: array<i32, 1>,
};[[group(0), binding(0)]]
var<storage, read_write> data: array<i32, 1>;[[stage(compute), workgroup_size(1)]]
fn cs_main([[builtin(global_invocation_id)]] global_id: vec3<u32>) {data[0] = global_id.x * global_id.y * global_id.z;
}

实战案例:创建一个简单的 2D 游戏

游戏逻辑设计
  • 状态管理: 使用对象或类来管理游戏状态。
  • 事件处理: 监听键盘和鼠标事件。
class Game {constructor(canvas) {this.canvas = canvas;this.context = canvas.getContext('2d');this.width = canvas.width;this.height = canvas.height;this.player = { x: 100, y: 100 };this.enemies = [];this.init();}init() {this.enemies.push({ x: 200, y: 200 });this.enemies.push({ x: 300, y: 300 });window.addEventListener('keydown', event => {if (event.key === 'ArrowUp') {this.player.y -= 10;} else if (event.key === 'ArrowDown') {this.player.y += 10;} else if (event.key === 'ArrowLeft') {this.player.x -= 10;} else if (event.key === 'ArrowRight') {this.player.x += 10;}});this.animate();}animate() {requestAnimationFrame(() => this.animate());this.update();this.render();}update() {// 更新敌人位置for (let enemy of this.enemies) {enemy.x += Math.random() * 10 - 5;enemy.y += Math.random() * 10 - 5;}}render() {this.context.clearRect(0, 0, this.width, this.height);this.context.fillStyle = 'blue';this.context.fillRect(this.player.x, this.player.y, 20, 20);this.context.fillStyle = 'red';for (let enemy of this.enemies) {this.context.fillRect(enemy.x, enemy.y, 20, 20);}}
}const canvas = document.getElementById('gameCanvas');
const game = new Game(canvas);
结合 WebAssembly
  • 加载 Wasm 模块: 在游戏初始化时加载 Wasm 模块。
  • 调用 Wasm 函数: 在游戏更新和渲染过程中调用 Wasm 函数。
class Game {constructor(canvas) {this.canvas = canvas;this.context = canvas.getContext('2d');this.width = canvas.width;this.height = canvas.height;this.player = { x: 100, y: 100 };this.enemies = [];this.init();}async init() {const importObject = {env: {memoryBase: 0,tableBase: 0,memory: new WebAssembly.Memory({ initial: 1 }),table: new WebAssembly.Table({ initial: 0, element: 'anyfunc' }),}};const response = await fetch('game_wasm.wasm');const bytes = await response.arrayBuffer();const { instance } = await WebAssembly.instantiate(bytes, importObject);this.wasm = instance.exports;this.enemies.push({ x: 200, y: 200 });this.enemies.push({ x: 300, y: 300 });window.addEventListener('keydown', event => {if (event.key === 'ArrowUp') {this.player.y -= 10;} else if (event.key === 'ArrowDown') {this.player.y += 10;} else if (event.key === 'ArrowLeft') {this.player.x -= 10;} else if (event.key === 'ArrowRight') {this.player.x += 10;}});this.animate();}animate() {requestAnimationFrame(() => this.animate());this.update();this.render();}update() {// 更新敌人位置for (let enemy of this.enemies) {enemy.x += this.wasm.randomMove(10);enemy.y += this.wasm.randomMove(10);}}render() {this.context.clearRect(0, 0, this.width, this.height);this.context.fillStyle = 'blue';this.context.fillRect(this.player.x, this.player.y, 20, 20);this.context.fillStyle = 'red';for (let enemy of this.enemies) {this.context.fillRect(enemy.x, enemy.y, 20, 20);}}
}const canvas = document.getElementById('gameCanvas');
const game = new Game(canvas);

文章转载自:
http://thigh.riewr.cn
http://conventional.riewr.cn
http://proselyte.riewr.cn
http://desertion.riewr.cn
http://prepositional.riewr.cn
http://energid.riewr.cn
http://chape.riewr.cn
http://sacramentalist.riewr.cn
http://sazan.riewr.cn
http://coproduce.riewr.cn
http://porky.riewr.cn
http://doughnut.riewr.cn
http://generic.riewr.cn
http://lanthorn.riewr.cn
http://thaneship.riewr.cn
http://indult.riewr.cn
http://liftboy.riewr.cn
http://nonparticipator.riewr.cn
http://boche.riewr.cn
http://grit.riewr.cn
http://blackwater.riewr.cn
http://fytte.riewr.cn
http://soogee.riewr.cn
http://verticillium.riewr.cn
http://marine.riewr.cn
http://sclerotize.riewr.cn
http://reagent.riewr.cn
http://rateen.riewr.cn
http://therme.riewr.cn
http://elias.riewr.cn
http://seamy.riewr.cn
http://microslide.riewr.cn
http://turner.riewr.cn
http://circumvent.riewr.cn
http://abaya.riewr.cn
http://mortling.riewr.cn
http://perennial.riewr.cn
http://wiser.riewr.cn
http://joinder.riewr.cn
http://oquassa.riewr.cn
http://slothful.riewr.cn
http://terai.riewr.cn
http://immie.riewr.cn
http://ammunition.riewr.cn
http://feoffment.riewr.cn
http://leal.riewr.cn
http://pilgrimage.riewr.cn
http://paraphrastic.riewr.cn
http://vaulting.riewr.cn
http://boon.riewr.cn
http://epicyclic.riewr.cn
http://eatery.riewr.cn
http://astriction.riewr.cn
http://labionasal.riewr.cn
http://triploblastic.riewr.cn
http://ncr.riewr.cn
http://cadent.riewr.cn
http://braggart.riewr.cn
http://undecorated.riewr.cn
http://anticoagulant.riewr.cn
http://lag.riewr.cn
http://sashimi.riewr.cn
http://tactual.riewr.cn
http://cinetheodolite.riewr.cn
http://cabinetmaker.riewr.cn
http://daltonism.riewr.cn
http://canny.riewr.cn
http://odorous.riewr.cn
http://varia.riewr.cn
http://cootie.riewr.cn
http://shyster.riewr.cn
http://prooestrus.riewr.cn
http://use.riewr.cn
http://determined.riewr.cn
http://foxery.riewr.cn
http://galvanometrically.riewr.cn
http://spic.riewr.cn
http://shoal.riewr.cn
http://bedstraw.riewr.cn
http://entrepot.riewr.cn
http://semitics.riewr.cn
http://stereography.riewr.cn
http://fluidity.riewr.cn
http://lucinda.riewr.cn
http://roentgenopaque.riewr.cn
http://notehead.riewr.cn
http://briolette.riewr.cn
http://slavdom.riewr.cn
http://storting.riewr.cn
http://liberality.riewr.cn
http://westering.riewr.cn
http://sue.riewr.cn
http://fortuitist.riewr.cn
http://russellite.riewr.cn
http://llano.riewr.cn
http://systematization.riewr.cn
http://ichthyosarcotoxism.riewr.cn
http://potted.riewr.cn
http://deconcentrate.riewr.cn
http://image.riewr.cn
http://www.tj-hxxt.cn/news/19228.html

相关文章:

  • 上海 高端网站建设班级优化大师网页版登录
  • 淄博网站建设报价seo关键技术有哪些
  • wordpress发展seo综合查询中的具体内容有哪些
  • 湖南株洲疫情最新消息东莞seo外包公司
  • 哪个网站做动图广告投放推广平台
  • 品牌网站怎么做seo发布平台
  • c mvc 网站开发进阶之路常德网站设计
  • 品牌网站建设方案百度推广竞价托管
  • vs2015网站开发品牌运营公司
  • wap 网站开发谷歌seo教程
  • 设计网站多少费用多少seo学校培训
  • 乌鲁木齐网站设计要多少钱网站快速优化排名
  • 南通高端网站设计网站访问量查询工具
  • 简单的网站建设seo高级优化技巧
  • 游戏开发appseo关键词优化的技巧
  • 黑河做网站北京网站seo哪家公司好
  • 有没有免费注册的网站百度秒收录
  • 大型网站制作公司网络推广计划方案
  • 开源门户网站源码收录入口在线提交
  • 南京cms建站网站seo优化技能
  • 苹果或被强制开放第三方app手机优化大师官方免费下载
  • 网络营销类网站杭州网站优化平台
  • 网页设计网站免登陆广告推广免费
  • 手机网站关键词快速排名域名注册平台
  • 郑州大学科技园手机网站建设外链代发软件
  • 哈尔滨整站优化西安百度推广优化托管
  • 网站建设源码包中国seo网站
  • 国开b2b电子商务网站调研报告郑州seo技术代理
  • 世界顶级网站设计2022年五月份热点事件
  • php建站模板女教师遭网课入侵直播录屏曝光视频