如何清除Opengl ES的材料属性,以避免重复使用不正确的材料?

| 我正在开发Android opengl lib,但遇到了一个小问题。我知道它很容易修复,但是在跟踪时却遇到很多麻烦。简而言之,我正在研究一个3d场景图形库,该库基于非常轻巧的Scenario 2D场景图形库。深入解释该结构将花费很长时间,但是基本上树中的每个节点都有一个load(GL10 gl)方法,在该方法中会发生任何纹理和/或材质初始化。然后有用于形状节点的draw()方法,还有用于材料的killDraw()。 我的材料课旨在使像3d建模应用程序(对于我来说3ds max)这样的人像我这样的用户易于使用。这是问题: 我在场景中创建了一些3d形状:
FXShape shape4 = new FXShape();
shape4.setShape(new Model(\"cup.obj\"));

Material material = new Material();
material.setAmientAndDiffuse(1,0,0,1);          
shape5.addMaterial(material);

add(shape4);

FXShape shape5 = new FXShape();
shape5.setShape(new Cube());
shape5.addMaterial(new TextureMaterial(shape5.getShape(),R.drawable.crate));
add(shape5);
除了为第一个形状创建的红色材料不仅适用于该形状,而且对第二个形状具有自己的纹理的红色材质之外,其他所有内容都可以正常工作。 这是相关的材料方法
@Override
public void loadMaterial(GL10 gl) { 
}

@Override
public void draw(GL10 gl){
    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT,his.ambientBuffer);
    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, this.diffuseBuffer);
    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SPECULAR, this.specularBuffer);
    gl.glMaterialf(GL10.GL_FRONT_AND_BACK, GL10.GL_SHININESS, Math.min(shininess, 128));    
}

@Override
public void killDraw(GL10 gl) {
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
}
如果我在场景中放置了10个形状,然后将着色材料添加到形状1和5,则第一个材料是1-5,第二个是6-10。 我以为我应该能够做的就是调用gl.glLoadIdentity()之类的东西,然后清除它,但是我找不到材料参数。可以帮忙吗? 谢谢 抱歉,我尽量保持简洁。如果有人对lib或更多信息感兴趣,请访问git hub https://github.com/ghostandthemachine/DroidGraph     
已邀请:
您创建的每个对象都确切知道其使用的材料属性。只是让它压入/弹出堆栈上的相关状态。     

要回复问题请先登录注册