繁体   English   中英

OpenGL:如何在OpenTK中绘制一个立方体?

[英]OpenGL: How to draw a cube in OpenTK?

glutWireCube()是用于在C ++中绘制多维数据集的函数,在OpenTK中如何? 有什么功能被用来代替吗?

glutWireCube不是OpenGL函数。 它是GLUT的一部分,该库经常被误认为是OpenGL的一部分。

该函数使用旧的固定函数管道绘制一个立体立方体,并根据需要对其进行修改。 为了简洁起见,我已经在函数内部编写了变量声明,但是如果您想获得更高的性能,则应该将其移出函数。 我还建议重写该函数以改为使用GL.DrawElements()。

    private void DrawBox(float size)
    {
        float[,] n = new float[,]{
            {-1.0f, 0.0f, 0.0f},
            {0.0f, 1.0f, 0.0f},
            {1.0f, 0.0f, 0.0f},
            {0.0f, -1.0f, 0.0f},
            {0.0f, 0.0f, 1.0f},
            {0.0f, 0.0f, -1.0f}
        };
        int[,] faces = new int[,]{
            {0, 1, 2, 3},
            {3, 2, 6, 7},
            {7, 6, 5, 4},
            {4, 5, 1, 0},
            {5, 6, 2, 1},
            {7, 4, 0, 3}
        };
        float[,] v = new float[8,3];
        int i;

        v[0,0] = v[1,0] = v[2,0] = v[3,0] = -size / 2;
        v[4,0] = v[5,0] = v[6,0] = v[7,0] = size / 2;
        v[0,1] = v[1,1] = v[4,1] = v[5,1] = -size / 2;
        v[2,1] = v[3,1] = v[6,1] = v[7,1] = size / 2;
        v[0,2] = v[3,2] = v[4,2] = v[7,2] = -size / 2;
        v[1,2] = v[2,2] = v[5,2] = v[6,2] = size / 2;

        GL.Begin(BeginMode.Quads);
        for (i = 5; i >= 0; i--) {
            GL.Normal3(ref n[i, 0]);
            GL.Vertex3(ref v[faces[i, 0], 0]);
            GL.Vertex3(ref v[faces[i, 1], 0]);
            GL.Vertex3(ref v[faces[i, 2], 0]);
            GL.Vertex3(ref v[faces[i, 3], 0]);
        }
        GL.End();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM