Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Визуальная часть CometRenderer — премиальный >= 1.21.8 fabric рендеринг

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Мар 2024
Сообщения
63
Реакции
2
Выберите загрузчик игры
  1. Fabric
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за CometRenderer?


Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она для майнкрафта 1.21.8 fabric, однако данную библиотеку можно попробовать использовать на более поздних или ранних версиях (по крайней мере CometRenderer спокойно использовался на 1.21.10, за исключением того, что пример пост эффектов на руки был сломан)

Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера

  • Оптимизация работы с униформами:
    В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено.
  • Оптимизация отрисовки:
    Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта.
  • Более удобная загрузка данных:
    В майнкрафте загрузка кода шейдеров происходит через Identifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
    В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders:
    IN_JAR, INPUT_STREAM, URI.
  • Создание кастомных форматов вершин (VertexFormat):
    Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более высоком уровне.

    В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).

    Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
    ROUNDED_RECT VertexFormat:
    Expand Collapse Copy
    public static final VertexFormat ROUNDED_RECT = VertexFormat.builder()
                                .element("Color", VertexElementType.FLOAT, 4) //Цвет вершины ректа
                                .element("Rect Position", VertexElementType.FLOAT, 2) //Позиция ректа
                                .element("Size", VertexElementType.FLOAT, 2) //Размер ректа
                                .element("Radius", VertexElementType.FLOAT, 1) //Радиус закругления вершины ректа
                                .build();
    И пример кода вершинного шейдера для данного формата:
    example.vsh:
    Expand Collapse Copy
    #version 330 core
     
     in vec4 position;
     in vec4 _vertexColor;
     in vec2 _rectPosition;
     in vec2 _size;
     in float _radius;
     
     #include<matrixUniforms> //В CometRenderer также есть система шейдерных библиотек, которые могут внедряться в шейдерны на этапе компиляции. Пример их использования можно будет посмотреть в примере использования библиотеки, о котором будет оговорено позже.
     
     out vec4 vertexColor;
     out vec2 rectPosition;
     out vec2 size;
     out float radius;
     
     void main() {
                        gl_Position = projMat * modelViewMat * position;
                        vertexColor = _vertexColor;
                        rectPosition = _rectPosition;
                        size = _size;
                        radius = _radius;
     }

    По умолчанию есть следующие форматы вершин, распологающиеся в классе CometVertexFormats:
    POSITION, POSITION_COLOR, POSITION_TEXTURE, POSITION_COLOR_TEXTURE, POSITION_TEXTURE_COLOR.
  • Создание кастомных режимов отрисовки вершин (DrawMode):
    По умолчанию в библиотеке есть примитивные дравмоды: LINES, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS.
    Хотя для некоторых данных дравмодов будет достаточно, однако можно спокойно создавать свои дравмоды.
    Например, создадим дравмод для 3д куба, который принимает 8 вершин, которые будут в последующем разложены на треугольники и обработаны при отрисовке:
    Cube DrawMode:
    Expand Collapse Copy
    public static final DrawMode CUBE = new DrawMode(
                                GL11.GL_TRIANGLES, //Режим отрисовки в OpenGL
                                true, //Будет ли дравмод использовать буффер индексов или нет. В нашем случае это true.
                                //8 — количество вершин для одного куба до триангуляции. 36 — количество вершин для одного куба после триангуляции.
                                new IndexBufferGenerator(8, 36, (indexConsumer, firstVertexIndex) -> {
                                    //1-я сторона куба
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex);
     
                                    //2
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 4);
     
                                    //3-я сторона куба
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex);
     
                                    //4-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 2);
     
                                    //5-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 3);
     
                                    //6-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                }),
                                //Функция, возвращающая данное количество вершин в меше после триангуляции.
                                vertices -> vertices / 8 * 36
                        );
    drawBox method:
    Expand Collapse Copy
    public static void drawBox(MeshBuilder meshBuilder, Matrix4f matrix4f) {
                            meshBuilder.vertex(matrix4f, 1, 0, 0);
                            meshBuilder.vertex(matrix4f, 1, 0, 1);
                            meshBuilder.vertex(matrix4f, 0, 0, 1);
                            meshBuilder.vertex(matrix4f, 0, 0, 0);
     
                            meshBuilder.vertex(matrix4f, 0, 1, 0);
                            meshBuilder.vertex(matrix4f, 0, 1, 1);
                            meshBuilder.vertex(matrix4f, 1, 1, 1);
                            meshBuilder.vertex(matrix4f, 1, 1, 0);
                        }

