我已经完成了很多关于网格的 DirecX 工作,但我无法理解我在 OpenGL ES 中的三角形发生了什么。我尝试使用网络上的一些示例框以及我在旧项目中使用的框的数据,但它们总是出错,而且通常是不可见的。
这是一个例子。
与顶点:
-25.0 -25.0 25.0
25.0 -25.0 25.0
-25.0 25.0 25.0
25.0 25.0 25.0
和索引(从 0 开始):
2 1 3
如果我使用索引,我得到一个三角形,它的直角指向屏幕的一个完全不同的角落,而不是它给我的那个:
3 1 2
根据我的理解,如果顶点在我当前的配置中以 CW 顺序列出,它甚至不应该显示三角形。关于这些顶点发生了什么的任何线索???
顺便说一句,这是我的绘图代码:
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
//gl.glColor4f(1.0f,0.0f,1.0f,1.0f);
gl.glDrawElements(GL10.GL_TRIANGLES, indexCount, GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
编辑:
3 1 2 绘制一个指向左上角的角, 2 1 3 绘制一个指向右上角的角,但只绘制第一个列出的角。这越来越奇怪了……
{
public void initAndStuff(...)
{
try{
//
...
They get initialized up here...
This is also where the external data is fed in (but is erased below)
//
////////////////////////////////
vertexBuffer.clear();
indexBuffer.clear();
vertexBuffer.put(-25.0f);
vertexBuffer.put(-25.0f);
vertexBuffer.put(25.0f);
vertexBuffer.put(25.0f);
vertexBuffer.put(-25.0f);
vertexBuffer.put(25.0f);
vertexBuffer.put(-25.0f);
vertexBuffer.put(25.0f);
vertexBuffer.put(25.0f);
vertexBuffer.put(25.0f);
vertexBuffer.put(25.0f);
vertexBuffer.put(25.0f);
indexBuffer.put(3);
indexBuffer.put(1); // points toward top left
indexBuffer.put(2);
indexBuffer.put(2);
indexBuffer.put(1); // points toward top right
indexBuffer.put(3);
indexIndex = 6;
//////////////////////////////////
// wrap things up
vertexBuffer.position(0);
indexBuffer.position(0);
}
catch(Exception e)
{
e.printStackTrace();
Toast.makeText(context,"exception in loadfile",Toast.LENGTH_LONG).show();
return false;
}
return true;
}
public final void draw(GL10 gl)
{
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
//gl.glColor4f(1.0f,0.0f,1.0f,1.0f);
gl.glDrawElements(GL10.GL_TRIANGLES, indexIndex, GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
}
}