首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL/SharpGL面对不端行为

OpenGL/SharpGL面对不端行为
EN

Stack Overflow用户
提问于 2014-04-07 10:31:03
回答 1查看 777关注 0票数 0

我目前正在使用OpenGL库编写一个SharpGL应用程序,我只想简单地创建一个3x3x3集的立方体,这些立方体排列在一个对称网格中。目前,我在以下图片中看到了一些奇怪的行为:

这让我完全不知所措,因为我看不出为什么代码遗漏了最后三个街区。负责创建多维数据集的方法如下所示:

代码语言:javascript
复制
private void CreateCube2(OpenGL gl, int cubeSize)
{
    gl.PushMatrix();
    const float spacing = 2.5f;

    for (int z = 0; z < cubeSize; z++)
    {
        for (int y = 0; y < cubeSize; y++)
        {
            for (int x = 0; x < cubeSize; x++)
            {
                var cube = new Cube();
                ColourCube(cube, cubeSize, x, y, z);
                cube.Render(gl, RenderMode.Render);

                gl.Translate(spacing, 0, 0);
            }
            gl.Translate(-spacing * cubeSize, spacing, 0);
        }
        gl.Translate(0, -spacing * cubeSize, spacing);
    }

    gl.PopMatrix();
}

其中ColourCube的定义如下:

代码语言:javascript
复制
private bool m_blackCubeMiddle = true;
private void ColourCube(Cube cube, int size, int x, int y, int z)
{
    cube.Faces[0].Material = (!m_blackCubeMiddle || y == 0) ? WhiteMaterial : BlackMaterial;     // Bottom
    cube.Faces[1].Material = (!m_blackCubeMiddle || y == size - 1) ? YellowMaterial : BlackMaterial;    // Top
    cube.Faces[2].Material = (!m_blackCubeMiddle || x == size - 1) ? GreenMaterial : BlackMaterial;     // Right
    cube.Faces[3].Material = (!m_blackCubeMiddle || x == 0) ? BlueMaterial : BlackMaterial;      // Left
    cube.Faces[4].Material = (!m_blackCubeMiddle || z == 0) ? OrangeMaterial : BlackMaterial;    // Front
    cube.Faces[5].Material = (!m_blackCubeMiddle || z == size - 1) ? RedMaterial : BlackMaterial;       // Back
}

整个项目可以从这里下载。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-07 12:01:01

这种奇怪的行为是由SharpGL 'Polygon.Render‘方法中的一个bug引起的。它不是由您自己的代码造成的。当您调用立方体上的三角形时,它已经在屏幕上以正确的位置显示了27个立方体。但即使如此,SharpGL也不正确地呈现其中一个多维数据集。

查看了ShapGL的Cube & Polygon类的源代码后,我建议编写您自己的多维数据集类。您现在正在使用的Cube类的实现,从几个角度(GL_POLYGON (弃推荐)、即时模式顶点提交(取消推荐))来看是绝对困难的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22909845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档