Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 用鼠标绘制OpenGL_Objective C_Xcode_Cocoa_Opengl - Fatal编程技术网

Objective c 用鼠标绘制OpenGL

Objective c 用鼠标绘制OpenGL,objective-c,xcode,cocoa,opengl,Objective C,Xcode,Cocoa,Opengl,如果我尝试使用加载的纹理对绘制线进行纹理处理 glLineWidth(10); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBindTexture(GL_TEXTURE_2D, brushTextura); glEnable(GL_LINE_SMOOTH); glBegin(GL_LINES); glVertex2f(location.x, lo

如果我尝试使用加载的纹理对绘制线进行纹理处理

glLineWidth(10);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D, brushTextura);
glEnable(GL_LINE_SMOOTH);
glBegin(GL_LINES);
glVertex2f(location.x, location.y);
glVertex2f(prevLocation.x, prevLocation.y);
glEnd();
glFlush();
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
它什么也没画。当我使用相同的代码,但不是绘制GL_线,而是绘制GL_点时,一切都正常工作

如果我在这里不使用纹理,而使用GL_线,它会按它应该的方式绘制线,但看起来不太好。有什么办法可以画出漂亮、平滑的纹理线条吗?

线条不会“神奇地”使用纹理作为沿着线条路径应用的画笔。实际上,您必须提供一些纹理坐标,但这些坐标只会从纹理中提取切片,而不会将其作为“笔刷”应用

如果点对您有效,则仅在启用点精灵时有效,因为点将仅对单个纹理像素进行采样并将其分布到整个区域


老实说,我认为你的整个尝试是有缺陷的。通常,当你用刷子画画时,你会在一个规则的小距离上画出大量有纹理的四边形。

@hockeyman:嗯。首先,我建议您不要将OpenGL与某种图形工具包混淆。它主要用于绘制动态实时图形。我建议我已经在我的答案中写下了:一条密集的线,由紧密相距的四边形组成,带有画笔纹理。这也是Photoshop和类似程序的工作原理(只是它们不使用OpenGL进行绘图操作)。不,他是对的。“你在最后的评论中说的几乎每一句话都是错的。@霍克曼:我想知道大约15年前Photoshop是如何在没有OpenGL加速的情况下实现画笔的。实际上,没有一个专业级的图像处理程序可以在OpenGL中进行绘图操作。原因只有一个:OpenGL规范不是像素精确的。如果在两个不同的OpenGL实现上执行相同的操作序列,结果可能会有很大的不同。我已经在不同的场合尝试过了。如果在屏幕上画一条线会减慢你的程序速度,我想你会遇到更大的问题。@hockeyman:不,如果你知道如何有效地完成这些事情,那么纯粹在软件中实现画笔并不慢。这里的关键主题是实现缓存友好的算法,以便笔刷应用程序中的内部循环不会在内存读/写时暂停。