Как добавить в проект?


CometRenderer в данный момент находится в репозитории на гитхабе (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).
Вот пример добавления CometRenderer'a в ваш проект:
Gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:comet-renderer:latest" //latest заменить на последнюю доступную версию CometRenderer'a (на момент публикации это 1.8.4-public)
    implementation "com.ferra13671:gl-texture-utils:latest" //latest заменить на последнюю доступную версию gl-texture-utils (на момент публикации это 1.6.3)
}

Пример использования библиотеки можно найти в репо по пути src/testmod/java/com/ferra13671/cometrenderer/test


Насчет будущего проекта


CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:
 
Последнее редактирование:
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за CometRenderer?


Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она для майнкрафта 1.21.8 fabric, однако данную библиотеку можно попробовать использовать на более поздних или ранних версиях (по крайней мере CometRenderer спокойно использовался на 1.21.10, за исключением того, что пример пост эффектов на руки был сломан)

Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера

  • Оптимизация работы с униформами:
    В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено.
  • Оптимизация отрисовки:
    Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта.
  • Более удобная загрузка данных:
    В майнкрафте загрузка кода шейдеров происходит через Indentifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
    В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders:
    IN_JAR, INPUT_STREAM, URI.
  • Создание кастомных форматов вершин (VertexFormat):
    Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более лучшем уровне.

    В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).

    Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
    ROUNDED_RECT VertexFormat:
    Expand Collapse Copy
    public static final VertexFormat ROUNDED_RECT = VertexFormat.builder()
                                .element("Color", VertexElementType.FLOAT, 4) //Цвет вершины ректа
                                .element("Rect Position", VertexElementType.FLOAT, 2) //Позиция ректа
                                .element("Size", VertexElementType.FLOAT, 2) //Размер ректа
                                .element("Radius", VertexElementType.FLOAT, 1) //Радиус закругления вершины ректа
                                .build();
    И пример кода вершинного шейдера для данного формата:
    example.vsh:
    Expand Collapse Copy
    #version 330 core
     
     in vec4 position;
     in vec4 _vertexColor;
     in vec2 _rectPosition;
     in vec2 _size;
     in float _radius;
     
     #include<matrixUniforms> //В CometRenderer также есть система шейдерных библиотек, которые могут внедряться в шейдерны на этапе компиляции. Пример их использования можно будет посмотреть в примере использования библиотеки, о котором будет оговорено позже.
     
     out vec4 vertexColor;
     out vec2 rectPosition;
     out vec2 size;
     out float radius;
     
     void main() {
                        gl_Position = projMat * modelViewMat * position;
                        vertexColor = _vertexColor;
                        rectPosition = _rectPosition;
                        size = _size;
                        radius = _radius;
     }

    По умолчанию есть следующие форматы вершин, распологающиеся в классе CometVertexFormats:
    POSITION, POSITION_COLOR, POSITION_TEXTURE, POSITION_COLOR_TEXTURE, POSITION_TEXTURE_COLOR.
  • Создание кастомных режимов отрисовки вершин (DrawMode):
    По умолчанию в библиотеке есть примитивные дравмоды: LINES, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS.
    Хотя для некоторых данных дравмодов будет достаточно, однако можно спокойно создавать свои дравмоды.
    Например, создадим дравмод для 3д куба, который принимает 8 вершин, которые будут в последующем разложены на треугольники и обработаны при отрисовке:
    Cube DrawMode:
    Expand Collapse Copy
    public static final DrawMode CUBE = new DrawMode(
                                GL11.GL_TRIANGLES, //Режим отрисовки в OpenGL
                                true, //Будет ли дравмод использовать буффер индексов или нет. В нашем случае это true.
                                //8 — количество вершин для одного куба до триангуляции. 36 — количество вершин для одного куба после триангуляции.
                                new IndexBufferGenerator(8, 36, (indexConsumer, firstVertexIndex) -> {
                                    //1-я сторона куба
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex);
     
                                    //2
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 4);
     
                                    //3-я сторона куба
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex);
     
                                    //4-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 2);
     
                                    //5-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 3);
     
                                    //6-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                }),
                                //Функция, возвращающая данное количество вершин в меше после триангуляции.
                                vertices -> vertices / 8 * 36
                        );
    drawBox method:
    Expand Collapse Copy
    public static void drawBox(MeshBuilder meshBuilder, Matrix4f matrix4f) {
                            meshBuilder.vertex(matrix4f, 1, 0, 0);
                            meshBuilder.vertex(matrix4f, 1, 0, 1);
                            meshBuilder.vertex(matrix4f, 0, 0, 1);
                            meshBuilder.vertex(matrix4f, 0, 0, 0);
     
                            meshBuilder.vertex(matrix4f, 0, 1, 0);
                            meshBuilder.vertex(matrix4f, 0, 1, 1);
                            meshBuilder.vertex(matrix4f, 1, 1, 1);
                            meshBuilder.vertex(matrix4f, 1, 1, 0);
                        }

