2013-11-03 60 views
0

我有一个由4个向量组成的结构,我用它来创建一个矩形。其中一个矩阵定义矩形的颜色。每次我绘制一个矩形,我需要更新它的颜色。问题是,我不知道如何更新这部分结构。谁能帮忙?谢谢!修改OpenGL矩阵的结构

typedef struct { 
    GLKVector3 positionCoordinates; 
    GLKVector2 textureCoordinates; 
    GLKVector3 normalCoordinates; 
    GLKVector4 colorCoordinates; 
} VertexData; 

VertexData unitSquare[] = { 
    { {-0.5f, -0.5f, 0.0f}, {0.0f, 0.0f}, { 0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f} }, 
    { { 0.5f, -0.5f, 0.0f}, {0.0f, 0.0f}, { 0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f} }, 
    { {-0.5f, 0.5f, 0.0f}, {0.0f, 0.0f}, { 0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f} }, 
    { {-0.5f, 0.5f, 0.0f}, {0.0f, 0.0f}, { 0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f} }, 
    { { 0.5f, -0.5f, 0.0f}, {0.0f, 0.0f}, { 0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f} }, 
    { { 0.5f, 0.5f, 0.0f}, {0.0f, 0.0f}, { 0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f} } 
}; 

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { 
    ... 
    // lame attempt to update the color of one vertex 
    unitSquare->colorCoordinates[0] = {0.0f, 0.0f, 0.0f, 1.0f}; 

    ... 
} 

回答

1

有你的代码错误

  1. 单位正方形三件事情是结构的数组。即使你的CPU上更新的单位正方形变量使用此

    unitSquare[0].colorCoordinate = GLKVector4Make(.1, .1, .1, .1);

  2. ,你仍然需要通过glBindBuffer结合您的缓冲区,并使用glBufferData,或GPU韩元更新为新的颜色你的顶点缓冲区对象't。但是不要这么做,因为......

  3. 所有的顶点在你的示例中都具有相同的颜色 - 如果在整个程序中都是这样,那么使用制服更有效率 - 查找glUniform3fv函数。

希望这会有所帮助。

+0

感谢您的所有建议。当我将代码更改为您的建议时,出现错误“预期表达式”。任何想法为什么这是? – Alex

+0

用“。”代替“ - >”。为我工作。因为你没有创建指针数组 - “ - >”相当于取消引用一个指向结构体的指针,然后使用“。”。运营商。 –

+0

我也意识到 - >操作符的滥用,但那是当我得到错误。我无法弄清楚为什么我会得到这个错误,甚至错误的含义。 – Alex