标签: raycasting

可视化Raycaster

我正在尝试使用射线广播检测相交。我当前的问题是我不确定我的光线投射是否朝着想要的方向瞄准。所以我的一般问题是:有没有办法使射线广播可见?如果是这样:怎么做?这对我有很大帮助。

麦可

three.js raycasting

5
推荐指数
2
解决办法
1933
查看次数

Three.js:"选择工具"如何检测2D正方形和3D对象的交集

基本上我想要创建:

我有一个带有对象的3D地图,我想选择我屏幕上的2D框x1,y1到x2,y2中的所有对象.

任何想法如何做到这一点,因为我对如何开始毫无头绪.

提前致谢!

prevX并且prevY是鼠标按下的坐标:

function onDocumentMouseUp(event) {
  event.preventDefault();

  var x = (event.clientX / window.innerWidth) * 2 - 1;
  var y = -(event.clientY / window.innerHeight) * 2 + 1;

  var width = (x - prevX); //* window.innerWidth;
  var height = (y - prevY); //* window.innerHeight;
  var dx = prevX; //* window.innerWidth;
  var dy = prevY; //* window.innerHeight;

  console.log(
    dx + ',' + 
    dy + "," + 
    (dx + width) + "," + 
    (dy + height) + 
    ", …
Run Code Online (Sandbox Code Playgroud)

javascript intersection three.js raycasting

5
推荐指数
1
解决办法
2593
查看次数

使用变换控制时,threejs禁用轨道相机

我有一个包含多个网格的场景,每个网格都与不同的transformControl相关联; 为了选择不同的对象,我正在使用光线投射技术.我也使用轨道相机来导航场景.

每当我使用变换控制修改所选对象的位置/旋转/比例时,我想禁用相机轨道,因为有时候我点击一个选择器时,我也会选择场景的背景,所以轨道相机移动.

我想停止这种行为,我已经尝试用光线投射技术处理它,但它不起作用.

javascript transformation three.js raycasting

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

为什么SDL2和SDL_RenderCopy在所有像素的双循环内得到不良性能?

我正在使用SDL2编写一个光线投射游戏.在绘制地板时,我需要以像素方式调用SDL_RenderCopy.这导致了瓶颈,使帧率降至10 fps以下.我正在寻找性能提升,但似乎无法找到一些.

以下是性能下降的概述:

int main() {
  while(true) {
        for(x=0; x<800; x++) {
            for(y=0; y<600; y++) {
                SDL_Rect src = { 0, 0, 1, 1 };
                SDL_Rect dst = { x, y, 1, 1 };
                SDL_RenderCopy(ren, tx, &src, &dst); // this drops the framerate below 10
            }
        }
        SDL_RenderPresent(ren);
    }
 }
Run Code Online (Sandbox Code Playgroud)

c++ performance game-engine raycasting sdl-2

4
推荐指数
1
解决办法
6347
查看次数

如何在GLSL中实现2D光线投射光效果

这最初是@sydd 在这里询问的。我对此很好奇,所以我尝试对其进行编码,但是在我回答之前,它已被关闭/删除,所以就在这里。

问题:如何在GLSL中复制/实现这种 2D射线投射照明效果?

效果本身将光线从鼠标位置投射到各个方向,从而累积了背景贴图的alpha和影响像素强度的颜色。

因此输入应为:

  • 滑鼠位置
  • 背景RGBA地图纹理

opengl graphics 2d glsl raycasting

4
推荐指数
1
解决办法
3824
查看次数

Three.js隐形平面不能与raycaster.intersectObject一起使用

我正在尝试制作可拖动的对象,如下例所示:https://www.script-tutorials.com/demos/467/index.html

应该可拖动的对象位于数组objectMoverLines中.

我已经使用以下代码在我的场景中添加了一架飞机:

plane = new THREE.Mesh(new THREE.PlaneBufferGeometry(500, 500, 8, 8), new THREE.MeshBasicMaterial({color: 0x248f24, alphaTest: 0}));
plane.visible = false;
scene.add(plane);
Run Code Online (Sandbox Code Playgroud)

问题发生在onDocumentMouseDown函数下.出于某种原因,如果平面可见性设置为false(plane.visible = false),那么在某个点,将不会填充intersectsobjmovers.但是,如果平面的可见性设置为true,它将正常工作(但很明显,这会导致巨大的飞机妨碍一切):

function onDocumentMouseDown(event) {
    // Object position movers
    var vector = new THREE.Vector3(mouse.x, mouse.y, 1);
    vector.unproject(camera);

    raycaster.set( camera.position, vector.sub( camera.position ).normalize() );
    var intersectsobjmovers = raycaster.intersectObjects(objectMoverLines);
    if (intersectsobjmovers.length > 0) {
        console.log('clicking an object mover');
        // Disable the controls
        controls.enabled = false;
        // Set the selection - first intersected object
        objmoverselection = intersectsobjmovers[0].object; …
Run Code Online (Sandbox Code Playgroud)

javascript three.js raycasting

4
推荐指数
1
解决办法
1818
查看次数

在Unity中使用层和位掩码与Raycast

Unity的Raycast函数有一个参数可用于光线投射到特定的GameObject.您还可以使用该参数来忽略特定的GameObject.

例如,Raycast功能:

public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
Run Code Online (Sandbox Code Playgroud)

layerMask参数用于指定哪些对象应该/不应该接收光线投射.


1.如何光线投射到名为"立方体"的图层中的特定 GameObject?

2.如果你在场景中有10个 GameObjects,但是你只想光线投射到2个 GameObjects并忽略其余的那些?你是怎样做的?

假设那些对象的层是"立方体"和"球体".

3.如果你想要对所有 GameObjects 进行光线投射但忽略1,那该怎么办?

假设要忽略的GameObject位于"立方体"层中.

4.如果你想要对所有 GameObjects 进行光线投射但忽略2个(多个)GameObjects,那该怎么办?

同样,要忽略的层是"立方体"和"球体"层.

c# bitmask unity-game-engine raycasting

4
推荐指数
1
解决办法
6280
查看次数

从鼠标位置和深度图计算3D点

我需要使用渲染的深度图从屏幕空间位置计算3D坐标。不幸的是,使用常规光线追踪对我来说不是一种选择,因为我要处理的单个几何图形包含大约5M张面。

所以我想我将执行以下操作:

  • 使用RGBADepthPacking将深度图渲染到renderTarget中
  • 使用常规的unproject-call从鼠标位置计算射线(与使用射线投射时完全一样)
  • 从深度图的鼠标坐标处查找深度,并使用该距离沿射线计算一个点。

这种工作,但是以某种方式定位点总是在物体的后面,因此我的深度计算可能有问题。

现在,有关上述步骤的一些详细信息

渲染深度图非常简单:

const depthTarget = new THREE.WebGLRenderTarget(w, h);
const depthMaterial = new THREE.MeshDepthMaterial({
  depthPacking: THREE.RGBADepthPacking
});

// in renderloop
renderer.setClearColor(0xffffff, 1);
renderer.clear();
scene.overrideMaterial = depthMaterial;
renderer.render(scene, camera, depthTarget);
Run Code Online (Sandbox Code Playgroud)

使用以下命令在鼠标位置查找存储的颜色值:

renderer.readRenderTargetPixels(
  depthTarget, x, h - y, 1, 1, rgbaBuffer
);
Run Code Online (Sandbox Code Playgroud)

并使用(从packing.glsl中的GLSL版本改编)转换回float:

const v4 = new THREE.Vector4()
const unpackDownscale = 255 / 256;
const unpackFactors = new THREE.Vector4(
  unpackDownscale / (256 * 256 * 256),
  unpackDownscale / (256 * 256),
  unpackDownscale / 256,
  unpackDownscale
); …
Run Code Online (Sandbox Code Playgroud)

depth-buffer projection-matrix three.js raycasting

4
推荐指数
1
解决办法
607
查看次数

当用户触摸GameObject时,如何阻止ARCore模型放置?

免责声明:我对Unity3D和ARCore还是很陌生,所以请多多包涵。

我在Unity3D中使用ARCore创建一个场景,用户可以在其中选择ScrollView屏幕上的模型,然后使用Google的ARCore框架放置它们。

到目前为止,我已经开始工作了;用户触摸中的模型ScrollView(该模型在屏幕上显示Panel为当前选定的模型,因为我的计划是要具有ScrollView切换可见性以获取更多的屏幕视图空间)。

问题在于,当用户选择模型时,ARCore会将模型放置在检测到的平面上,该平面位于ScrollView和选择的模型Panel对象所在的位置(即使您初次触摸以开始滚动ScrollView)。请参阅下文以帮助可视化。

在此处输入图片说明

如何使ARCore 不会将对象放置在ScrollView和之后Panel?我尝试过的是在控制器(实际上只是Google HelloARController)中添加了一个对象集合,这些对象我想阻止ARCore Raycast并使用进行遍历,foreach以查看集合中是否Raycast命中了GameObjects

Touch touch;
if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
{
    return;
}

//my code; above is Google's
foreach (var item in BlockingObjects) { //BlockingObjects is a List<GameObject>
    if (IsTouchInObject(FirstPersonCamera.ScreenPointToRay(touch.position), item)) {
        return;
    }
}
//end of my code; below is Google's

TrackableHit hit;
TrackableHitFlag …
Run Code Online (Sandbox Code Playgroud)

android raycasting arcore

4
推荐指数
1
解决办法
1536
查看次数

three.js javascript/raycasting代码与视网膜显示器mac不兼容

有没有人解释为什么下面的交互式立方体不适用于视网膜显示器mac?

http://mrdoob.github.io/three.js/examples/canvas_interactive_cubes.html

该代码适用于非视网膜macbook中的Firefox,Safari和Chrome,但在具有视网膜显示的mac中不起作用.

Macs:macbook pro视网膜显示器,imac视网膜显示器,macbook pro 2011(无视网膜显示器)全部运行Yosemite

浏览器版本:Firefox 36,Safari版本8.0.3(10600.3.18),Chrome版本40.0.2214.115(64位)

javascript retina-display three.js raycasting

3
推荐指数
1
解决办法
793
查看次数