gpt4 book ai didi

java - 如何检查 3D 对象是否与 OpenGL ES 2 中的射线相交 - Android

转载 作者:行者123 更新时间:2023-12-01 17:17:30 26 4
gpt4 key购买 nike

我是 OpenGL 新手。我在 Android 中的 glSurfaceView 上渲染了一些 3d 形状。现在我想找到当用户触摸屏幕时用户单击了哪个对象。我有触摸坐标。如何检查穿过屏幕坐标的垂直光线是否与我渲染的形状之一相交以及如何找到那是哪一个?

(附加:我在 Maxst ar SDK、即时跟踪器中执行此操作)

我有渲染对象的以下数据(Maxst SDK 保留在下面的数据),并且我有触摸坐标。

float[] localMvpMatrix = new float[16];
float [] projectionMatrix = new float[16];
float[] modelMatrix = new float[16];
float[] translation = new float[16];
float[] scale = new float[16];
float[] rotation = new float[16];
float[] transform = new float[16];

编辑:如何使用 GLU.gluUnProject() 在 android 中实现此目的?谁能解释一下这些参数是什么以及如何使用这个方法的输出(在Android中)?

最佳答案

作为一个变体。不是直接回答。您可以尝试将对象的顶点坐标转换为屏幕的像素:

import android.opengl.GLU
// widthScreen and heightScreen values will be different for port and land orientation
private var view: IntArray = intArrayOf(0, 0, widthScreen, heightScreen)
private var windowCoordinates = FloatArray(3)
...
// modelX, modelY, modelZ - model coordinates of vertex
GLU.gluProject(modelX, modelY, modelZ, modelViewMatrix, 0,
projectionMatrix, 0, view, 0, windowCoordinates, 0)

// coordinates (pixels) of the screen
val x = coordinatesWindow[0]
val y = coordinatesWindow[1]

并将关键顶点的位置与二维空间中的触摸坐标进行比较。

或者获取对象的坐标中心:

GLU.gluProject(0.0f, 0.0f, 0.0f, modelViewMatrix, 0, projectionMatrix, 0, view, 0,
windowCoordinates, 0)

并使比较相对接触对象的中心。在这种情况下需要考虑物体的距离。

关于java - 如何检查 3D 对象是否与 OpenGL ES 2 中的射线相交 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61353404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com