2011-06-28 8 views
0

に移植するとき、これは私のOpenGL-ES 2.0のコードです:これは私のOpenGL-ES 2.0のコードである問題のOpenGL 1.1からのOpenGL-ES 2.0

{ 
    for (surfnum=0;surfnum<surftotal;surfnum++){ 
     for (i=0;i<triNum[surfnum];i++){ 
      GLfloat *Vertices[] = { triArray[surfnum][i].normpt1, triArray[surfnum][i].normpt2,triArray[surfnum][i].normpt3}; 
      glGenBuffers(1, &ui32Vbo); 
      glBindBuffer(GL_ARRAY_BUFFER, ui32Vbo); 
      unsigned int uiSize = 3 * (sizeof(GLfloat) * 1); 
      glBufferData(GL_ARRAY_BUFFER, uiSize,*Vertices, GL_STATIC_DRAW); 
     } 
    } 
} 
for(int i = 0; i < 80000; ++i) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    int i32Location = glGetUniformLocation(uiProgramObject, "projmatrix"); 
    glUniformMatrix4fv(i32Location, 1, GL_FALSE, pfIdentity); 
    glEnableVertexAttribArray(VERTEX_ARRAY); 
    glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0); 
    glDrawArrays(GL_TRIANGLES, 0,i); 
    eglSwapBuffers(eglDisplay, eglSurface); 
} 

。私はisoサーフェス形式のデータを表示できるopengl 1.1で作業していました。私は、OpenGLになっていたと私は同じ結果を得ていないのです

void drawTriangle() 
{ 
    int surfnum, i; 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(0,0.6,0.1); 


    for (surfnum=0;surfnum<surftotal;surfnum++) 
    { 
     for (i=0;i<triNum[surfnum];i++) 
       { 
      glBegin(GL_POLYGON); 
      glNormal3fv(triArray[surfnum][i].normpt1); 
      glVertex3fv(triArray[surfnum][i].pt1); 
      glNormal3fv(triArray[surfnum][i].normpt2); 
      glVertex3fv(triArray[surfnum][i].pt2); 
      glNormal3fv(triArray[surfnum][i].normpt3); 
      glVertex3fv(triArray[surfnum][i].pt3); 
      glEnd(); 
      glFlush(); 
      glutSwapBuffers(); 
     } 
    } 
} 

、openglの-ES 2.0でも

警告は次のように来て:

これは私のOpenGL 1.1のコードですlibegl :ソフトウェアフォールバックを使用する。
出力は非常にゆっくりと
を発生しますが、他の情報が必要な場合、ここでの出力は、私に尋ねるウィンドウ

の外に出ます。

+0

これは、正射投影行列を正しく表しています。何が起こっているのですか、何が起こると思いますか? – Mikola

答えて

1

あなたのコードは意味をなさない。

{ 
    for (surfnum=0;surfnum<surftotal;surfnum++){ 
     for (i=0;i<triNum[surfnum];i++){ 
      GLfloat *Vertices[] = { triArray[surfnum][i].normpt1, triArray[surfnum][i].normpt2,triArray[surfnum][i].normpt3}; 
      glGenBuffers(1, &ui32Vbo); 
      glBindBuffer(GL_ARRAY_BUFFER, ui32Vbo); 
      unsigned int uiSize = 3 * (sizeof(GLfloat) * 1); 
     glBufferData(GL_ARRAY_BUFFER, uiSize,*Vertices, GL_STATIC_DRAW); 
     } 
    } 
} 

実際には、各三角形に対してバッファオブジェクトを作成していますか?さて、あなたはそれをやっていません。バッファーオブジェクトは3つの浮動小数点数ごとにしかありません。それは完全ではない三角形です。私はこれが頂点位置であると仮定することができます。あなたはこのループの途中でglGenBuffersを呼び出し続けているので、別のバッファオブジェクトが忠実に生成されます。あまりにも多くのバッファオブジェクトを作成すると、ソフトウェアのフォールバックが発生する可能性があります。

また、normpt1には位置が含まれていません。

そして、これがあります:

for(int i = 0; i < 80000; ++i) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    int i32Location = glGetUniformLocation(uiProgramObject, "projmatrix"); 
    glUniformMatrix4fv(i32Location, 1, GL_FALSE, pfIdentity); 
    glEnableVertexAttribArray(VERTEX_ARRAY); 
    glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0); 
    glDrawArrays(GL_TRIANGLES, 0,i); 
    eglSwapBuffers(eglDisplay, eglSurface); 
} 

まず、あなたはバッファオブジェクトをglBindBufferませんでした。はい、私はまだそれが以前からバインドされていることを知っていますが、これらのことを明示することは常に良いです。

最も重要なことは、これは何ですか:glDrawArrays(GL_TRIANGLES, 0,i);iアレイインデックスですか? 3番目のパラメータは描画する頂点の数である必要があります。この値が3で割り切れる場合を除き、GL_TRIANGLESは失敗します。

最後に作成したバッファオブジェクトには1つの頂点のための十分な余裕があるため、問題はありません。だからは不可能からレンダリングする。

+0

私は間違いを理解してくれてありがとうございます。 –

関連する問題