轻量封装WebGPU渲染系统示例<31>- 若干线条对象(源码)

线条对象包括:

        AABB包围盒,OBB包围盒, 曲线,直线,圆,坐标轴,视锥体线框,方形网格等。

当前示例源码github地址:

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

当前示例运行效果:

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

xport class LineObjectTest {private mRscene = new RendererScene();initialize(): void {document.oncontextmenu = function (e) {e.preventDefault();}this.initEvent();this.initScene();}private initEvent(): void {const rc = this.mRscene;rc.addEventListener(MouseEvent.MOUSE_DOWN, this.mouseDown);new MouseInteraction().initialize(rc, 0, false).setAutoRunning(true);}private testOBB(): void {const rsc = this.mRscene;let box = new BoxEntity();box.setColor([0.8, 0.2, 0.6]);box.transform.setRotationXYZ(70,150,0);box.transform.setXYZ(100, 100, 500);rsc.addEntity( box );let obb = new OBB();obb.fromAABB(box.getLocalBounds(), box.transform.getMatrix());let boxFrame = new BoundsFrameEntity({obb, obbFrameScale: 1.01});boxFrame.setColor([0.1, 0.8, 0.7]);rsc.addEntity( boxFrame );}private testFrustumFrame( ): void {const cam = new Camera({eye: new Vector3(500, 500, -300), near: 50, far: 200});const rsc = this.mRscene;let frameColors = [[1.0, 0.0, 1.0], [0.0, 1.0, 1.0], [1.0, 0.0, 1.0], [0.0, 1.0, 1.0]];let boxFrame = new BoundsFrameEntity({ posList8: cam.getWordFrustumVtxArr(), frameColors });rsc.addEntity( boxFrame );}private mouseDown = (evt: MouseEvent): void => {};private createCurve(): void {const rsc = this.mRscene;let total = 100;let linePositions = new Array(total);let lineColors = new Array(total);for(let i = 0; i < total; ++i) {const factor = Math.sin(20.0 * i / total);linePositions[i] = [350, factor * 100 + 100 , -300 + i * 10.0];lineColors[i] = [factor * 0.5 + 0.5, 1.0 - (factor * 0.5 + 0.5), 1.0];}let line = new Line3DEntity({linePositions, lineColors});rsc.addEntity( line );let circleLine = createLineCircleXOZ( 100 );circleLine.transform.setY(100.0);circleLine.color = [0.1, 0.5, 1.0];rsc.addEntity( circleLine );}private initScene(): void {const rsc = this.mRscene;let color = new Color4().toBlack().setColor([1.0]);let sph = new SphereEntity();sph.transform.setXYZ(-200, 200, -300);rsc.addEntity( sph );sph.color = color;this.createCurve();let gridPlane = new RectLineGridEntity();gridPlane.color = [0.2, 0.3, 0.1];rsc.addEntity( gridPlane );let axis = new AxisEntity({axisLength: 300});axis.transform.setY(1.5);rsc.addEntity( axis );this.testOBB();this.testFrustumFrame();let boxFrame = new BoundsFrameEntity({bounds: sph.getGlobalBounds()});rsc.addEntity( boxFrame );let tor = new TorusEntity();tor.color = [0.1, 0.8, 0.3];tor.transform.setXYZ(-300, 200, 300);tor.transform.setRotationXYZ(60, 130, 70);rsc.addEntity( tor );boxFrame = new BoundsFrameEntity({bounds: tor.getGlobalBounds()});rsc.addEntity( boxFrame );let obb = new OBB();obb.fromAABB(tor.getLocalBounds(), tor.transform.getMatrix());boxFrame = new BoundsFrameEntity({obb, obbFrameScale: 1.01});boxFrame.color = [0.6, 0.8, 0.3];rsc.addEntity( boxFrame );boxFrame = new BoundsFrameEntity({minPos: new Vector3(200, 200, 400), maxPos: new Vector3(300, 300, 450)});boxFrame.color = [1.0, 0.2, 0.6];rsc.addEntity( boxFrame );}run(): void {this.mRscene.run();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go学习之接口知识

文章目录 接口1.接口案例代码展示2.基本介绍3.基本语法4.应用场景介绍5.注意事项和细节6.接口编程经典案例7.接口与继承之间的比较8.面向对象编程--多态1&#xff09;基本介绍2&#xff09;快速入门3&#xff09;接口体现多态的两种形式 9.类型断言1&#xff09;先看一个需求2&…

Ladybug 全景相机, 360°球形成像,带来全方位的视觉体验

360无死角全景照片总能给人带来强烈的视觉震撼&#xff0c;有着大片的既视感。那怎么才能拍出360球形照片呢&#xff1f;它的拍摄原理是通过图片某个点位为中心将图片其他部位螺旋式、旋转式处理&#xff0c;从而达到沉浸式体验的效果。俗话说“工欲善其事&#xff0c;必先利其…

RabbitMq防止消息丢失

RabbitMq防止消息丢失 消息的传递路径出现消息丢失的位置解决 消息的传递路径 消息发送方 --> MQ --> 消息消费方 出现消息丢失的位置 消息发送方: 消息传输过程中丢失MQ: MQ收到消息后,存在内存中,还未被消费就宕机了,导致数据丢失消息消费方: 消息到达消费方后, 服务…

css实现元素四周阴影

前言 首先确定的是需要使用box-shadow这一属性 语法如下&#xff1a; box-shadow: h-shadow v-shadow blur spread color inset; h-shadow&#xff1a;表示水平方向上的阴影偏移量&#xff0c;必须指明&#xff0c;可以是正数、负数、0&#xff0c;如果为正数左方有阴影&…

【机器学习基础】机器学习入门(1)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;专栏介绍&#xff1a; 本专栏的第一篇文章&#xff0c;当然要介绍一下了~来说一下这个专栏的开…

教资笔记(目录)

目录 中小学教资笔记总结中学教资小学教资小学中学科一《综合素质》&#xff08;通用&#xff09;&#xff1a;考情分析&#xff1a;学习笔记 小学科二《教育知识与能力》&#xff1a;考情分析&#xff1a;学习笔记&#xff1a; 中小学教资笔记总结 2023.9.16教资考试 笔试成绩…

优雅的Java编程:将接口对象作为方法参数

theme: smartblue 目录 概述 在Java编程中&#xff0c;方法的参数传递方式通常是通过基本类型、对象引用或者集合等方式。然而&#xff0c;一种更加优雅且灵活的设计模式是将接口对象作为方法的参数。这种方式为我们带来了许多好处&#xff0c;包括降低耦合性、实现多态性和可…

518抽奖软件,支持年会现场中途临时加奖项

518抽奖软件&#xff0c;支持年会现场中途临时加奖项。 518抽奖软件简介 518抽奖软件&#xff0c;518我要发&#xff0c;超好用的年会抽奖软件&#xff0c;简约设计风格。 包含文字号码抽奖、照片抽奖两种模式&#xff0c;支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.…

FFmpeg开发简介1

适逢FFmpeg6.1发布&#xff0c;准备深入学习下FFmpeg&#xff0c;将会写下系列学习记录。 在此列出主要学习资料&#xff0c;后续再不列&#xff0c;感谢这些大神的探路和分享&#xff0c;特别是雷神&#xff0c;致敬&#xff01; 《FFmpeg从入门到精通》 《深入理解FFmpeg》 …

龙迅LT9211D MIPI(DSI/CSI)转LVDS和集创北方ICN6202 MIPIDSI转LVDS比对

龙迅LT9211D描述&#xff1a; Lontium LT9211D是一款高性能的MIPI DSI/CSI- 2到双端口LVDS转换器。LT9211D反序列化输入的MIPI视频数据&#xff0c;解码数据包&#xff0c;并将格式化的视频数据流转换为AP和移动显示面板或摄像机之间的LVDS发射机输出。LT9211D支持最大14 dB输…

vue2+elementui使用MessageBox 弹框$msgbox自定义VNode内容:实现radio

虽说实现下面的效果&#xff0c;用el-dialog很轻松就能搞定。但是这种简单的交互&#xff0c;我更喜欢使用MessageBox。 话不多说&#xff0c;直接上代码~ <el-button type"primary" size"mini" click"handleApply()" >处理申请</el-b…

linux下安装向日葵

https://sunlogin.oray.com/download/linux?typepersonal下载 在文件所在位置的空白处右键&#xff08;在此处打开终端&#xff09; 输入命令&#xff1a; sudo dpkg -i 文件名.deb &#xff08;文件名为下载的deb文件名字&#xff09;/usr/local/sunlogin/bin/sunlogincl…