1

私はまだテクスチャの使用方法を理解しようとしていますが、現在、各頂点にそのクラスに固有の色を与えるために glTexCoordPointer を使用しようとしています。いくつかのチェックを行いましたが、状況は次のとおりです。

    self.bufferVertices = glGenBuffersARB(1)
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(vertices), ADT.voidDataPointer(vertices), GL_STATIC_DRAW_ARB)
    self.vertices = vertices
    self.bufferNormals = glGenBuffersARB(1)
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(normals), ADT.voidDataPointer(normals), GL_STATIC_DRAW_ARB)
    self.normals = normals
    self.triangles = triangles
    textureIndexes = [] 
    for int in areas:
        textureIndexes.append(float(int)/190.0) 
        print str(int) + " " + str(float(int)/190)
    print str(len(self.vertices)) + str(len(textureIndexes))    
    self.bufferTextureIndex = glGenBuffersARB(1)
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferTextureIndex)
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(numpy.array(textureIndexes,dtype=numpy.float32)), ADT.voidDataPointer(numpy.array(textureIndexes,dtype=numpy.float32)), GL_STATIC_DRAW_ARB)               
    for color in textureArray:
        print str(color)
    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)

そこで、頂点、法線、三角形、テクスチャ インデックスの VBO を生成します。ここで、textureIndexes に対して取得している値を確認したいと思いました。すべては間隔 [0..1] からのもので、textureIndexes の長さ = length ( vertices ) / 3 です。

テクスチャについては、190 個の [x,x,x] RGB 値のベクトルである textureArray を生成します。私も6等分にしました。したがって、テストを簡単にするために、最初の 1/6 エントリはある色から次の色へと続きます。

描画のために:

glEnableClientState(GL_VERTEX_ARRAY)         
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
    glVertexPointer(3, GL_FLOAT, 0, None)          
    glEnableClientState(GL_NORMAL_ARRAY);
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
    glNormalPointer(GL_FLOAT, 0, None)     


    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)
    glClientActiveTexture(GL_TEXTURE0);
    glDrawElements(GL_TRIANGLES, len(self.triangles) , GL_UNSIGNED_SHORT, ADT.voidDataPointer(self.triangles))

しかし、テクスチャの最初の 1/6 部分の色に対応して、すべてのポイントが同じ色になっています。ご意見をお寄せください。

4

1 に答える 1

-1

私はそれがまったく何かを描いていることに驚いています。次の行に誤りがあります。

    glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 190, 0, GL_RGB , GL_FLOAT, textureArray)

OpenGL 仕様では、テクスチャのサイズが 2 の累乗である必要があります。190 を 256 または 64 に置き換えると、より良い結果が得られる場合があります。

于 2011-06-13T21:36:56.100 に答える