が私のコードです:スケーリングされた四角形の中心座標が(1、1)座標になっていないのはなぜですか?ここで
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void drawTriangle()
{
glBegin(GL_QUADS);
glColor3f(1, 0, 0);
glVertex2d(0.5, 0.5);
glColor3f(0, 1, 0);
glVertex2d(-0.5, 0.5);
glColor3f(0, 0, 1);
glVertex2d(-0.5, -0.5);
glColor3f(1, 1, 0);
glVertex2d(0.5, -0.5);
glEnd();
}
void displayFunction()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawTriangle();
glScaled(0.5, 0.5, 1.0);
// glRotated(30.0, 0.0, 0.0, 1.0);
glTranslated(1.0, 1.0, 0.0);
drawTriangle();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
glutInitWindowSize(400, 400);
glutInitWindowPosition(100, 100);
glutCreateWindow("Clipping with a plane");
glutDisplayFunc(displayFunction);
glClearColor(0, 0, 0, 0);
glutMainLoop();
return 0;
}
私は、ウィンドウの右上隅にあるように、小さな四角い・センターを参照してくださいすることが予想(1、1)座標。それはなぜそこにないのですか?
これは本当です。しかし、スケールと翻訳がどのように機能するかを説明しましょう。 'X'軸についてのみ議論しましょう。スケールするとき、頂点の 'x'座標に' Sx' - この場合は '0.5'を掛けます。そして変換するときに、 'x'座標の' Tx'を追加します - ここでは '1.0'です。それで問題は何ですか?私のコードは '0.0 * 0.5 + 1.0 = 1.0'のように動作するはずです。 – Narek
'glMatrixMode(GL_MODELVIEW);'が行列スタックを設定するので、私の混乱が起こると思います。 **スタック**のように、私の操作は逆の順序で適用されます。最初の縮尺を書いてから翻訳したら、最初にスタックの変換と縮尺を取るので、予期せぬ結果が出ます。これは本当ですか? – Narek
私は自分の答えを編集します。 – Matso