我在基于网络的赛车游戏中使用 Three.js Raycaster 方法。但由于计算量很大,它会消耗大量的 CPU 周期,从而导致 fps 下降。我正在考虑在WebWorker上导出Three.js的RayCaster方法。谁能指导我如何实现它,或者这是否可能?
我在three.js中有一个3D场景,其中我需要获取一个在源对象的X范围内的对象数组.目前,我正在使用的示例是在for循环内部使用光线投射,该循环迭代场景中存在的"可碰撞对象"数组.我觉得必须有一个更好的方法来处理这个问题,因为如果数组中的每个对象都必须从数组中的每个其他对象进行光线投射,这种方法会呈指数级复杂化.随着可碰撞对象阵列的增长,这会产生巨大的性能影响.
//hold collidable objects
var collidableObjects = [];
var scene = new THREE.Scene();
var cubeGeo = new THREE.CubeGeometry( 10 , 10 , 10 );
var materialA = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
var materialB = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cubeA = new THREE.Mesh( cubeGeo , materialA );
collidableObjects.push( cubeA );
scene.add( cubeA );
//Change this variable to a larger number to see the processing time explode
var range = 100;
for( var x = …Run Code Online (Sandbox Code Playgroud) 我正试图找出一种方法来使用Three.js创建的3D模型作为超链接.换句话说,如果我点击一个立方体(一个THREE.CubeGeometry),我想要打开另一个页面.
例如,在这个三个例子中,
我怎么能改变它,所以不是在盒子上做小点,点击框会打开另一个页面,如超链接?
好吧,所以我也已经尝试了很长一段时间,在 libgdx 中的 Raycast 用于基于我看的位置进行 3d 碰撞检测。但我画了一个空白,似乎没有任何文档。有人会好心地把我送到正确的方向吗?
我目前正在尝试提高使用 box2d 物理(实际上是 box2dlights)的游戏的性能。
我有一种方法可以在已知区域内进行多次(假设大约 16 到 64 次)光线投射。我想知道在第一步中对该区域进行 AABB 查询以检查光线投射是否可以报告某些内容是否是个好主意。如果没有,我可以跳过光线投射。但是如果 AABB 查询找到了一些东西,我必须进行光线投射并且查询是多余的。与光线投射(尤其是在 box2d 中)相比,AABB 查询的速度有多快?如果我可以依次跳过一些光线投射,那么做一个经常是多余的 AABB 查询是个好主意吗?
我正在尝试将光线投射到 TextGeometry 的 boundingBox。当前,当单击不在字母周围或字母之间的字母时,光线投射适用于 textGeometry。如果单击位于文本字母/字母表之间,则没有对象与 intersectObjects() 相交。当单击也在字母之间时,我需要光线投射与 textGeo 对象相交。
我将 TextGeometry 定义为:
var textGeo = new THREE.TextGeometry( text, {
size: size,
height: 1,
font: 'helvetica'
});
textGeo.computeBoundingBox();
var textMaterial = new THREE.MeshBasicMaterial({ color: fontColor });
var textMesh = new THREE.Mesh(textGeo, textMaterial);
Run Code Online (Sandbox Code Playgroud)
在寻找解决方案后,使用 boundingBox 似乎是最好的方法。请建议或指出如何实现这一点。关于如何做到这一点的任何想法或提示?或者如果有任何当前可用的方法。
我将如何使光线投射与边界框相交?
我正在实现我自己的 Raycasting 库以了解它是如何工作的。作为起点,我有一个旋转的盒子,并使用光线检测它在途中遇到的不同障碍物。值得一提的是:我使用线 AABB 相交方法进行了这项工作。下图显示了它的工作原理:
当我旋转上述墙壁之一并尝试使用相同的方法检查光线的碰撞时,我的问题出现了:
我一直在寻找一种可能的解决方案来纠正这个问题,使用不同的算法,如分离轴定理和 Cohen-Sutherland,但我找不到任何类似于 AABB 交叉但使用 OBB 的方法。任何想法如何解决第二张图片中的问题,当它旋转时它与对象的边界相撞?我正在使用 Unity 和 C#。
所以我对 C# 的随机数学有点陌生,我学会了如何制作步枪、手枪等。但我想学习如何使用光线投射而不是射弹制作霰弹枪。对于光线投射,我厌倦了做超过 1 次光线投射,但不知道如何使它们随机,所以现在我只能使用 1 次光线投射。我想在拍摄时进行随机传播。这是脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShotGun : MonoBehaviour {
private int pellets = 9;
private float spreadAngle = 10f;
private float damage = 10f;
private float range = 1000f;
private Camera fpsCam;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
if (Input.GetButtonDown("Fire1"))
{
ShotgunRay();
}
}
private void ShotgunRay()
{
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, …Run Code Online (Sandbox Code Playgroud) 当鼠标位于门(红色区域)时我想做点什么。我正在尝试投射射线,但射线没有击中门,而且我无法找到它到底击中的位置。另外我怎样才能发出Debug.DrawRay这条射线?
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{
if (hit.collider.tag == "InteractiveDoor")
{
doorInteractGameObject.SetActive(true);
}
else
{
doorInteractGameObject.SetActive(false);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在处理机器学习任务,我正在尝试使用 Blender 生成合成图像作为神经网络的训练数据集。为此,我必须在渲染图像中找到对象的边界框。
到目前为止,我的代码主要基于此线程中建议的代码,但这并没有考虑顶点是否可见或被另一个对象遮挡。想要的结果确实和这里解释的完全一样。我已经尝试了那里给出的建议,但它不起作用。我不明白是因为我给 ray_cast 函数提供了错误的输入(因为 bpy API 真的很糟糕),还是仅仅因为函数的性能很差,正如我在其他地方读到的那样。我的代码,现在,是:
import bpy
import numpy as np
def boundingbox(scene, camera, obj, limit = 0.3):
# Get the inverse transformation matrix.
matrix = camera.matrix_world.normalized().inverted()
# Create a new mesh data block, using the inverse transform matrix to undo any transformations.
dg = bpy.context.evaluated_depsgraph_get()
# eval_obj = bpy.context.object.evaluated_get(dg)
eval_obj = obj.evaluated_get(dg)
mesh = eval_obj.to_mesh()
mesh.transform(obj.matrix_world)
mesh.transform(matrix)
# Get the world coordinates for the camera frame bounding box, before any transformations. …Run Code Online (Sandbox Code Playgroud) raycasting ×10
three.js ×4
c# ×2
javascript ×2
3d ×1
aabb ×1
blender ×1
bounding-box ×1
box2d ×1
box2dlights ×1
hyperlink ×1
java ×1
libgdx ×1
math ×1
performance ×1
python ×1
radial ×1
web-worker ×1