編集
わかりました、テクスチャ レンダリングにいくつかの変更を加えましたが、今は思いどおりに見えませんが、何かを変更しようとする前に、正しい道を進んでいることを確認したいだけです。私が修正しようとしている問題は次のとおりです。180000 個の頂点があります。それらのそれぞれは、190 の「クラス」のいずれかから取得できます。各クラスには、異なる時間に異なる色を割り当てることができます。だから私は190色のテクスチャを作成しようとしています.180000個の頂点のそれぞれには、対応するクラスへのtextureCoordがあります。したがって、いくつかのコードの場合:
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] からの float の配列です。len(textureIndexes) は、使用している頂点の数 (180000) です。テクスチャの場合、 textureArray には、各クラスに必要な色の RBG に対応する 190 * 3 の float が含まれています。
描画部分:
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 までの番号を持つファイルがあります。したがって、これまでのインデックス構築は、[0..1] の数値を取得するために、各頂点のインデックスを読み取ってからインデックス / 190 を読み取るだけでした。
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 red - 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) を「省略」し、テクスチャ インデックスの代わりに法線を使用すると、いくつかの異なる色が得られますが、textureIndexes はすべて最初の色を指しているように見えます。私のテクスチャから。textureIndices と法線の実際の値を含む 2 つのサンプル ファイルをアップロードしました。最初のものは機能しないが、2番目のものは機能しているように見える理由はわかりません(正しい色であるかどうかを実際に確認することはできませんが、少なくともそれらは異なります)。 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 の作成をトリプルチェックする必要がありますか?