返回 android 屏幕上 opengl 形状的像素坐标
Returning pixel coordinates of opengl shapes on android screen
我想在屏幕上不再显示形状时将计数加 1。问题是我需要知道我的形状的顶点在 android 设备屏幕上的位置。我如何计算这个?我发现的是绘制多边形时顶点所在的位置。
In glrenderer class
int count = 0;
int h, w;
public MyGLRenderer() {
h = MyGLSurfaceView.height;
w = MyGLSurfaceView.width;
}
public void onScreen(int a) {
for (int i = 0; i < star[a].vertices.length; i+=3) {
Log.i("vert", String.valueOf(star[a].vertices[i]));//i found where vertices are in relation to other vertices
float starW = (star[a].vertices[i] * (w/2)) + (w/2) * GL10.GL_PROJECTION * GL10.GL_MODELVIEW;//i need to know where vertices are on thhe screen
float starH = (star[a].vertices[i+1] * (h/2)) + (h/2) * GL10.GL_PROJECTION * GL10.GL_MODELVIEW;
if ( starW >= w ||
starW <= 0 ||
starH >= h ||
starH <= 0){
count++;
// Log.i("count", String.valueOf(count));
}
}
}
在我的 glsurfaceview class 我有
public static int height, width;
public MyGLSurfaceView(Context context){
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Point size = new Point();
display.getSize(size);
height = size.y;
width = size.x;
}
这行不通:
float starW = (star[a].vertices[i] * (w/2)) + (w/2) * GL10.GL_PROJECTION * GL10.GL_MODELVIEW;
float starH = (star[a].vertices[i+1] * (h/2)) + (h/2) * GL10.GL_PROJECTION * GL10.GL_MODELVIEW;
GL_PROJECTION
和 GL_MODELVIEW
是 枚举值 ,它们是 glMatrixMode()
的可能参数值。它们绝对 不是 矩阵。
您在这里尝试做的是在您自己的代码中应用投影和模型视图矩阵。获取这些矩阵当前值的最简单方法是将它们保存在您自己的代码中。毕竟,你确实指定了它们,所以你应该知道它们是什么。
如果你想查询这些矩阵的当前值,正确的方法是:
float[] mvMat = new float[16];
GL11.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, mvMat);
float[] projMat = new float[16];
GL11.glGetFloatv(GL11.GL_PROJECTION_MATRIX, projMat);
有了这些矩阵后,您就可以开始将它们与顶点坐标相乘了。您可以为此编写自己的代码,也可以使用 android.opengl.Matrix class。 multiplyMM()
和 multiplyMV()
是 class 中的方法,可以对这项工作派上用场。
除此之外,当我看到人们使用 ES 1.x 时,这是不可避免的评论:在我看来,此时必须将其视为过时的 API。除非你有非常充分的理由使用它,否则我强烈建议使用 ES 2.0 或更高版本。
我想在屏幕上不再显示形状时将计数加 1。问题是我需要知道我的形状的顶点在 android 设备屏幕上的位置。我如何计算这个?我发现的是绘制多边形时顶点所在的位置。
In glrenderer class
int count = 0;
int h, w;
public MyGLRenderer() {
h = MyGLSurfaceView.height;
w = MyGLSurfaceView.width;
}
public void onScreen(int a) {
for (int i = 0; i < star[a].vertices.length; i+=3) {
Log.i("vert", String.valueOf(star[a].vertices[i]));//i found where vertices are in relation to other vertices
float starW = (star[a].vertices[i] * (w/2)) + (w/2) * GL10.GL_PROJECTION * GL10.GL_MODELVIEW;//i need to know where vertices are on thhe screen
float starH = (star[a].vertices[i+1] * (h/2)) + (h/2) * GL10.GL_PROJECTION * GL10.GL_MODELVIEW;
if ( starW >= w ||
starW <= 0 ||
starH >= h ||
starH <= 0){
count++;
// Log.i("count", String.valueOf(count));
}
}
}
在我的 glsurfaceview class 我有
public static int height, width;
public MyGLSurfaceView(Context context){
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Point size = new Point();
display.getSize(size);
height = size.y;
width = size.x;
}
这行不通:
float starW = (star[a].vertices[i] * (w/2)) + (w/2) * GL10.GL_PROJECTION * GL10.GL_MODELVIEW;
float starH = (star[a].vertices[i+1] * (h/2)) + (h/2) * GL10.GL_PROJECTION * GL10.GL_MODELVIEW;
GL_PROJECTION
和 GL_MODELVIEW
是 枚举值 ,它们是 glMatrixMode()
的可能参数值。它们绝对 不是 矩阵。
您在这里尝试做的是在您自己的代码中应用投影和模型视图矩阵。获取这些矩阵当前值的最简单方法是将它们保存在您自己的代码中。毕竟,你确实指定了它们,所以你应该知道它们是什么。
如果你想查询这些矩阵的当前值,正确的方法是:
float[] mvMat = new float[16];
GL11.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, mvMat);
float[] projMat = new float[16];
GL11.glGetFloatv(GL11.GL_PROJECTION_MATRIX, projMat);
有了这些矩阵后,您就可以开始将它们与顶点坐标相乘了。您可以为此编写自己的代码,也可以使用 android.opengl.Matrix class。 multiplyMM()
和 multiplyMV()
是 class 中的方法,可以对这项工作派上用场。
除此之外,当我看到人们使用 ES 1.x 时,这是不可避免的评论:在我看来,此时必须将其视为过时的 API。除非你有非常充分的理由使用它,否则我强烈建议使用 ES 2.0 或更高版本。