私の機能に何か問題があったかどうかはわかりません(glOrthoのパラメータが間違っている可能性があります)ので、結果は間違っているか、そうであれば正常です。OpenGLでの可視化の問題
私はこのような状況を持っている。特に:
私はすべての窓のスペースと、それだけではなく一部を取るために、グリーン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のレンダリングの色を設定します。
私はそれを持っていると思う、ありがとう! P.S:変形機能が呼び出されるたびに、緑色の矩形(4つの頂点を意味します)のピクセル座標を取得する方法はありますか? もう一度ありがとうございます。 – marcusscarface
OpenGLが行うことができます:マトリクスに頂点を掛けて、投影されたスクリーンの座標を取得します。同様に: 'screenCoord = viewportMatrix * projectionMatrix * modelViewMatrix * vertex'。 – Steeve
ありがとうございます!私は私の問題を解決しました。 – marcusscarface