hoc*_*man 7 opengl macos xcode cocoa objective-c
我做了一个绘画程序.一切都按照我的预期运作.但在绘画时,有时会发生一些奇怪的事情.
我运行app,然后在图像上按鼠标左键.它应该从代码中得出点:
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);
Run Code Online (Sandbox Code Playgroud)
在我按下的地方.mouseDown注册mouseDown位置,将其转换为NSValue,发送到数组,然后在绘制之前我将NSValue提取到CGPoint并将其发送到GLfloat,以便glDrawArrays可以绘制它.但无论我在图像上单击鼠标,它都会在坐标(0,0)处绘制点.之后,每件事情都可以.见图:

这是第一个问题.第二个问题是当我用它绘画时(拖动按下的鼠标),有时会出现点未绘制的位置.图片:

当我继续拖动它消失.拖动后再次出现并再次消失.等等.图片:

任何想法为什么会发生?我将发布以下代码:
鼠标按下:
- (void) mouseDown:(NSEvent *)event
{
location = [self convertPoint: [event locationInWindow] fromView:self];
NSValue *locationValue = [NSValue valueWithPoint:location];
[vertices addObject:locationValue];
[self drawing];
}
Run Code Online (Sandbox Code Playgroud)
拖动鼠标:
- (void) mouseDragged:(NSEvent *)event
{
location = [self convertPoint: [event locationInWindow] fromView:self];
NSValue *locationValue = [NSValue valueWithPoint:location];
[vertices addObject:locationValue];
[self drawing];
}
Run Code Online (Sandbox Code Playgroud)
画画:
- (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);
}
Run Code Online (Sandbox Code Playgroud)
您正在设置您的count变量(使用的变量glDrawArrays)[vertices count] * 2,这看起来很奇怪.
最后一个参数glDrawArrays是要绘制的顶点数,而在您的代码中,您似乎将它设置为加倍数(可能您认为它是浮点数?),这意味着您只是在第一个count顶点之后绘制垃圾.
| 归档时间: |
|
| 查看次数: |
2460 次 |
| 最近记录: |