【问题标题】:Android / OpenGL ES: Draw primitive doesn't do anythingAndroid / OpenGL ES:绘制原语不做任何事情
【发布时间】:2011-06-13 17:41:39
【问题描述】:

试图画一个实心圆柱并不能达到我想要的效果。这是我的代码:

public static void solidCylinder(GL10 gl, float radius, float height, int slices, int steps)
{
    float zStep = height/steps;
    float alphaStep = (float)((2*Math.PI) / slices);
    float crtZ = -height/2;
    float[] vdata = new float[6 * steps * (slices+1)];
    for(int iStep = 0; iStep < steps; iStep++)
    {   
        float crtAlpha = 0;
        int iAlpha;
        for (iAlpha = 0; iAlpha <= slices; iAlpha++)
        { 
            vdata[iStep * (iAlpha*6)+0] = (float)(radius * -Math.sin(crtAlpha));
            vdata[iStep * (iAlpha*6)+1] = crtZ;
            vdata[iStep * (iAlpha*6)+2] = (float)(radius * Math.cos(crtAlpha));
            vdata[iStep * (iAlpha*6)+3] = (float)(radius * -Math.sin(crtAlpha));
            vdata[iStep * (iAlpha*6)+4] = crtZ + zStep;
            vdata[iStep * (iAlpha*6)+5] = (float)(radius * Math.cos(crtAlpha));

            crtAlpha += alphaStep;
        }
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, FloatBuffer.wrap(vdata));
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 2*(slices+1) );
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        crtZ += zStep;                        
    } 

}

这里是我调用方法的地方:

@Override
public void onDrawFrame(GL10 gl) {
    // IN MY DRAWING FUNCTION:
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glColor4f(1.0f,1.0f,1.0f, 1.0f); 
    gl.glPushMatrix();
        Primitives.solidCylinder(gl, 2.0f, 2.0f, 8, 3);
    gl.glPopMatrix();

}

当我在 C/C++ 中拥有相同的功能时(尽管直接使用 glVertex*()- 函数)它起作用了。

编辑:在模拟器上它保持全黑,因为没有调用solidCylinder(..)

结果

我做错了什么?

感谢和问候

托比亚斯

【问题讨论】:

  • 那么当它“没有做你想做的事”时,“它做了什么”?
  • 哦,对了。忘记写了,sry! :D 已编辑

标签: android opengl-es


【解决方案1】:

您的问题听起来与这里发生的问题非常相似:Android -- OpenGL doesn't display w/ emulator?

如果我是你,我会完成他所做的两个教程,以确保你没有遗漏 OpenGL 开发所需的任何内容,并确保你的模拟器能够正常工作。以下是为您提供方便的教程:

让我知道这在 cmets 中是否适合你。

【讨论】:

  • 谢谢,罗伯特。该设备(带有 Android 2.2 的 HTC Desire)的行为方式与模拟器完全相同。我发布的基本上就是所有被调用的内容。将查看其他提示并让您了解最新信息。
  • 更新:好的,它一定是我的数组算术中的东西。仍然无法正常工作,但您可以在 stackoverflow.com/posts/6325070/revisions 上查看修订版 3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多