标签: raycasting

3D体积渲染和多视点遮挡

我有一个"W x H x D"体积数据,除了包含1的小球形体积外,到处都是零.

我编写了着色器来提取该3D体积与由顶点构成的通用对象的"交集".

顶点着色器

varying vec3 textureCoordinates;
uniform float objectSize;
uniform vec3 objectTranslation;

void main()
{
        vec4 v=gl_Vertex;
        textureCoordinates= vec3(   ((v.xz-objectTranslation.xz)/objectSize+1.0)*0.5,    ((v.y-objectTranslation.y)/objectSize+1.0)*0.5);
        gl_Position = gl_ModelViewProjectionMatrix*v;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器

varying vec3 textureCoordinates;
uniform sampler3D volumeSampler;
void main()
{
    vec4 uniformColor = vec4(1.0,1.0,0.0,1.0); //it's white
    if ( textureCoordinates.x <=0.0 || textureCoordinates.x >= 1.0 || textureCoordinates.z <= 0.0 || textureCoordinates.z >= 1.0)
        gl_FragColor =vec4(0.0,0.0,0.0,1.0); //Can be uniformColor to color again the thing
    else
        gl_FragColor = uniformColor*texture3D(volumeSampler, textureCoordinates);
}
Run Code Online (Sandbox Code Playgroud)

在OpenGL程序中,我正在从(0,100,0)眼坐标看到中心对象上带有几乎球形的白色斑块,但是我想要另一个观察者(0,0,0)那个躺在它上面的球体相同的视线被正确遮挡,因此只发出我在图片中用红色加下划线的部分.

(0,0,0)查看器的理想遮挡作为从上看的视图

这是光线投射或类似的应用吗?

c++ opengl 3d graphics raycasting

8
推荐指数
1
解决办法
545
查看次数

JavaFX在虚拟平面上使用鼠标移动3D对象

当我在JavaFX中创建我的第一个3D游戏时 - 您可以使用鼠标从零件组装船只.这提出了一个问题,因为JAVAFX似乎没有用于将PerspectiveCamera屏幕2D坐标转换为场景3D空间的原生元素.

这是我正在努力实现的目标.鼠标移动的块应在假想的平面上移动,该平面始终相对于摄像机旋转90°: 表示 我试图用三角函数解决问题而没有太大的成功.我没有附加代码片段,因为我正在寻找更通用的数学解决方案,但如果需要,我会提供它.

所有帮助将不胜感激!

期望的结果: 之前

后

3d mouse raycasting javafx-8 javafx-3d

8
推荐指数
1
解决办法
5130
查看次数

使用鼠标悬停在三个js中更改网格的颜色

我已经整理了一个使用jsonloader和three.js显示多个网格的WebGL脚本,现在我想添加MouseOver和onClick事件.第一个是当鼠标悬停在网格上时简单地改变网格的颜色:

function render() {
  requestAnimationFrame(render);    
  mesh.rotation.z += 0.090;    
  raycaster.setFromCamera(mouse, camera);    
  var intersects = raycaster.intersectObjects(scene.children);  

  for (var i = 0; i < intersects.length; i++) {    
    intersects[i].object.material.color.set(0xff0000);    
  }    
  renderer.render(scene, camera);

}
Run Code Online (Sandbox Code Playgroud)

上面的渲染功能允许我将任何网格的颜色悬停在它上面.我已经尝试了几个if/else变体尝试并且只有在鼠标悬停在网格上时才能使用此效果,但我无法使其工作 - 它只是保持红色.任何人都可以建议我如何修改我的脚本?

谢谢.

javascript three.js raycasting

8
推荐指数
2
解决办法
1万
查看次数

'hitTest()' 在 iOS 14.0 中被弃用

我是新手,目前正在构建一个与 AR 相关的应用程序,在旧版本上我说了这个

let results = self.hitTest(screenPosition, types: [.featurePoint])
Run Code Online (Sandbox Code Playgroud)

现在我遇到了一个问题,即在 iOS 14.0 中不推荐使用 hitTest

hitTest(_:types:)' was deprecated in iOS 14.0: Use [ARSCNView raycastQueryFromPoint:allowingTarget:alignment]
Run Code Online (Sandbox Code Playgroud)

请告诉我如何解决它,谢谢:)

