Я работаю над Android opengl lib и столкнулся с небольшой проблемой.Я знаю, что это легко исправить, но у меня много проблем с поиском.В скорлупе я работаю над библиотекой графов трехмерных сцен, которая основана на действительно легкой и удивительной библиотеке графических сцен Scenario 2D.Подробное объяснение структуры заняло бы слишком много времени, но по существу каждый узел дерева имеет метод загрузки (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 () и очистить его, но я не могу найти это для параметров материала.Может ли кто-нибудь помочь?
спасибо
извините за длину, я старался быть как можно более кратким.Если кого-то интересует библиотека или дополнительная информация, я на git hub https://github.com/ghostandthemachine/DroidGraph