轻量封装WebGPU渲染系统示例<30>- 绘制线段(源码)

原理说明:

WebGPU提供了绘制基本线条非机制,只要render pipeline primitive对应的 topology属性指定为line-list或者line-strip即可绘制对应的线条。

当前示例源码github地址:

https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/LineEntityTest.ts

当前示例运行效果:

WGSL顶点着色器代码:

@group(0) @binding(0) var<uniform> objMat : mat4x4<f32>;
@group(0) @binding(1) var<uniform> viewMat : mat4x4<f32>;
@group(0) @binding(2) var<uniform> projMat : mat4x4<f32>;

struct VertexOutput {
  @builtin(position) Position : vec4<f32>,
  @location(0) vertColor : vec4<f32>
}
@vertex
fn main(
  @location(0) position : vec3<f32>,
  @location(1) color : vec3<f32>,
) -> VertexOutput {

  let wpos = objMat * vec4(position.xyz, 1.0);
  var output : VertexOutput;
  output.Position = projMat * viewMat * wpos;
  output.vertColor = vec4f(color.xyz, 1.0);
  return output;
}

WGSL片段着色器代码:

@group(0) @binding(3) var<uniform> color: vec4f;
@fragment
fn main(
  @location(0) vertColor: vec4<f32>
) -> @location(0) vec4<f32> {
  var color4 = vertColor * color;
  return color4;
}

此示例基于此渲染系统实现,当前示例TypeScript源码如下:

export class LineEntityTest {
	private mRscene = new RendererScene();
	initialize(): void {

		this.initEvent();
		this.initScene();
	}
	private initEvent(): void {
		const rc = this.mRscene;
		new MouseInteraction().initialize(rc, 0, false).setAutoRunning(true);
	}
	private initScene(): void {
		const rsc = this.mRscene;

		let linePositions = [new Vector3(), new Vector3(-100), new Vector3(-150, -180), new Vector3(-150, -180, -100)];
		let line = new Line3DEntity({linePositions});
		line.setColor([1.0,0.0,0.0]);
		rsc.addEntity( line );

		linePositions = [new Vector3(), new Vector3(100), new Vector3(150, 180), new Vector3(150, 180, 100)];
		let lineColors = [new Color4(1.0), new Color4(0.0,1.0), new Color4(0.0,0.0,1.0), new Color4(1.0,0.0,1.0)];
		let colorLine = new Line3DEntity({linePositions, lineColors});
		rsc.addEntity( colorLine );
	}