Как добавить в проект?


CometRenderer в данный момент находится в репозитории на гитхабе (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).
Вот пример добавления CometRenderer'a в ваш проект:
Gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:comet-renderer:latest" //latest заменить на последнюю доступную версию CometRenderer'a (на момент публикации это 1.8.4-public)
    implementation "com.ferra13671:gl-texture-utils:latest" //latest заменить на последнюю доступную версию gl-texture-utils (на момент публикации это 1.6.3)
}

Пример использования библиотеки можно найти в репо по пути src/testmod/java/com/ferra13671/cometrenderer/test


Насчет будущего проекта


CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:
прикольно ставлю лайк сердечко подписка
 
1762944373972.png
1762944410466.png

1762944463289.png
1762944487542.png

братан, фулл джпт рендер, фулл пост написанный джпт, это ВООБЩЕ ЧТО
 

Ебать ну если я решил сделать JavaDoc на русском т.к. раньше этот проект был ПРИВАТНЫМ и использовался двумя людьми + делаю незначительные изменения в структуре проекта это значит, что это gpt проект? :roflanBuldiga:

Да и видимо вы редко на югейме встречаете нормально оформленный пост, если ты так удивляешься ему.
 
Последнее редактирование:
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за CometRenderer?


Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она для майнкрафта 1.21.8 fabric, однако данную библиотеку можно попробовать использовать на более поздних или ранних версиях (по крайней мере CometRenderer спокойно использовался на 1.21.10, за исключением того, что пример пост эффектов на руки был сломан)

Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера

  • Оптимизация работы с униформами:
    В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено.
  • Оптимизация отрисовки:
    Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта.
  • Более удобная загрузка данных:
    В майнкрафте загрузка кода шейдеров происходит через Indentifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
    В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders:
    IN_JAR, INPUT_STREAM, URI.
  • Создание кастомных форматов вершин (VertexFormat):
    Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более лучшем уровне.

    В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).

    Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
    ROUNDED_RECT VertexFormat:
    Expand Collapse Copy
    public static final VertexFormat ROUNDED_RECT = VertexFormat.builder()
                                .element("Color", VertexElementType.FLOAT, 4) //Цвет вершины ректа
                                .element("Rect Position", VertexElementType.FLOAT, 2) //Позиция ректа
                                .element("Size", VertexElementType.FLOAT, 2) //Размер ректа
                                .element("Radius", VertexElementType.FLOAT, 1) //Радиус закругления вершины ректа
                                .build();
    И пример кода вершинного шейдера для данного формата:
    example.vsh:
    Expand Collapse Copy
    #version 330 core
     
     in vec4 position;
     in vec4 _vertexColor;
     in vec2 _rectPosition;
     in vec2 _size;
     in float _radius;
     
     #include<matrixUniforms> //В CometRenderer также есть система шейдерных библиотек, которые могут внедряться в шейдерны на этапе компиляции. Пример их использования можно будет посмотреть в примере использования библиотеки, о котором будет оговорено позже.
     
     out vec4 vertexColor;
     out vec2 rectPosition;
     out vec2 size;
     out float radius;
     
     void main() {
                        gl_Position = projMat * modelViewMat * position;
                        vertexColor = _vertexColor;
                        rectPosition = _rectPosition;
                        size = _size;
                        radius = _radius;
     }

    По умолчанию есть следующие форматы вершин, распологающиеся в классе CometVertexFormats:
    POSITION, POSITION_COLOR, POSITION_TEXTURE, POSITION_COLOR_TEXTURE, POSITION_TEXTURE_COLOR.
  • Создание кастомных режимов отрисовки вершин (DrawMode):
    По умолчанию в библиотеке есть примитивные дравмоды: LINES, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS.
    Хотя для некоторых данных дравмодов будет достаточно, однако можно спокойно создавать свои дравмоды.
    Например, создадим дравмод для 3д куба, который принимает 8 вершин, которые будут в последующем разложены на треугольники и обработаны при отрисовке:
    Cube DrawMode:
    Expand Collapse Copy
    public static final DrawMode CUBE = new DrawMode(
                                GL11.GL_TRIANGLES, //Режим отрисовки в OpenGL
                                true, //Будет ли дравмод использовать буффер индексов или нет. В нашем случае это true.
                                //8 — количество вершин для одного куба до триангуляции. 36 — количество вершин для одного куба после триангуляции.
                                new IndexBufferGenerator(8, 36, (indexConsumer, firstVertexIndex) -> {
                                    //1-я сторона куба
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex);
     
                                    //2
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 4);
     
                                    //3-я сторона куба
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex);
     
                                    //4-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 2);
     
                                    //5-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 3);
                                    indexConsumer.accept(firstVertexIndex + 2);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 5);
                                    indexConsumer.accept(firstVertexIndex + 4);
                                    indexConsumer.accept(firstVertexIndex + 3);
     
                                    //6-я сторона куба
                                    indexConsumer.accept(firstVertexIndex + 1);
                                    indexConsumer.accept(firstVertexIndex);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 7);
                                    indexConsumer.accept(firstVertexIndex + 6);
                                    indexConsumer.accept(firstVertexIndex + 1);
                                }),
                                //Функция, возвращающая данное количество вершин в меше после триангуляции.
                                vertices -> vertices / 8 * 36
                        );
    drawBox method:
    Expand Collapse Copy
    public static void drawBox(MeshBuilder meshBuilder, Matrix4f matrix4f) {
                            meshBuilder.vertex(matrix4f, 1, 0, 0);
                            meshBuilder.vertex(matrix4f, 1, 0, 1);
                            meshBuilder.vertex(matrix4f, 0, 0, 1);
                            meshBuilder.vertex(matrix4f, 0, 0, 0);
     
                            meshBuilder.vertex(matrix4f, 0, 1, 0);
                            meshBuilder.vertex(matrix4f, 0, 1, 1);
                            meshBuilder.vertex(matrix4f, 1, 1, 1);
                            meshBuilder.vertex(matrix4f, 1, 1, 0);
                        }

