GLM in Xcode

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • rvalue -> rechts vom =, also [[self openGLContext] CGLContextObj]
    void * -> ähnlich zu id, kann zu jedem Typ zeigen

    Warum keine Zuweisung -> keine Ahnung
    Also die Rückgabe von [[self openGLContext] CGLContextObj] ist angeblich void * und er kann das nicht CGLContextObject * zuweisen.
  • Ah, Mist. GLfloat ist natürlich richtig. Irgendwie habe ich da CGfloat gelesen, das wäre falsch.

    Das geht nicht, weil deine komischen Methoden nix brauchbares zurückgeben.

    rvalue dürfte 'returnValue' heißen und 'void*' ist ein Zeiger auf Garnüschte.
    (oder halt 'id' in Objective-C).

    Das mag Objective-C++ offenbar nicht.
    Warum nicht? Wat weiß ich.Getter nicht Objective-C++ konform oder wat weiß ich.
    Such dir ne Dokumentation dazu.
    Oder mach es in C++.
    Oder mach es in Objective-C und verzichte auf diese ominöse Library.
    Oder mach es in C.
    Oder versuch mal Unity.

    Aber hör auf, Objective-C und C++ ohne irgend eine erkennbare Eigeninitiative zusammenwürfeln zu wollen.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Vyax schrieb:

    Also die Rückgabe von [[self openGLContext] CGLContextObj] ist angeblich void * und er kann das nicht CGLContextObject * zuweisen.

    Weil Du von etwas allgemeinerem zu etwas speziellerem willst. Das ist etwas, was nicht unbedingt klappen muss. Darum musst Du explizit darauf hinweisen, dass Du das willst.

    Etwa

    Quellcode

    1. int i = 5;
    2. void* ip = &i; ///< von speziell zu allgemein, kein problem
    3. short* j = ip; ///< sieht nicht gut aus, darum erstmal verbieten. Weiss ja keiner, wass die "ip" mal war
    4. short* k = reinterpret_cast<short*>(ip); ///< das geht, Du sagst dem Compiler, dass Du Dir sicher bist, und mit den Konsequenzen leben willst.
    C++
  • Ich bin einem Tutorial zu Shadern gefolgt und folgendes ist dabei rausgekommen.

    InitGL:

    Quellcode

    1. MatrixID = glGetUniformLocation([manager programForShader:@"MyShader"], "MVP"); // Gluint MatrixID als Instanzvariable

    Render Loop:

    Quellcode

    1. GLfloat Matrix[] =
    2. {
    3. 1.0, 0.0, 0.0, 0.0,
    4. 0.0, 1.0, 0.0, 0.0,
    5. 0.0, 0.0, 1.0, 0.0,
    6. 0.0, 0.0, 0.0, 1.0
    7. };
    8. glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &Matrix[0][0]);


    Und da bekomme ich (bei Matrix[0][0]) gesagt:
    Subscripted value is not an array pointer or vector

    Aber Matrix ist doch ein Array (einn zweidimensionales).
  • Danke für den Hinweis.

    Quellcode

    1. GLfloat Matrix[4][4] =
    2. {
    3. {1.0, 0.0, 0.0, 0.0},
    4. {0.0, 1.0, 0.0, 0.0},
    5. {0.0, 0.0, 1.0, 0.0},
    6. {0.0, 0.0, 0.0, 1.0}
    7. };


    Mein Shader sieht so aus:

    Quellcode

    1. void main()
    2. {
    3. mat4 MVP;
    4. gl_Position = gl_Vertex * MVP;
    5. }


    Warum bekomme ich nur einen schwarzen Bildschirm?
  • Willst Du wirklich jeden Schritt diskutieren?

    MVP ist in Deinem Shader gar nicht definiert (bzw. auf default, ich weiss grad nicht, ob GLSL automatisch initialisiert und wenn ja, mit was - im besten Fall die Identity)

    Arbeite doch bitte stückweise ein Buch durch, anstelle einfach irgendwas zu probieren und dann hier nachzufragen...
    C++
  • Ja, ich werde das Buch lesen, aber eine Frage hab ich noch.

    Warum wird layout bei meinem Shader nicht akzeptiert?

    Quellcode

    1. layout(location = 0) in vec3 vertexPosition_modelspace;
    2. uniform mat4 MVP;
    3. void main()
    4. {
    5. mat4 MVP;
    6. gl_Position = MVP * vec4(vertexPosition_modelspace, 1);
    7. }