我正在为iOS创建一个ios绘画应用程序,最难的是在特定点旋转绘画纹理以使其面向笔触方向。

我在用户的每次触摸之间将纹理绘制了几个像素。顶点被表示为带有x和y坐标的2d点到顶点缓冲区中,然后将其渲染到屏幕上。这是我用来绘制的代码:

 count = MAX(ceilf(sqrtf((end.x - start.x) * (end.x - start.x) + (end.y - start.y) * (end.y - start.y)) / kBrushPixelStep), 1);
 GLfloat *vBuffer = malloc(2 * sizeof(GLfloat));
 for(i = 0; i < count; i++) {

    vBuffer[0] = start.x + (end.x - start.x) * ((GLfloat)i / (GLfloat)count);
    vBuffer[1] = start.y + (end.y - start.y) * ((GLfloat)i / (GLfloat)count);
    CGFloat degrees = atan2(end.y - start.y, end.x - start.x) * 180 / M_PI;

    glMatrixMode(GL_TEXTURE);
    glPushMatrix();
    glVertexPointer(2, GL_FLOAT, 0, vBuffer);
    glDrawArrays(GL_POINTS, 0, count);
    glRotatef(degrees, 0, 0, 1);
    glPopMatrix();
 }

 // render to screen
 glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer);
 [context presentRenderbuffer:GL_RENDERBUFFER_OES];

这并没有给我带来理想的效果,即每个顶点上纹理的旋转角度代表两个点之间的偏差。

我的问题是:
  • 如何仅在每个点旋转纹理?
  • 仅用x,y坐标表示每个顶点是否足够?还是必须等于或大于3点?
  • 我需要启用纹理映射吗?那是什么使我无法在每个顶点处独立旋转纹理?如果是这样,我如何代表上面表示的顶点数组的纹理坐标数组?我还没弄清楚那部分。

  • 非常感谢您的提前帮助!

    更新:

    我能够弄清楚这一点,并将答案发布在这里:https://stackoverflow.com/a/11298219/111856

    最佳答案

    绘制为GL_POINTS时无法旋转点,需要使用其他方式,例如将纹理绘制为GL_TRIANGLES

    10-07 19:26
    查看更多