Как добавить в проект?


CometRenderer в данный момент находится в репозитории на гитхабе (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).
Вот пример добавления CometRenderer'a в ваш проект:
Gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:comet-renderer:latest" //latest заменить на последнюю доступную версию CometRenderer'a (на момент публикации это 1.8.4-public)
    implementation "com.ferra13671:gl-texture-utils:latest" //latest заменить на последнюю доступную версию gl-texture-utils (на момент публикации это 1.6.3)
}

Пример использования библиотеки можно найти в репо по пути src/testmod/java/com/ferra13671/cometrenderer/test


Насчет будущего проекта


CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:
неплохо
 
Ебать ну если я решил сделать JavaDoc на русском т.к. раньше этот проект был ПРИВАТНЫМ и использовался двумя людьми + делаю незначительные изменения в структуре проекта это значит, что это gpt проект? :roflanBuldiga:
полный джпт проект, последний скрин посмотри который я прикрепил чувак, так НИ КТО НЕ ПИШЕТ
 
полный джпт проект, последний скрин посмотри который я прикрепил чувак, так НИ КТО НЕ ПИШЕТ
Ну раз критикуешь то, как я описал данный класс, то предлагай как бы ты описал данный класс.

Твоё же описание будет очень оригинальным, если ты приписываешь моё описание класса к gpt описанию.
 
