現在GLUTのプログラムをOpenTKように移植していて、私の勘違いから誤りを犯していたことが分かりました。
以下に該当記事とその内容と原因、修正内容を記します。ご迷惑をおかけし、申し訳ありませんでした。
1.該当記事
2.その内容と原因
正三角錐の中心(重心点)に原点をおいて座標を設定しましたが、正三角錐(3D)の高さを正三角形(2D)の高さと誤認したため、Y軸座標が正しくなかったことが判りました。勘違いは、一遍の長さが1.0の正三角錐の高さを単純に"1.0"と誤信したことが原因です。
(誤)0.577f → (正)0.544f
(誤)0.289f → (正)0.272f
3.修正内容
以下に修正内容を載せます。
正三角形(平面-本件では底面)の高さは「二分のルート3」(sqrt(3.0) / 2 ≒ 0.866)で、中心(重心点)のZ軸座標は 1 : 2(≒0.289 : ≒0.577)となりますが、更に高さは底面の重心点Z座標「二分のルート3の2/3(≒0.577)」と「正三角錐の一辺(1.000)」とY軸座標の高さ(仮にHとします)の直角三角形を形成していることから、「Hの二乗 =1の二乗引く0.577の二乗」の平方根(長さなので正の数です)となり、「三分の2の平方根(sqrt(2.0 / 3.0))」(≒0.8165)となり、更にこの高さ(Y軸座標)の重心点は1:2で分かれるので、高さは(≒0.8167):(≒0.272 : ≒0.544)になります。
従って、上記記事の(1)~(3)については、
//ポリゴン描画
glPushMatrix();
glRotated(theta, 0.0, 1.0, 0.0);
theta += 0.05;
glBegin(GL_TRIANGLES);
//奥の面
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(-0.500f, -0.272f, -0.289f); glVertex3f(0.500f, -0.272f, -0.289f); glVertex3f(0.000f, 0.544f, 0.000f);
//右手前面
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.500f, -0.272f, -0.289f); glVertex3f(0.000f, -0.272f, 0.577f); glVertex3f(0.000f, 0.544f, 0.000f);
//左手前面
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(0.000f, -0.272f, 0.577f); glVertex3f(-0.500f, -0.272f, -0.289f); glVertex3f(0.000f, 0.544f, 0.000f);
//底面
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.500f, -0.272f, -0.289f); glVertex3f(0.500f, -0.272f, -0.289f); glVertex3f(0.000f, -0.272f, 0.577f);
glEnd();
glPopMatrix();
となり、記事(4)については、
GLdouble g_Tvertex[4][3] = {//三角形の4頂点(上から下反時計回り4点)
{0.000f, 0.544f, 0.000f}, //A
{0.500f, -0.272f, -0.289f}, //B
{-0.500f, -0.272f, -0.289f},//C
{0.000f, -0.272f, 0.577f}, //D
};
となります。なお、該当記事は本日日付で修正を行っております。再度子迷惑をおかけし、申し訳ございませんでした。
いよいよ、寄る年波を感じます。しかし、「ボケ防止」で始めたこのブログ、【OpenGL】シリーズは最後までやり通したいと思います。