1

OpenGLを学ぶのはこれが初めてで、本の例に従っています。私はXcodeを使用してOSX10.8でそれを行っています。コードは次のとおりです。

#include "Angel.h"

const int numPoints = 5000;
typedef vec2 point2;

void init(){

    point2 points[numPoints];
    point2 vertices[3] = {
        point2(-1.0, -1.0), point2(0.0, 1.0), point2(1.0, -1.0)
    };

    points[0] = point2(0.25, 0.5);

    for (int k = 1; k < numPoints; k++) {
        int j = rand()%3;
        points[k] = (points[k-1]+vertices[j])/2.0;
    }

    GLuint program = InitShader("vertex.glsl", "fragment.glsl");
    glUseProgram(program);

    GLuint abuffer;
    glGenVertexArraysAPPLE(1, &abuffer);
    glBindVertexArrayAPPLE(abuffer);

    GLuint buffer;
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);

    GLuint location = glGetAttribLocation(program, "vPosition");
    glEnableVertexAttribArray(location);
    glVertexAttribPointer(location, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));

    glClearColor(1.0, 1.0, 1.0, 1.0);

}


void display(){
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawArrays(GL_POINTS, 0, numPoints);
    glFlush();
}

int main(int argc, char** argv){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutInitWindowSize(640, 480);

    glutCreateWindow("Sierpinski Gasket");

    init();
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

コンパイルします。しかし、実行しようとするとウィンドウが表示されません。関数を呼び出すと問題が発生しinit()ます。それがないと、ウィンドウは表示されますが、背景は黒になります。それで、窓はありません。コードはここにあります。

アップデート

どうやら、GLuint program = InitShader("vertex.glsl", "fragment.glsl");シェーダーファイルが見つからないため、プログラムはその行で終了しているようです。プログラムにファイルを使用するように指示するにはどうすればよいですか?つまり、.glslファイルはと同じフォルダーに.hあります.cppが、Xcodeがプロジェクトをビルドするとき、実行可能ファイルはファイルと同じ場所にありません.glsl。Xcode内でこれを解決する方法は?

4

3 に答える 3

2

GLSLファイルは、プログラムの実行時にロードされます。したがって、ファイルを検出しないのはXCodeではなく、プログラムです。最も可能性の高い原因は、ファイルの相対パスを使用したが(提供したコードスニペットのように)、ハードコードされたファイルの場所と一致しない作業パスでプログラムを開始したことです。通常、プログラムバイナリは専用のビルドディレクトリに組み込まれます。

簡単な修正は、GLSLファイルをバイナリと同じディレクトリにコピーすることです。適切な解決策は、ファイルをよく知られた場所に配置することです。MacOS Xでは、これにアプリケーションバンドルを使用できます。MacOS X開発者向けドキュメントで、アプリケーションリソースをアプリケーションバンドルに配置する方法とそれらにアクセスする方法を参照してください。XCodeは、生成されたバンドルにファイルを自動的にコピーするツールも提供します。

于 2013-01-25T12:09:23.360 に答える
1

Xcodeがファイルをインポートしていない場合は、ファイルチューザーのプロジェクト名、ビルドフェーズ、バンドルリソースのコピーに移動し、2つのファイルがそこにあることを確認して、ファイルがリソースフォルダーに追加されているかどうかを確認します。

于 2013-01-25T12:10:24.980 に答える
1

以下の手順に従ってください:

左側のパネルでプロジェクトを選択します。

ターゲットを選択してから、Build Phases

そこで、というボタンをフィンする必要がありますAdd Build Phase

ファイルを選択する必要があるボックスが表示されます(小さな+記号があります)。そして、あなたが選択したことを確認してくださいDestination: Products directory

プロジェクトをビルドして実行すると、動作するはずです。

于 2013-01-25T17:11:02.617 に答える