У меня есть следующий код в OpenTK:
unsafe
{
Vector3* data = (Vector3*)Marshal.AllocHGlobal(
Marshal.SizeOf(typeof(Vector3)) * simpleVertices.Count);
Vector2* uv = (Vector2*)Marshal.AllocHGlobal(
Marshal.SizeOf(typeof(Vector2)) * simpleVertices.Count);
for(int i = 0; i < simpleVertices.Count; i++)
{
((Vector3*)data)[i] = simpleVertices[i];
Vector2 thisuv = uvData[i];
((Vector2*)uv)[i] = uvData[i];
}
GL.BindTexture(All.Texture2D, texture.GLTexture.OpenGLName);
GL.TexParameter(All.Texture2D, All.TextureWrapS, (int)TextureWrapMode.Repeat);
GL.TexParameter(All.Texture2D, All.TextureWrapT, (int)TextureWrapMode.Repeat);
byte []squareColors = new byte[simpleVertices.Count];
Random.NextBytes(squareColors);
GL.ColorPointer (vertices.Count, All.UnsignedByte, 0, squareColors);
GL.VertexPointer(3, All.Float, sizeof(Vector3), new IntPtr(data));
GL.DrawArrays(All.Triangles, 0, simpleVertices.Count);
Marshal.FreeHGlobal((IntPtr)data);
Marshal.FreeHGlobal((IntPtr)uv);
}
Я знаю, что данные для вершин и uv верны (по крайней мере, они отлично работают в моем средстве визуализации XNA), и я вижу, что белые многоугольники правильно отображаются на экране.
Из приведенного выше кода я должен видеть набор цветов, так как я заполняю SquareColours случайным числом байтов (я проверил, что SquareColors заполняется случайными байтами), но это не так, все вершины нарисовано белым.
Я также пытался привязать текстуру (через GL.BindTexture), и это также не удалось.
Любые идеи, почему это не работает?
редактировать: когда я добавил, чтобы включить цвет (см. первый комментарий к этому сообщению), приложение вылетело со следующим выводом:
Трассировки стека:
Собственная трассировка стека:
Информация об отладке из gdb:
/tmp/mono-gdb-commands.ZEI8zH:1: ошибка в исходном командном файле: невозможно отлаживать себя
У вас неправильные аргументы для ColorPointer. Первый аргумент — количество компонентов на цвет. Используйте 3 для цветов RGB.
Попробуй это: