three.js 射线Ray,三维空间中绘制线框
效果:

代码:
<template><div><el-container><el-main><div class="box-card-left"><div id="threejs"></div> <div>{{ res1 }}</div> <div>{{ res2 }}</div></div></el-main></el-container></div>
</template>s
<script>
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
export default {data() {return {scene: null,camera: null,renderer: null,res1: null,res2: null,};},created() {},mounted() {this.name = this.$route.query.name;this.init();},methods: {goBack() {this.$router.go(-1);},init() {this.scene = new this.$three.Scene();const axesHelper = new this.$three.AxesHelper(100);this.scene.add(axesHelper);this.createLine();this.createLine2();this.camera = new this.$three.PerspectiveCamera(60,1,0.01,2000);this.camera.position.set(30,30,30);this.camera.lookAt(0,0,0);this.renderer = new this.$three.WebGLRenderer();this.renderer.setSize(1000,800);this.renderer.render(this.scene, this.camera);window.document.getElementById("threejs").appendChild(this.renderer.domElement);const controls = new OrbitControls(this.camera, this.renderer.domElement)controls.addEventListener("change", () => {this.renderer.render(this.scene, this.camera);})},createLine() {let a = new this.$three.Vector3(10,0,0);let b = new this.$three.Vector3(0,10,0);let c = new this.$three.Vector3(0,0,10);let geometry = new this.$three.BufferGeometry().setFromPoints([a,b,c]);let material = new this.$three.LineBasicMaterial({color:0xffccdd, side: this.$three.DoubleSide});// let line = new this.$three.LineLoop(geometry, material);// let line = new this.$three.Line(geometry, material);let line = new this.$three.Mesh(geometry, material);this.scene.add(line);this.res1 = this.createRay(a,b,c);},createLine2() {let arr = new Float32Array([20,0,0,0,20,0,0,0,20,]);let position = new this.$three.BufferAttribute(arr, 3)let geometry = new this.$three.BufferGeometry();geometry.setAttribute("position", position);let material = new this.$three.LineBasicMaterial({color:0xb5a6dd});let line = new this.$three.LineLoop(geometry, material);// let line = new this.$three.Line(geometry, material);this.scene.add(line);let a = new this.$three.Vector3(20,0,0);let b = new this.$three.Vector3(0,20,0);let c = new this.$three.Vector3(0,0,20);this.res2 = this.createRay(a,b,c);},createRay(a,b,c) {// 使用箭头辅助对象显示射线的起点和方向let ray = new this.$three.Ray();ray.origin = new this.$three.Vector3(0,0,0); // 设置射线起点ray.direction = new this.$three.Vector3(1,1,1).normalize(); // 设置射线方向,保证方向为单位向量this.createArrowHelper(ray.direction, ray.origin);const point = new this.$three.Vector3();const result = ray.intersectTriangle(a,b,c, false, point);return result;},createArrowHelper(dir, origin) {let arrow = new this.$three.ArrowHelper(dir, origin, 20);this.scene.add(arrow);}},
};
</script>
<style lang="less" scoped>
.box-card-left {display: flex;align-items: flex-start;flex-direction: row;width: 100%;.box-right {img {width: 500px;user-select: none;}}
}
</style>
相关文章:
three.js 射线Ray,三维空间中绘制线框
效果: 代码: <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div> <div>{{ res1 }}</div> <div>{{ res2 }}</div><…...
【Demo】游戏小地图
简介 该Demo基于2D关卡随机生成项目进行实现,旨在初步探索游戏小地图的制作。 演示 MiniMapDemo 资源下载 百度网盘(提取码:1314) 如果这篇文章对你有帮助,请给作者点个赞吧!...
代码随想录算法训练营Day39 || leetCode 762.不同路径 || 63. 不同路径 II
62.不同路径 每一位的结果等于上方与左侧结果和 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m,vector(n,0));for (int i 0; i < m; i) dp[i][0] 1;for (int j 0; j < n; j) dp[0][j] 1;for (int i 1; i < m; …...
Qt中parent()函数的使用
情景(需求)抽象: A类对象是B类对象的成员变量。 B类对象是A类对象的父亲。 A类对象中包含按钮,点击按钮,调用B类的成员函数。 示例: A类: #pragma once#include <QWidget> #include "ui_QtWidgetsCla…...
Python基础学习(5)流程控制
文章目录 一. 程序三大执行流程二. 分支结构1.单分支结构(if)2.双分支结构(if..else)3.多分支结构(if..elif..else) 二,缩进(tab键)三,循环结构1.while循环2.for循环①遍历字典 五.break,continue和pass语句1.break,continue2.pass Python基础学习(1)基本…...
代码随想录刷题笔记 DAY 42 | 最后一块石头的重量 II No.1049 | 目标和 No.494 | 一和零 No.474
文章目录 Day 4301. 最后一块石头的重量 II(No. 1049)<1> 题目<2> 笔记<3> 代码 02. 目标和(No. 494)<1> 题目<2> 笔记<3> 代码 03. 一和零(No. 474)<1> 题目&l…...
793.高精度乘法(acwing)
文章目录 793.高精度乘法题目描述高精度乘法 793.高精度乘法 题目描述 给定两个正整数A和B,请你计算A * B的值。 输入格式 共两行,第一行包含整数A,第二行包含整数B。 输出格式 共一行,包含A * B的值。 数据范围 1≤A的长度≤…...
考研经验|如何从考研失败中走出来?
对我来说,太丢人了 其实我在本科的时候在同学眼中,一直很优秀,每年奖学金必有我的,国家励志奖学金,国家奖学金,这种非常难拿的奖学金,我也拿过,本科期间学校有一个公费去新西兰留学的…...
SpringBoot如何修改pom依赖的默认版本号
1、找到SpringBoot父工程依赖。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version> </parent>2、ctrl 鼠标左键点击<artifact…...
UDP与TCP:了解这两种网络协议的不同之处
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
String、StringBuffer基本用法
一、StringBuffer基本用法 1.append():字符串连接操作 StringBuffer sb new StringBuffer();sb.append("a");sb.append("b");sb.append("c");sb.append("哈哈").append("d");System.out.println(sb);2.insert():在任意位…...
蓝桥杯刷题5--GCD和LCM
目录 1. GCD 1.1 性质 1.2 代码实现 2. LCM 2.1 代码实现 3. 习题 3.1 等差数列 3.2 Hankson的趣味题 3.3 最大比例 3.4 GCD 1. GCD 整数a和b的最大公约数是能同时整除a和b的最大整数,记为gcd(a, b) 1.1 性质 GCD有关的题目一般会考核GCD的性质。 …...
LVS+Keepalived 高可用负载均衡集群
一. 高可用集群的相关知识 1.1 高可用(HA)集群和普通集群的比较 ① 普通集群 普通的群集的部署是通过一台度器控制调配多台节点服务器进行业务请求的处理,但是仅仅是一台调度器,就会存在极大的单点故障风险,当该调度…...
【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】
文章目录 【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】需求开发过程尝试找到没有用的上拉gpio尝试修改pwm1的gpio的默认上拉模式 改动 【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】 需求 T8pro想要模仿T10 的 快捷按键ÿ…...
鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:LoadingProgress)
用于显示加载动效的组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 LoadingProgress() 创建加载进展组件。 从API version 9开始,该接口支持在ArkTS卡片中使…...
隐私与创新的交汇点:Partisia Blockchain 重绘技术蓝图
正当我们在这个信息泛滥的时代寻找稳固的信任锚点时,区块链技术应运而生,然而,正如任何科技革命都会遇到的挑战,一个重要的问题摆在了我们面前:如何在不牺牲个人隐私的前提下,享受区块链技术带来的好处&…...
小程序 van-field label和输入框改成上下布局
在组件上面加个样式就行:custom-style"display:block;" <van-field label"备注说明" type"textarea" clearable title-width"100px" custom-style"display:block;" placeholder"请输入" /> …...
跨域资源共享(CORS)
预检请求 预检请求(Preflight Request)是跨域资源共享(CORS)机制中的一种特殊请求,主要用于在实际请求之前进行安全性检查。当一个请求可能不满足同源策略(即请求的源与目标资源的源不同,源包括…...
excel中去除公式,仅保留值
1.单个单元格去除公式 双击单元格,按F9. 2.批量去除公式 选中列然后复制,选择性粘贴,选值粘贴...
大数据和数据要素有什么关系?
大数据与数据要素之间存在密切的关系。大数据是指海量、多样化、高速生成的数据,而数据要素是指构成数据的基本元素或属性。数据要素包括但不限于数据的类型、结构、格式、单位、精度等。 大数据的产生和应用离不开数据要素的支持。数据要素确定了数据的基本特征和…...
矩阵求逆算法的时间复杂度对比:从高斯消元到伴随矩阵法
1. 矩阵求逆:为什么我们需要关注时间复杂度 第一次接触矩阵求逆是在大学线性代数课上,当时只觉得这是个有趣的数学玩具。直到后来做图像处理项目时,我才真正意识到它的重要性——当我们需要解线性方程组或做坐标变换时,逆矩阵就像…...
别再死磕NeRF了!从体素到点云,聊聊2024年三维重建的5种主流技术选型与实战避坑
别再死磕NeRF了!从体素到点云,聊聊2024年三维重建的5种主流技术选型与实战避坑 当你在深夜盯着屏幕,反复调整NeRF的视角采样参数却依然无法解决场景边缘模糊问题时;当项目Deadline临近,而体素模型的内存占用已经让显卡…...
响应式导航栏汉堡菜单点击后下拉菜单不显示的解决方案
本文详解响应式导航栏中汉堡图标(hamburger)点击后菜单不展开的常见原因及修复方法,核心在于 CSS 选择器优先级与元素显隐逻辑的匹配,通过添加 .navbar_nav.active .cat { display: block; } 即可精准控制移动端菜单项的可见性。 …...
Lychee Rerank MM可部署:支持私有云/本地IDC的多模态语义匹配解决方案
Lychee Rerank MM可部署:支持私有云/本地IDC的多模态语义匹配解决方案 你是否遇到过这样的场景?在一个电商平台里,用户上传了一张红色连衣裙的图片,想找类似款式,但搜索引擎却返回了一堆毫不相关的商品。或者…...
SwitchHosts实战指南:图形化界面下的Hosts文件高效管理技巧
1. 为什么你需要SwitchHosts来管理Hosts文件 每次调试网站或者切换测试环境时,手动修改Hosts文件就像用螺丝刀修电脑——既原始又低效。我见过不少同事因为手滑输错一个IP地址,导致整个下午都在排查"为什么网站打不开"。更糟的是,当…...
网络技术革新:网络虚拟化概念详解与主流应用场景(超全图解)
网络技术革新:网络虚拟化概念详解与主流应用场景(超全图解)前言一、网络虚拟化:基本概念1.1 官方定义1.2 通俗理解1.3 核心特点二、网络虚拟化:标准工作原理(流程图分步解析)2.1 原理一句话总结…...
终极游戏化编程学习指南:CodeCombat如何让编程像玩游戏一样简单有趣
终极游戏化编程学习指南:CodeCombat如何让编程像玩游戏一样简单有趣 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat CodeCombat是一个革命性的游戏化编程学习平台,通过将编…...
推荐一些可以用于论文降重的软件:2026年实测TOP5功能对比,AIGC率最低降至5%!
【博主避坑前言】 “知网文字复制比查重4.5%,妥妥过关。但右边赫然写着:AIGC疑似率 89%,导师直接把初稿扔回给我,让我重写!” 类似这样的粉丝私信,在2026年的毕业季已经成了重灾区。很多同学为了降重&#…...
STM32F1xx HAL库 + FreeRTOS实战:构建带日志输出的交互式Shell终端
1. 为什么需要交互式Shell终端 在嵌入式开发中,调试手段往往决定了开发效率。想象一下,当你的设备在实验室运行良好,到了现场却出现偶发性故障,传统的LED灯调试方式就像在黑夜里用手电筒找钥匙 - 效率低下且信息有限。而基于STM32…...
零基础转行大模型选哪个岗位方向最易上手?常见问题全解析
零基础转行大模型选哪个岗位方向最易上手?常见问题全解析 标签:#人工智能、#深度学习、#自然语言处理、#神经网络、#机器学习、#计算机视觉、#ai ### 先打破一个误区:大模型≠只有算法岗,普通人也能进### 大模型岗位:哪…...
