1

Mac OS 用の OpenGL ブラシを実装しようとしています。サンプルとして GLPaint を使用します。主な問題は、GLPaint が iOS アプリケーションであり、Mac OS で必要なことです。どういうわけか、MAC OSで動作するようにほとんど編集しましたが(少なくともそう思います)、まだ実行されていません。主な問題は「EAGLContext」「NSOpenGLContext」、または「OpenGL」「OpenGL ES」の違いにあると思います。「renderLineFromPoint:ToPoint:」を使用しようとすると

  • [self renderLineFromPoint:vieta toPoint:buvusVieta];

エラーが表示されます

  • `glBindFramebuffer(GL_FRAMEBUFFER, viewFramebufferis);

エラーコード付き

スレッド 1: EXC_BAD_ACCSESS (コード = 1、アドレス = 0x1508)

以下の「renderLineFromPoint:toPoint:」コード全体

- (void) renderLineFromPoint:(CGPoint)pradzia toPoint:(CGPoint)pabaiga
{
static GLfloat*     vertexBuffer = NULL; 
static NSUInteger   vertexMax = 64;
NSUInteger          vertexCount = 0, count, i;

[context makeCurrentContext];
glBindFramebuffer(GL_FRAMEBUFFER, viewFramebufferis);

//Convert from point to pixel
CGFloat scale = self.contentsScale;
pradzia.x *= scale;
pradzia.y *= scale;
pabaiga.x *= scale;
pabaiga.y *= scale;

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

//Add points to buffer at X pixels
count = MAX(ceilf(sqrtf((pabaiga.x - pradzia.x) * (pabaiga.x - pradzia.x) + (pabaiga.y - pradzia.y) * (pabaiga.y - pradzia.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] = pradzia.x + (pabaiga.x - pradzia.x) * ((GLfloat)i / (GLfloat)count);
    vertexBuffer[2 * vertexCount + 1] = pradzia.y + (pabaiga.y - pradzia.y) * ((GLfloat)i / (GLfloat)count);
    vertexCount += 1;
}

//Render vertex array
glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
glDrawArrays(GL_POINTS, 0, vertexCount);

//Show buffer
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbufferis);
[context presentRenderbuffer:GL_RENDERBUFFER];
}

誰でも私を助けることができますか?

または、誰かが私に同様のサンプルコードを教えてくれるでしょうか?

リアルタイムでの描画などについて説明されているチュートリアルに誰かが私をリンクしたとしても、それは非常に役立ちます。マウスイベントの追跡とそのポイントの登録に問題はありません。OpenGL を作成して、2 点間に線を描画したり、登録された各点に円などを描画したりする必要があります。何か案は?

4

2 に答える 2

2

誤ってブレークポイントを有効にしたと思います。ブレークポイントを削除するか、無効にするだけです。

于 2012-06-21T08:02:07.403 に答える
1

私は自分の問題を解決しました。私はただ使用しなければなりませんでした

mouseDown mouseDragged mouseUp

マウスイベントを登録し、関数[selfdrawSomething]を呼び出す関数。魔女では、何を描画して使用するかを記述しました。魔女は「mouseDown」「mouseDragged」「mouseUp」によって私に与えられました。

于 2012-06-26T06:30:41.870 に答える