2016-11-09 9 views
0

私の機能に何か問題があったかどうかはわかりません(glOrthoのパラメータが間違っている可能性があります)ので、結果は間違っているか、そうであれば正常です。OpenGLでの可視化の問題

私はこのような状況を持っている。特に

link to image

私はすべての窓のスペースと、それだけではなく一部を取るために、グリーンRECTとそのすべての内側のコンテンツを持っていると思います(メインコンテンツの周りに空のスペースがいくつかあることに気がつくと、「緑色の矩形」)。

#define HEXAGONAL_SHRINK 0.8655f 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); 
    glutInitWindowSize(640, 480); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow(argv[0]); 
    glClearColor (0.0, 0.0, 0.0, 0.0); 
    glShadeModel (GL_FLAT); 
    glutDisplayFunc(display); 
    glutReshapeFunc(reshape); 
    glutMouseFunc(mouse); 
    glutMainLoop(); 
    return 0; 
} 

void reshape(int w, int h) 
{ 
    GLfloat aspect, dim; 

    glViewport (0, 0, (GLsizei) w, (GLsizei) h); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    if (s3hex->rows > s3hex->columns) 
      dim = s3hex->rows * 0.5f; 
     else 
      dim = s3hex->columns * 0.5f; 
    aspect = (GLfloat)w/(GLfloat)h; 
    if (w <= h) 
     glOrtho (-dim, dim, -dim/aspect, dim/aspect, 1.0, -1.0); 
    else 
     glOrtho (-dim*aspect, dim*aspect, -dim, dim, 1.0, -1.0); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

void display(void) 
{ 
    CALint i, j; 
    CALreal z, h, color; 

    glClear(GL_COLOR_BUFFER_BIT); 
    glPushMatrix(); 

    glTranslatef(-(s3hex->columns*HEXAGONAL_SHRINK)/2.0f, s3hex->rows/2.0f, 0); 
    glScalef(HEXAGONAL_SHRINK, -1, 1); 

    for (i=0; i<s3hex->rows; i++) 
     for (j=0; j<s3hex->columns; j++) 
     { 
      z = calGet2Dr(s3hex,Q.z,i,j); 
      h = calGet2Dr(s3hex,Q.h,i,j); 

      if (h > 0) 
      { 
       color = (h - h_min)/(h_Max - h_min); 
       glColor3d(1,color,0); 
       glRecti(j, i, j+1, i+1); 
      } 
      else 
       if (z > 0) 
       { 
        color = (z - z_min)/(z_Max - z_min); 
        glColor3d(color,color,color); 
        glRecti(j, i, j+1, i+1); 
       } 
     } 

    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
    glColor3d(0,1,0); 
    glRectd(0,0,s3hex->columns, s3hex->rows); 
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 

    glPopMatrix(); 

    glutSwapBuffers(); 
} 

P.S:

はここに私の主な機能がありますがs3hex何を知っている必要がある場合は、すべての細胞がサブステートのセットが含まれている通常の行列としてそれを見ることができます。次に、これらのサブステートの値に従って、ディスプレイfuncのレンダリングの色を設定します。

答えて

0

すべてが私には普通のようです。 s3hex->columnss3hex->rowsはあなたのビューポートのサイズと一致しません。

あなたができることは、図面をビューポートに塗りつぶすために、モデルビューを拡大することです。線に沿って

何か:

glScalef(viewportWidth/s3hex->columns, viewportHeight/s3hex->rows, 1); 

s3hex->columnsまたはs3hex->rowsがゼロの場合は、これを行わないでください。

+0

私はそれを持っていると思う、ありがとう! P.S:変形機能が呼び出されるたびに、緑色の矩形(4つの頂点を意味します)のピクセル座標を取得する方法はありますか? もう一度ありがとうございます。 – marcusscarface

+0

OpenGLが行うことができます:マトリクスに頂点を掛けて、投影されたスクリーンの座標を取得します。同様に: 'screenCoord = viewportMatrix * projectionMatrix * modelViewMatrix * vertex'。 – Steeve

+0

ありがとうございます!私は私の問題を解決しました。 – marcusscarface