【问题标题】:draw like Spray paint using opengl for iPhone使用 iPhone 的 opengl 像喷漆一样绘制
【发布时间】:2012-06-15 21:51:17
【问题描述】:

我正在尝试制作具有绘图功能的应用程序。在那我需要提供像 SPRAY PAINT 这样的功能。

我已经编写了类似的代码

static GLfloat*     vertexBuffer = NULL;

static NSUInteger   vertexMax = 64;

NSUInteger          vertexCount = 0,
                    count,
                    i;

[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);

// Convert locations from Points to Pixels
CGFloat scale = self.contentScaleFactor;
start.x *= scale;
start.y *= scale;
end.x *= scale;
end.y *= scale;

// Allocate vertex array buffer
if(vertexBuffer == NULL)
    vertexBuffer = malloc(vertexMax * 2 * sizeof(GLfloat));

// Add points to the buffer so there are drawing points every X pixels
count = MAX(ceilf(sqrtf((end.x - start.x) * (end.x - start.x) + (end.y - start.y) * (end.y - start.y)) / kBrushPixelStep), 1);
for(i = 0; i < count; ++i) {
    if(vertexCount == vertexMax) {
        vertexMax = 2 * vertexMax;
        vertexBuffer = realloc(vertexBuffer, vertexMax * 2 * sizeof(GLfloat));
    }

    vertexBuffer[2 * vertexCount + 0] = start.x + (end.x - start.x) * ((GLfloat)i / (GLfloat)count);
    vertexBuffer[2 * vertexCount + 1] = start.y + (end.y - start.y) * ((GLfloat)i / (GLfloat)count);
    vertexCount += 1;
}

// Render the vertex array
glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
glDrawArrays(GL_POINTS, 01, vertexCount);
glStencilMask(GL_STENCIL_VALUE_MASK);
glDepthMask(GL_FALSE);
// Display the buffer
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];

现在我需要为 Paint 编写哪些额外代码,看起来像喷漆?

【问题讨论】:

  • 看起来我希望 iPhone 上的喷漆看起来......喷漆的变量比你可以通过触摸 ui 表示的多......比如距离和矢量......我猜你可以让它过度饱和并滴落。

标签: iphone ios opengl-es paint


【解决方案1】:

apple sample code 显示了如何执行此操作。为什么不从那开始呢?

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多