現在GLUTのプログラムをOpenTKように移植していて、私の勘違いから誤りを犯していたことが分かりました。

以下に該当記事とその内容と原因、修正内容を記します。ご迷惑をおかけし、申し訳ありませんでした。

 

1.該当記事

(1)【OpenGL】GLSamplerについて(2)

(2)【OpenGL】3DグラフィックとGLUT(5)

(3)【OpenGL】3DグラフィックとGLUT(6)

(4)【OpenGL】3DグラフィックとGLUT(7完)

 

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】シリーズは最後までやり通したいと思います。