2017-04-09 3 views
1

私はカスタム投影行列を使った処理で投影マッピングに関連するプロジェクトを実装しようとしています。私は手がかりを与えるかもしれない例を見つけましたが、それはあまりにも古く、OpenGLであり、一方でProcessingはかなり変化しています。私はシェイダーとOpenGLについてあまりよく知られていませんが、これまでのコードを以下に示すバージョンに更新することができました。オリジナルと比較することもできます。処理中にGLExceptionをデバッグする方法は?

私はまだ取得しています:

GLException:ないGL2実装

を私は少し同時にPGL、GL、PG2を使用して混乱もしています。私はこれが良い習慣ではないと感じています。

Processing 1.0フォーラムのコードのオリジナルバージョンはhereです。

これは私がこれまでに更新しようとしたコードです:

import com.jogamp.opengl.*; 
import java.nio.FloatBuffer; 

float[] modelview = { 
    0.670984f, 0.250691f, 0.674993f, 0, -0.288247f, 
    0.966749f, -0.137371f, 0f, -0.68315f, -0.0505059f, 0.720934f, 0f, 
    0.164808f, 2.1425f, 32.9616f, 1f }; 
float[] proj = { 
    0.78125f, 0, 0, 0, 0, 1.04167f, 0, 0, 0, 0, -1.0002f, -1, 0, 
    0, -2.0002f, 0 }; 

FloatBuffer mvbuf; 
FloatBuffer projbuf; 

void setup() { 
    size(1024, 768, P3D); 
    PJOGL.profile = 2; //not sure if needed 
    mvbuf = FloatBuffer.wrap(modelview); 
    projbuf= FloatBuffer.wrap(proj); 

    GLProfile glp = GLProfile.get(GLProfile.GL2); 
    GLCapabilitiesImmutable glcaps = (GLCapabilitiesImmutable) new GLCapabilities(glp); 
    GLCapabilities tGLCapabilities = new GLCapabilities(glp); 
    println("System Capabilities:" + glcaps.toString()); 
    println("Profile Details: " + glp.toString()); 
    println("Is GL2 Supported?: " + glp.isGL2()); 
} 

void draw() { 
    background(0); 

    PGL pgl = (PJOGL) beginPGL(); 
    GL gl = ((PJOGL) pgl).gl; 
    GL2 gl2 = gl.getGL2(); //GLException: not a GL2 implemantation 

    gl2.glMatrixMode(GL2.GL_PROJECTION); 
    gl2.glLoadIdentity(); 
    gl2.glLoadMatrixf(projbuf); 

    gl2.glMatrixMode(GL2.GL_MODELVIEW); 
    gl2.glLoadIdentity(); 
    gl2.glLoadMatrixf(mvbuf); 

    drawGrid(100, 10, gl2); 

    endPGL(); //not sure if this is closing what it supposed to 
} 


void drawGrid(float len, float offset, GL2 g) { 

    int nr_lines = (int)(len/offset); 

    g.glColor3f(1, 1, 1); 
    g.glBegin(g.GL_LINES); 
    for (int i=-nr_lines; i<nr_lines; i++) { 

    g.glVertex3f(i*offset, 0, -nr_lines*offset); 
    g.glVertex3f(i*offset, 0, nr_lines*offset); 
    } 

    for (int i=-nr_lines; i<nr_lines; i++) { 

    g.glVertex3f(-nr_lines*offset, 0, i*offset); 
    g.glVertex3f(nr_lines*offset, 0, i*offset); 
    } 
    g.glEnd(); 
} 

答えて

1

まずこれを試してみてください。

PGraphicsOpenGL pg = (PGraphicsOpenGL)g; 
println(pg.OPENGL_VERSION); 

それ出力は何?私にとってこれは出力になります。

4.5.0 NVIDIA 376.51 

これによりOpenGLの4.5コアコンテキストは、OpenGL 2.xのコンテキストとの下位互換性がないためgl.getGL2()が失敗した呼び出し。

私が正しくリコール場合、あなたはPJOGL.profileを使用して1に設定し、後方互換性のコンテキストを取得するためにしなければならないのは:

PJOGL.profile = 1; 

(注)処理3.0を使用している場合、あなたがする必要があるかもしれないことsettings()を利用:

void settings() { 
    size(1024, 768, P3D); 
    PJOGL.profile = 1; 
} 
+0

OPENGL_VERSIONのための私の出力が推奨されているように、私は)(1 PJOGL.profileを設定し、設定に置かれている '4.1 INTEL-10.14.66' ですそれはちょうど働いた!私は質問を投稿する前にここに時間を費やしています。どうもありがとうございます! – Bontempos

関連する問題