hittest ios raycasting swift arscnview

8
推荐指数
2
解决办法
1445
查看次数

如何找到射线的位置以避免Bullet中的碰撞?

假设我们在A点有一个物体.它想知道它是否可以移动到B点.它的速度有限,所以它只能一步一步地移动.它向正在移动的方向投射光线.Ray与一个对象碰撞,我们检测到它.如何安全地传递我们的光线(避免碰撞)?

在此输入图像描述

顺便说一句,有没有办法让这种东西在对象投射的情况下工作,它会像简单的光线投射一样快/近吗?

在此输入图像描述

有没有办法在某些vay路径中找到最优?

在此输入图像描述

c++ algorithm path-finding bullet raycasting

7
推荐指数
2
解决办法
1503
查看次数

THREE.js从儿童相机到场景的光线投射

我正在尝试从我的相机中对鼠标进行光线投射,以便在我的场景中对网格进行一些悬停和点击事件.

我的问题是,我的相机目前是另一个网格的子对象(为了更容易的相机移动/旋转),现在我的光线投射不起作用(我假设因为相机是网格的孩子,而不是场景).

这是我的代码的一部分:

//camera setup
var camera = new THREE.PerspectiveCamera(60, window.innerWidth/window.innerHeight, 0.1, 1000);

var cameraTargetGeom = new THREE.SphereGeometry(0.5);
var cameraTargetMaterial = new THREE.MeshLambertMaterial({color: 0xff0000, ambient: 0xff0000});
var cameraTarget = new THREE.Mesh(cameraTargetGeom, cameraTargetMaterial);
cameraTarget.position.set(0.15, 0, 5);
scene.add(cameraTarget);
cameraTarget.add(camera);

camera.position.y = 18;
camera.rotation.x = Math.PI * -90 / 180;



// click event
renderer.domElement.addEventListener('click', clickedCanvas);