	run(): void {
		this.mRscene.run();
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/143887.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移远EC600U-CN开发板 11.14

控件探索-仪表&#xff08;lv.meter&#xff09; 1. 显示一个简单的仪表盘 def set_value(indic, v):meter.set_indicator_value(indic, v)# # A simple meter # meter lv.meter(scr) meter.center() meter.set_size(200, 200)# Add a scale first scale meter.add_scale()…

电机应用-编码器

目录 编码器 增量式编码器 绝对式编码器 混合式绝对式编码器 旋转编码器原理 增量式编码器原理 绝对式编码器原理 编码器基本参数 分辨率 精度 最大响应频率 信号输出形式 编码器 用来测量机械旋转或位移的传感器&#xff0c;能够测量机械部件在旋转或直线运动时的…

Ubuntu 24.04发布日期以定

导读Ubuntu 的下一个长期支持 (LTS) 版本 Ubuntu 24.04 的最终发布日期已确定&#xff0c;计划于 2024 年 4 月 25 日发布。 Ubuntu 的下一个长期支持 (LTS) 版本 Ubuntu 24.04 的最终发布日期已确定&#xff0c;计划于 2024 年 4 月 25 日发布。 除此之外&#xff0c;Ubuntu…

听我的,日志还是得好好打!

大家好&#xff0c;我是老三&#xff0c;不知道大家有没有经历过这样的场景&#xff0c;线上出了问题&#xff0c;着急火燎地去排查&#xff1a; 唉&#xff0c;问题可能出在这个地方&#xff0c;捞个日志看下&#xff0c;卧槽&#xff0c;怎么找不到……哪个**不打日志&#…

Mac M2/M3 芯片环境配置以及常用软件安装-前端

最近换了台新 Mac&#xff0c;所有的配置和软件就重新安装下&#xff0c;顺便写个文章。 一、环境配置 1. 安装 Homebrew 安装 Homebrew【Mac 安装 Homebrew】 通过国内镜像安装会比较快 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Ho…

如何定制开发软件 App?|小程序网站搭建

如何定制开发软件 App&#xff1f;|小程序网站搭建 随着移动互联网的快速发展&#xff0c;定制开发软件 App 成为了许多企业和个人的需求。无论是为了满足特定业务需求&#xff0c;还是为了提升用户体验&#xff0c;定制开发软件 App 都可以帮助我们实现目标。下面&#xff0c;…

管理类联考——数学——汇总篇——知识点突破——代数——函数、方程——记忆——一元二次函数

——一元二次函数——【图像→交点】 ——【 a x 2 b x c y ax^2bxcy ax2bxcy二次函数核心在于“图像”&#xff1a;整体可以由&#xff1a; 图像&#xff08;形状&#xff0c;上下&#xff0c;交点&#xff09; ⟹ \Longrightarrow ⟹ △ △ △ ⟹ \Longrightarrow ⟹ 抛…

知识蒸馏学习

这里写目录标题 1. 知识蒸馏学习2. 参考链接 1. 知识蒸馏学习 知识蒸馏把一个大的东西变成一个小的东西&#xff0c;纯的东西&#xff0c;一个大的教师神经网络交给了小的学生神经网络。 把大的模型压缩到小的模型上。 2. 参考链接 知识蒸馏算法和代码&a…

npm封装插件打包上传后图片资源错误

问题&#xff1a; npm封装插件&#xff1a;封装的组件页面涉及使用图片资源&#xff0c;在封装的项目里调用图片显示正常&#xff1b;但是打包上传后&#xff0c;其他项目引入使用报错找不到图片资源&#xff1b;图片路径也不对 获取图片的base64方法 解决方案&#xff1a; 将…

Java面试题(每天10题)-------连载(30)

目录 多线程篇 1、可以运行时kill掉一个线程吗&#xff1f; 2、关于synchronized 3、分布式锁&#xff0c;程序数据库中死锁机制及解决方案 4、spring单例为什么没有安全问题&#xff08;ThreadLocal&#xff09; 5、线程池原理 6、Java锁多个对象 7、Java线程如何启动 …

Jenkins中强制停止停不下来的job

# Script console 执行脚本 Jenkins 的提供了 script console 的功能&#xff0c;允许你写一些脚本&#xff0c;来调度 Jenkins 执行一些任务。 我们就可以利用 script console 来强制停止 job 执行。 首先进入 Jenkins 的 script console 页面&#xff1a; script console 路…

Python武器库开发-flask篇之flask框架的安装(二十一)

Flask介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架&#xff0c;对于Werkzeug本质是Socket服务端&#xff0c;其用于接收http请求并对请求进行预处理&#xff0c;然后触发Flask框架&#xff0c;开发人员基于Flask框架提供的功能对请求进…

Pyecharts数据可视化综合应用PyEcharts概述在线闯关_头歌实践教学平台

PyEcharts概述 第1关 快速上手任务描述相关知识导入图表类型添加数据设置图表样式输出图表链式调用编程要求测试说明代码 第1关 快速上手 任务描述 本关任务&#xff1a;快速上手使用pyEcharts进行绘图。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1. p…

什么是稳定扩散中的采样步骤?

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器 本指南将深入探讨采样步骤的基础知识、它们对图像生成的影响&#xff0c;以及优化这些步骤以获得最佳结果的技巧。 了解稳定扩散中…

CRM销售管理软件哪个好,该如何选择?(一)

销售团队对于任何一家企业来说都是重中之重&#xff0c;因此我们说一款可以辅助销售人员维护好客户的工具是企业发展的刚需。那么CRM销售管理软件哪个好&#xff0c;该如何选择&#xff0c;从从哪里方面去入手&#xff1f;来看看这两点吧&#xff1a; 功能方面 完整的功能可以…

Java实现DXF文件转换成PDF

代码实现 public static void dxfToPdf(){// 加载DXF文件String inputFile "input.dxf";CadImage cadImage (CadImage) Image.load(inputFile);// 设置PDF输出选项PdfOptions pdfOptions new PdfOptions();pdfOptions.setPageWidth(200);pdfOptions.setPageHeigh…

易基因:MeRIP-seq+ChIP-seq等揭示m6A甲基化在休眠期转录休眠调控中的潜在功能 | 发育研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 发育通常被认为是遗传程序的顺序展开&#xff0c;复杂程度不断提高&#xff0c;并按固定轨迹随时间进行。然而&#xff0c;调整发育时间可以提高在不利条件下的存活率。在哺乳动物中&…

2021年地级市能量消耗量,286条数据,shp和excel文件

随着社会经济的快速发展&#xff0c;能源消耗量不断增加&#xff0c;对于地级市来说&#xff0c;能量消耗量数据成为了衡量当地经济发展和城市管理的重要指标之一。 本文将分享2021年地级市能量消耗量数据&#xff0c;以下为该数据的基本信息和字段说明。 基本信息 数据名称:…

CodeWhisperer 使用经验分享

今天给大家分享一下 Amazon CodeWhisperer 编程工具&#xff08;免费哦&#xff09;&#xff0c;使用这个软件后我的编码质量提升不少&#xff0c;给大家分享一下我的经验。希望大家支持哦。 Amazon CodeWhisperer 是亚⻢逊出品的一款基于机器学习的 AI 编程助手&#xff0c;可…