2013-06-17 2 views
1

Я создал объект Mesh, содержащее положение, нормальными, и информация о цвете, используя следующий код:Vertex окраска не работает с динамически создаваемыми сетками при использовании освещения

final Vector3[] vertexVectors = this.getVertexVectors(); 
final short[] indices = this.getIndices(); 
final Vector3[] vertexNormals = this.getNormals(vertexVectors, indices); 
final float[] vertices = new float[vertexVectors.length * 7]; 

for (int index = 0; index < vertexVectors.length; index++) 
{ 
    vertices[(index * 7) + 0] = vertexVectors[index].x; 
    vertices[(index * 7) + 1] = vertexVectors[index].y; 
    vertices[(index * 7) + 2] = vertexVectors[index].z; 

    vertices[(index * 7) + 3] = vertexNormals[index].x; 
    vertices[(index * 7) + 4] = vertexNormals[index].y; 
    vertices[(index * 7) + 5] = vertexNormals[index].z; 

    vertices[(index * 7) + 6] = Color.toFloatBits(0, 255, 0, 255); 
} 

final Mesh mesh = new Mesh(true, vertices.length/3, indices.length, new VertexAttribute(Usage.Position, 3, "a_position"), new VertexAttribute(Usage.Normal, 3, "a_normal"), new VertexAttribute(Usage.ColorPacked, 4, "a_color")); 
mesh.setVertices(vertices); 
mesh.setIndices(indices); 
return mesh; 

Я затем создать объект модели и объект ModelInstance из сетки с этим кодом:

private Model model; 
private ModelInstance instance; 

final ModelBuilder modelBuilder = new ModelBuilder(); 
modelBuilder.begin(); 
modelBuilder.part("0", this.getCustomMesh(), GL10.GL_TRIANGLES, new Material()); 
this.model = modelBuilder.end(); 
this.instance = new ModelInstance(this.model); 

Я Отрендерьте ModelInstance используя этот код:

Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

this.modelBatch.begin(this.cam); 
this.modelBatch.render(this.instance, this.lights); 
this.modelBatch.end(); 

Моя проблема заключается в том, что у модели нет цвета. Модель должна быть зеленой для цветов вершин, но пока я использую освещение, модель выглядит белой. Если я удалю освещение, модель будет зеленой, как ожидалось (но без красивого оттенка). Я попытался добавить Gdx.gl.glEnable(GL10.GL_COLOR_MATERIAL); моему конструктору за this question, но это только делает модель ярче, но все же белой. Какие еще настройки необходимы для моей модели для визуализации цветов вершин с подсветкой?

ответ

0

Кажется, что добавление ColorAttribute.createDiffuse к материалу модели устраняет проблему. Это означает, что изменение этой линии:

modelBuilder.part("0", this.getCustomMesh(), GL10.GL_TRIANGLES, new Material()); 

с этим:

modelBuilder.part("0", this.getCustomMesh(), GL10.GL_TRIANGLES, new Material(ColorAttribute.createDiffuse(0, 0, 0, 0))); 

Я не в полной мере понять, почему и в качестве дополнительного любопытства, значения, передаваемые методу createDiffuse, похоже, не заметно не влияют на модель.