function clickedCanvas(e) {
    e.preventDefault();

    mouse.x = (e.clientX / renderer.domElement.width) * 2 - 1;
    mouse.y = -(e.clientY / renderer.domElement.height) * 2 + 1;

    raycaster.setFromCamera(mouse, camera);

    var intersects = raycaster.intersectObjects(scene.children, …
Run Code Online (Sandbox Code Playgroud)

javascript camera three.js raycasting

7
推荐指数
1
解决办法
1460
查看次数

一个Three.js raycaster可以与一组相交吗?

我想知道我的raycaster是否在看我装的OBJ.由于从Cinema4D导出的方式,我相信OBJ是一个有3个孩子的THREE.Group,而不是THREE.Object.我可以只更改我的raycaster代码行来查找该组而不是对象吗?

raycaster.set(controls.getObject().position, controls.getDirection(), 0, 40)

var intersects = raycaster.intersectObjects(scene.children, true);

     if (intersects.length > 0) {
      //CURRENTLY INTERSECTING SOMETHING
      for (var i = 0; i < onOffCubes.length; i++) {
      //if the first thing the raycaster sees is a one of my cubes
        if (intersects[0].object == onOffCubes[i]) {
                ExperiencesData[i].userClose = true
            }
         }
       }
Run Code Online (Sandbox Code Playgroud)

onOffCubes是一个包含6个OBJ/THREE.js组的数组:

在此输入图像描述

Console.log(onOffCubes [0])是这样的: 在此输入图像描述

javascript three.js raycasting

7
推荐指数
2
解决办法
5930
查看次数

针对特定点的 Three.js 光线投射

我正在使用 Three.js 进行网络可视化,但无法确定为什么我的光线投射实现没有识别正确的点(完整示例来源)。

更具体地说,我正在尝试将光线投射与点云一起使用,并尝试在用户悬停在该点上时将点的颜色更改为白色。现在,悬停点确实会改变点的颜色,但该事件似乎是在光标附近的点上触发的,而不是在光标正下方的点上。

这是我用来初始化光线投射器的代码:

// configure the raycaster
raycaster = new THREE.Raycaster();
raycaster.params.Points.threshold = 20;
Run Code Online (Sandbox Code Playgroud)

这是渲染函数:

function render() {
  renderer.render(scene, camera);
  controls.update();
  raycast();
}

// Color hovered points
function raycast() {
  raycaster.setFromCamera(mouse, camera); 
  var intersects = raycaster.intersectObject(particles);
  if (intersects.length) {

    var newColor = new THREE.Color();
    newColor.setRGB( 1, 1, 1 );

    var index = intersects[0].index;
    particles.geometry.colors[index] = newColor;
    particles.geometry.colorsNeedUpdate=true;
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,mousemove在主体上触发的事件回调:

/**
* Mouse coordinates go from 0 to container width {0:1} 
* …
Run Code Online (Sandbox Code Playgroud)

javascript three.js raycasting

6
推荐指数
1
解决办法
3051
查看次数

Unity3D:弹跳/反射光线投射

大家好,谢谢帮忙

我想要做的非常简单,我正在尝试显示一个跟随我的弹跳/反射 Raycast 的线渲染器。

这是我到目前为止所拥有的。

 private LineRenderer lr;

public int maxReflectionCount = 3;
public float maxStepDistance = 200f;


void Start()
{
    lr = GetComponent<LineRenderer>();
}


void Update()
{
    RaycastHit hit;

    if (Physics.Raycast(transform.position, transform.forward, out hit))
    {
        if (hit.collider)
        {
            lr.SetPosition(1, new Vector3(0, 0, hit.distance));

            Reflect(this.transform.position + this.transform.forward * 0.75f, this.transform.forward, maxReflectionCount);


        }
    }
    else
    {
        lr.SetPosition(1, new Vector3(0, 0, 2000));

    }

}


private void Reflect(Vector3 position, Vector3 direction, int reflectionsRemaining)
{

    if (reflectionsRemaining == 0)
    {
        return;
    }


    Vector3 startingPosition …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine raycasting

6
推荐指数
1
解决办法
3517
查看次数

JavaScript 光线投射引擎中的鱼眼效果修正

我正在使用画布在 JavaScript 中构建光线投射引擎,我已经构建了光线投射器并且其完全正常工作,除了一个问题,有鱼眼效果,我尝试进行修正

var d = (Math.sqrt( Math.pow((rays[i].x - rays[i].newX),2 )+Math.pow((rays[i].y - rays[i].newY),2 )))

// my attempted corection
var correctedDis = d * Math.cos((rays[i].rayAngle - player.rot)) 
Run Code Online (Sandbox Code Playgroud)

但它不会产生任何结果:

当我运行它时的光线投射器

我仔细检查了数学,我没有发现任何问题,但我可能仍然做错了,因为我七年级,还没有学到很多关于三角学的知识,(只参加了可汗学院课程)所以有人可以让我知道是否有更好或更简单的方法,提前谢谢您。

(我还认为我可能做错了阴影,如果有人可以帮忙的话。)

编辑:我忘了包括您可以使用 WASD 键来控制演示,并且图像被翻转,但这将是一个简单的修复。 如果您需要的话,我的完整代码:

var d = (Math.sqrt( Math.pow((rays[i].x - rays[i].newX),2 )+Math.pow((rays[i].y - rays[i].newY),2 )))

// my attempted corection
var correctedDis = d * Math.cos((rays[i].rayAngle - player.rot)) 
Run Code Online (Sandbox Code Playgroud)
const scale = (num, in_min, in_max, out_min, out_max) => {
  return (num - in_min) * (out_max - out_min) / (in_max - in_min) + …
Run Code Online (Sandbox Code Playgroud)

html javascript canvas 2.5d raycasting

6
推荐指数
0
解决办法
475
查看次数