gpt4 book ai didi

Android OpenGL - 帮助进行 C++ 转换

转载 作者:行者123 更新时间:2023-11-28 08:18:50 25 4
gpt4 key购买 nike

我正在尝试将此 C++ 代码转换为 Android 的 Java。但是,我使用的是 GL10,而 glGetDoublev 显然在 OpenGL-ES 上不受支持。我还能如何执行此功能?

// Get point by reading z buffer and unprojecting to object coords
void Pick(int x, int y)
{
GLint viewport[4];
GLdouble mvmatrix[16], projmatrix[16];

glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix);
glGetDoublev(GL_PROJECTION_MATRIX, projmatrix);

int winx = x;
int winy = winHeight - y;
GLfloat winz = 0.0;
GLdouble objx = 0.0;
GLdouble objy = 0.0;
GLdouble objz = 0.0;

// Get winz for given winx and winy
glReadPixels(winx, winy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winz);

// Make sure there was something at the point
if (winz >= 1.0)
{
qDebug("Nothing picked");
}
else
{
// Get object coords from win coords
gluUnProject((GLdouble)winx, (GLdouble)winy, (GLdouble)winz,
mvmatrix, projmatrix, viewport,
&objx, &objy, &objz);

qDebug("Pick: win=%d,%d,%.3f obj=%.3f,%.3f,%.3f",
winx, winy, winz, objx, objy, objz);

// Place a marker at that position
Marker marker;
marker.point.x = objx;
marker.point.y = objy;
marker.point.z = objz;
markerList << marker;

// limit to two markers
if (markerList.count() > 2)
markerList.pop_front();

Rebuild();
}
}

最佳答案

我在尝试使用 Android OpenGL ES 1.0 时遇到了这个问题。由于 OpenGL ES 1.0 不允许您直接获取矩阵(据我所知 glGetFloatv 未在 1.0 中实现),因此您需要制作一个跟踪矩阵的包装器。

如果您使用 OpenGL ES 1.1,您可以使用 glGetFloatv,因为它已经实现。

这是我最初找到解决方案的网站: http://www.41post.com/1540/programming/android-opengl-get-the-modelview-matrix-on-15-cupcake

所有实现细节都在那里。

关于Android OpenGL - 帮助进行 C++ 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697484/

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