Ну раз критикуешь то, как я описал данный класс, то предлагай как бы ты описал данный класс.

Твоё же описание будет очень оригинальным, если ты приписываешь моё описание класса к gpt описанию.
Я БЫ НИКАК НЕ ОПИСЫВАЛ ЕБУЧИЙ РЕКОРД))
 
Я БЫ НИКАК НЕ ОПИСЫВАЛ ЕБУЧИЙ РЕКОРД))
ЫЫЫ РЕКОРД НЕ БУДУ ЕГО ОПИСВАТЬ ЫХЫХЫХЫХХЫ А ТАКОЙ МОЩНЫЙ САМИ БУДУТ ДУМАТЬ НА КОЙ ХУЙ ОН СДАЛСЯ ЫХЫХЫХЫХХЫХЫ)))))))0000)))000)))

Рекорд не рекорд, если он есть, то у него есть какое-либо предназначение валенок.
 
он на демке при мне это писал ес чё
оба одной пары, два джпт юзера
Рекорд не рекорд, если он есть, то у него есть какое-либо предназначение валенок.
пацан ты реально за этот щиткод пытаешься оправдываться, видно всем что это сранный гпт код)
 
оба одной пары, два джпт юзера

пацан ты реально за этот щиткод пытаешься оправдываться, видно всем что это сранный гпт код)
Хватит нюхать говно и думать, что тут не только для тебя, но и для всех это gpt код. Тут у нас только ты один такой 'герой'.
Тебе никакой ИИ не напишет здравую кастомную рендер библиотеку, тем более которая будет нормально работать на +-1.21.8 fabric.

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

Ты бы сначало сделал что-нибудь дельное, а потом бы критиковал чужие работы. :roflanBuldiga:
 
спс пошол вайбкодить жоска свой хуйнядлс на 1.21.8 спс брад рил памог (у миня каманда кодиров, гпт, грок, дипсик, клауд, геймени)
 
Хватит нюхать говно и думать, что тут не только для тебя, но и для всех это gpt код. Тут у нас только ты один такой 'герой'.
Тебе никакой ИИ не напишет здравую кастомную рендер библиотеку, тем более которая будет нормально работать на +-1.21.8 fabric.

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

Ты бы сначало сделал что-нибудь дельное, а потом бы критиковал чужие работы.
братан, нюхни мой пук, не пытайся оправдывать свой говнокод, я в разы умнее и дельнее чем ты, и пытаться спорить с человеком который в РАЗЫ умнее тебя смысла нет
 
Назад
Сверху Снизу