glDrawArrays неправильно рисует

. Я сделал программу рисования. Все работает, как я и ожидал. Но во время рисования иногда происходят странные вещи.

Я запускаю приложение и нажимаю левую кнопку мыши на изображении. Следует взять точку из кода:

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 ). После этого все работает нормально. См. изображение:

mouse click

Это была первая проблема. Вторая проблема заключается в том, что когда я рисую с помощью (перетаскивания нажатой мыши ), иногда появляются точки там, где они не нарисованы. Изображение:

mouse drag

Когда я продолжаю перетаскивать, он исчезает. После некоторого перетаскивания он снова появляется и снова исчезает. И так далее. Изображение:

enter image description here

Любые идеи, почему это могло произойти? Я опубликую код ниже:


Мышь вниз:

- (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);
}
7
задан hockeyman 9 July 2012 в 06:05
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: