iOS用のiosペイントアプリを作成していますが、特定のポイントでペイントテクスチャを回転させてストロークの方向に向けるのが最も困難です。
ユーザーがタッチするたびに、テクスチャを数ピクセル離して描画しています。頂点は、x 座標と y 座標を持つ 2 次元の点として表現され、頂点バッファーに格納され、画面にレンダリングされます。描画に使用しているコードは次のとおりです。
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];
これでは、2 点間の偏差を表す角度で各頂点のテクスチャを回転させるという、目的の効果が得られません。
私が持っている質問は次のとおりです。
- すべてのポイントでテクスチャだけを回転するにはどうすればよいですか?
- 各頂点を x、y 座標だけで表すのに十分ですか、それとも 3 点以上にする必要がありますか?
- テクスチャ マッピングを有効にする必要がありますか? それが、各頂点でテクスチャを個別に回転させるのを妨げているのですか? もしそうなら、頂点配列のテクスチャ座標配列を上記のように表現するにはどうすればよいですか? 私はその部分を理解することができませんでした。
事前に助けてくれてありがとう!
アップデート:
私はこれを理解することができ、ここに私の答えを投稿しました: https://stackoverflow.com/a/11298219/111856