Hide Rubik's Cube Внутренние проводки - PullRequest
0 голосов
/ 04 августа 2010

В контексте приложения Java / OpenGL я рисую большой черный проводной (без заливки) большой куб, состоящий из 27 меньших кубов.Для этого я написал следующий код:

for (int x = 1; x <= 3; x++) {
    for (int y = 1; y <= 3; y++) {
        for (int z = 1; z <= 3; z++) {
            wireCube(x - 2, 2 - y, 2 - z);
         }
    }
}

Метод wireCube реализован с использованием GL11.glBegin(GL11.GL_LINE_LOOP);

Использование правильного вызова gluPerspective для определения проекции и правильногопозвоните по номеру gluLookAt, чтобы установить «камеру». Я могу отображать мой большой куб по мере необходимости и .... Я очень доволен этим !!!

Моя новая проблема в том, как изменитьэтот код для того, чтобы «спрятать» все проводки внутри большого куба?Чтобы помочь визуализировать сцену, эти проводки, которые обычно рисуются, имеют пунктирные линии при изучении трехмерной геометрии в школе.

Заранее спасибо за помощь

Ману

Ответы [ 3 ]

1 голос
/ 04 августа 2010

Включите проверку глубины (glEnable(GL_DEPTH_TEST)) и поместите квадраты на поверхности кубов.

Чтобы нарисовать квад, используйте glBegin(GL_QUADS), затем четыре вершины и вызов glEnd().

0 голосов
/ 07 августа 2010

Используйте glPolygonOffset (), чтобы утопить или отобразить ваш каркас над (или под) полигоном с одинаковыми координатами.

0 голосов
/ 04 августа 2010

Нарисуйте все свои кубы черными полигонами (или отключите вывод цвета: glColorMask (false, false, false, false);): это заполнит буфер глубины.

Тогда нарисуй свои линии. Те, которые скрыты полигонами, не появятся. Будет z-бой, так что glDepthTest (GL_LEQUAL);

Если вы хотите нарисовать «невидимые» пунктирные линии, этого будет недостаточно. Вы можете нарисовать снова с glDepthTest (GL_GREATER);

Другим решением является рисование многоугольников, которые обращены к камере сплошной линией, а другие - пунктирной линией. Это простой точечный продукт (camDir.faceNorm).

...