尝试绘制实心圆柱并不能达到我想要的效果。这是我的代码:
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(..)
结果:
我做错了什么?
谢谢和最好的问候
托拜厄斯
答案 0 :(得分:1)
您的问题听起来与此处发生的问题非常相似:Android -- OpenGL doesn't display w/ emulator?
如果我是你,我会完成他所做的两个教程,以确保你不会遗漏任何OpenGL开发所需的内容,并确保你的模拟器正常工作。以下是为您提供方便的教程:
请在评论中告诉我这是否适合您。