РЕДАКТИРОВАТЬ
Хорошо, я добавил некоторые изменения в рендеринг текстур, и теперь я нахожусь в точке, которая выглядит не так, как я хочу, но перед тем, как пытаться изменитьвсе, что я просто хочу быть уверен, что я на правильном пути.Проблема, которую я пытаюсь решить: у меня 180000 вершин.Каждый из них может быть из одного из 190 «классов».Каждый класс может иметь свой цвет, назначенный в разное время.Итак, я пытаюсь создать текстуру с 190 цветами, и для каждой из 180000 вершин есть текстурное соответствие классу coresponding.Так для некоторого кода:
self.bufferTextureIndex = glGenBuffersARB(1)
glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferTextureIndex)
glBufferDataARB(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(textureIndexes), ADT.voidDataPointer(textureIndexes), GL_STATIC_DRAW_ARB)
self.texture = glGenTextures(1)
glBindTexture(GL_TEXTURE_1D, self.texture)
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 190, 0, GL_RGB , GL_FLOAT, textureArray)
Итак, textureIndexes - это массив чисел с плавающей точкой из [0..1].len (textureIndexes) - количество вершин, которые я использую (180000).Для текстуры textureArray содержит 190 * 3 плавающих ядра, соответствующих RBG цветов, которые я хочу для каждого класса.
Рисующая часть:
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferTextureIndex)
glTexCoordPointer(1, GL_FLOAT, 0, None);
glBindTexture(GL_TEXTURE_1D, self.texture)
glEnable(GL_TEXTURE_1D)
if type == GL_POINTS:
glDrawArrays( GL_POINTS, 0, len(self.vertices) / 3 );
else:
glDrawElements(GL_TRIANGLES, len(self.triangles) , GL_UNSIGNED_SHORT, ADT.voidDataPointer(self.triangles))
Так выглядит ли этот подход правильным?Результат не тот, который я ожидаю, но это может быть для выбранной мной цветовой кодификации, и я могу еще раз рассмотреть это, если основной подход будет хорошим.Я думаю, что, скорее всего, индексы построены неправильно.Для их построения у меня есть файл с числом от 0 до 190, соответствующий классу для каждого индекса.Таким образом, мое построение индекса до сих пор было просто читать index, а затем index / 190 для каждой вершины, чтобы получить число в [0..1]
EDIT2 Так что я воспользовался вашим советом, выполнил индекс+ 0,5 / 190 для генерации моих индексов.Я печатаю длину и значения массива индексов.Это 60000, и все числа от 0 до 1, в основном от 0,3 до 0,95.Но все же все мои вершины одного цвета.Так что единственное, что я не проверил, это 1D создание текстур.Может быть, вот где я ошибся:
i = 0
while i < 30:
textureArray.append([1,0,0])
i = i + 1
while i < 60:
textureArray.append([1,1,0])
i = i + 1
while i < 90:
textureArray.append([1,1,1])
i = i + 1
while i < 120:
textureArray.append([0,1,1])
i = i + 1
while i < 150:
textureArray.append([0,0,1])
i = i + 1
while i < 190:
i = i + 1
textureArray.append([0,0,0])
Так я генерирую свой массив текстур.Это будет не реальное решение, а по причинам тестирования.Так что моя текстура должна быть 1/6 красной - 1/6 ...Генерация текстуры, как указано выше:
self.texture = glGenTextures(1)
glBindTexture(GL_TEXTURE_1D, self.texture)
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT)
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT)
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 190, 0, GL_RGB , GL_FLOAT, textureArray)
Правильно ли генерируется эта текстура?Потому что, хотя диапазон моих индексов такой же, как я упоминал ранее, все мои вершины имеют цвет самого первого цвета из текстуры.Забавно, что, если я «опущу» glBindBufferARB (GL_ARRAY_BUFFER_ARB, self.bufferTextureIndex), сформирую чертеж и позволю нормали занять место текстурных индексов, я получу несколько разных цветов, но, похоже, текстурные индексы указывают на самый первый цветиз моей текстуры.Я загрузил два примера файлов с фактическими значениями textureIndices и normals.Понятия не имею, почему первый не работает, а второй, кажется, работает (не могу реально проверить, правильные ли они цвета, но, по крайней мере, они разные).http://www.megafileupload.com/en/file/315895/textureIndices-txt.html http://www.megafileupload.com/en/file/315894/normalsTest-txt.html
EDIT3
Так что теперь мои индексы работают.Вот пример изображения:
http://i.stack.imgur.com/yvlV3.png
Однако странная часть состоит в том, что, как вы можете видеть, границы не определены должным образом.Может ли это каким-либо образом повлиять на некоторые параметры, которые я передаю в текстуру, или я должен выполнить тройную проверку своего создания textureIndex?