お絵描きプログラムを作りました。すべてが期待どおりに機能します。でも絵を描いていると、たまに不思議なことが起こります。
アプリを実行し、画像上でマウスの左ボタンを押します。コードからポイントを引き出す必要があります。
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, brushTextura);
glPointSize(100);
glVertexPointer(2, GL_FLOAT, 0,GLVertices);
glDrawArrays(GL_POINTS, 0, count);
glDisableClientState(GL_VERTEX_ARRAY);
押したところで。mouseDown
mouseDown の位置を登録し、NSValue に変換して配列に送信し、描画する前に NSValue を CGPoint に抽出して GLfloat に送信し、glDrawArrays で描画できるようにします。しかし、画像のどこでマウスをクリックしても、座標 (0,0) に点が描画されます。その後、すべてが正常に機能します。画像を参照してください:
これが最初の問題でした。2 つ目の問題は、それを使用してペイントすると (マウスをドラッグして押す)、描画されていない場所にポイントが表示されることがあります。画像:
ドラッグし続けると消えます。ドラッグした後、再び表示され、再び消えます。等々。画像:
なぜそれが起こる可能性があるのですか?以下にコードを掲載します。
マウスダウン:
- (void) mouseDown:(NSEvent *)event
{
location = [self convertPoint: [event locationInWindow] fromView:self];
NSValue *locationValue = [NSValue valueWithPoint:location];
[vertices addObject:locationValue];
[self drawing];
}
マウスドラッグ:
- (void) mouseDragged:(NSEvent *)event
{
location = [self convertPoint: [event locationInWindow] fromView:self];
NSValue *locationValue = [NSValue valueWithPoint:location];
[vertices addObject:locationValue];
[self drawing];
}
描く:
- (void) drawing {
int count = [vertices count] * 2;
NSLog(@"count: %d", count);
int currIndex = 0;
GLfloat *GLVertices = (GLfloat *)malloc(count * sizeof(GLfloat));
for (NSValue *locationValue in vertices) {
CGPoint loc = locationValue.pointValue;
GLVertices[currIndex++] = loc.x;
GLVertices[currIndex++] = loc.y;
}
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, brushTextura);
glPointSize(100);
glVertexPointer(2, GL_FLOAT, 0, GLVertices);
glDrawArrays(GL_POINTS, 0, count);
glDisableClientState(GL_VERTEX_ARRAY);
}