gpt4 book ai didi

java - 面剔除 - 隐藏立方体中所有非正面的面

转载 作者:行者123 更新时间:2023-12-02 00:57:04 25 4
gpt4 key购买 nike

我想丢弃立方体中所有非正面的面,并且命令 glEnable(GL_CULL_FACE); 对我不起作用。这是我的立方体坐标

 private float cubeCoords[] = {
-0.25f, 0.25f, 0.25f, // front top left 0
-0.25f, -0.25f, 0.25f, // front bottom left 1
0.25f, -0.25f, 0.25f, // front bottom right 2
0.25f, 0.25f, 0.25f, // front top right 3
-0.25f, 0.25f, -0.25f, // back top left 4
0.25f, 0.25f, -0.25f, // back top right 5
-0.25f, -0.25f, -0.25f, // back bottom left 6
0.25f, -0.25f, -0.25f};

绘制顺序是:

    private short drawOrder[] = {
0, 1, 2, 0, 2, 3,//front
0, 4, 5, 0, 5, 3, //Top
0, 1, 6, 0, 6, 4, //left
3, 2, 7, 3, 7 ,5, //right
1, 2, 7, 1, 7, 6, //bottom
4, 6, 7, 4, 7, 5};

当立方体旋转时,我可以看到背景中立方体上的一张脸。

谢谢

最佳答案

当您使用Face Culling时那么你就必须遵守上链顺序。如果启用面剔除,则默认情况下,如果面的缠绕顺序是逆时针,则背面会被剔除。请参阅glFrontFace分别glCullFace .

从左上方开始,按逆时针顺序,从前到后对顶点进行排序:

private float cubeCoords[] = {
-0.25f, 0.25f, 0.25f, // front top left 0
-0.25f, -0.25f, 0.25f, // front bottom left 1
0.25f, -0.25f, 0.25f, // front bottom right 2
0.25f, 0.25f, 0.25f, // front top right 3
-0.25f, 0.25f, -0.25f, // back top left 4
-0.25f, -0.25f, -0.25f, // back bottom left 5
0.25f, -0.25f, -0.25f, // back top right 6
0.25f, 0.25f, -0.25f // back bottom right 7
};

正确的逆时针三角形面是:

private short drawOrder[] = {
0, 1, 2, 0, 2, 3, // front
4, 0, 3, 4, 3, 7, // top
5, 1, 0, 5, 0, 4, // left
7, 3, 2, 7, 2 ,6, // right
1, 5, 6, 1, 6, 2, // bottom
7, 6, 5, 7, 5, 4 // back
};

请注意,您必须以这种方式定义面,当您从立方体(网格)的“外部”观察时,缠绕顺序是逆时针的。

关于java - 面剔除 - 隐藏立方体中所有非正面的面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com