Среда, 04 Декабря 2024, 20:03

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
afqДата: Четверг, 14 Марта 2019, 23:35 | Сообщение # 661 | Тема: Книга "Проектирование виртуальных миров."
Разработчик
Сейчас нет на сайте
ссылка на литрес. Книга "Проектирование виртуальных миров. Теория и практика дизайна уровней" для левел дизайнеров. Расскажет наверное много чего интересного. Я купил. Пока что немного прочитал. Информация в начале общая, рассказывается о том как в професии кто над чем работает. Приводятся примеры игр.
afqДата: Четверг, 14 Марта 2019, 23:29 | Сообщение # 662 | Тема: Дайте линуксу право на конкурсы
Разработчик
Сейчас нет на сайте
Мы живем в современном мире, где линукс уже давно занял нишу десктопных систем. Я думаю, что неправильно устраивать конкурс по разработке игр только для windows. На этом форуме есть люди, которые пользуются линуксом. Устраивая конкурс только для windows мы ограничиваем права линуксоидов. Я например пользуюсь линуксом. Сам бы я конечно не запустил бы ни одной игры на этом конкурсе в целях безопасности, а может быть и запустил бы. У меня есть windows. Но мой компьютер не так хорош, чтобы windows поддерживать, да в игры играть еще можно, но чтобы запустить visual studio, так это проблемы, еще с лицензией что-то случилось и перезайти не смог в vusial studio по логину и паролю. В общем хочу заявить что игры для линукс тоже имеют право быть. Может никто и не захочет участвовать, но право все таки имеет. Я бы поучавствовал бы в конкурсе, создал какую нибудь игру. Кто нибудь из линуксоидов бы затестил ее и поставил бы баллы.
afqДата: Четверг, 14 Марта 2019, 14:33 | Сообщение # 663 | Тема: тайловый редактор ipsi
Разработчик
Сейчас нет на сайте
Цитата
можно встроить в процесс сборки проекта некоторый билдер, который будет переводить xml в нативный код.

cherepets, я незнаю как это сделать. Лучше я свою программу доделаю и буду пользоваться.
afqДата: Четверг, 14 Марта 2019, 00:49 | Сообщение # 664 | Тема: тайловый редактор ipsi
Разработчик
Сейчас нет на сайте

Решил продолжить совершенствование в построении интерфейсов в opengl. Представляю вам ipsi ( тайловый редактор ). Пока что мало чего реализовал. Реализовано только разбиение изображения на куски, что видно справа. И простенький файловый менеджер, в котором можно перемещаться по каталогам и выбирать изображения. Экспорт будет в массив. То есть экспортировать можно будет в разные массивы. Например сначала будет реализован экспорт в c/c++ массив. Также будет выбор сверху вниз или снизу вверх размещать элементы в массиве. Так как я пользуюсь линуксом, а windows почти не пользуюсь и незнаю как для windows делать программы, я делаю эту программу для линукс. Я сначала пользовался tiled, но экспорт в xml файл данных меня не устраивает, я хочу чтобы можно было не выбирать какой размер тайлов будет изначально, а рисовать по желанию сколько захочешь. И экспортировать это сразу в массив. Если у меня все получиться, то будет хорошо. Есть проблема, пишу программу без мотивации и у меня нет желания ее делать. Пишу программу все равно. Иногда настроение появляется писать программу, но не всегда. Приходиться преодолевать нежелание. По завершению первой версии код будет выложен на github.
afqДата: Воскресенье, 10 Марта 2019, 15:19 | Сообщение # 665 | Тема: Художник по интерьерам для визуальных новелл
Разработчик
Сейчас нет на сайте
stop_control, офигеть, вот ты рисуешь.
afqДата: Воскресенье, 10 Марта 2019, 12:57 | Сообщение # 666 | Тема: Irreal (18+)
Разработчик
Сейчас нет на сайте
Dreika, ну как твоя порнушка?
afqДата: Суббота, 09 Марта 2019, 15:25 | Сообщение # 667 | Тема: свой графический движок
Разработчик
Сейчас нет на сайте
Xakep,
Цитата
либо можно рендерить не по одной букве, а сразу текст, тогда этот текст будет срендерен в текстуру

В моей реализации с freetype2, можно писать такой текст вместе с \n, то есть если в sdl2 можно только одной строкой писать, то моим способом можно абзацами целыми писать.
afqДата: Пятница, 08 Марта 2019, 22:56 | Сообщение # 668 | Тема: свой графический движок
Разработчик
Сейчас нет на сайте
Xakep, а как ты открывал opengl контекст? Я с помощью sdl2.
Цитата
рендеринг шрифтов это вообще отдельная тема

Я сначала создавал каждую букву высчитывал размер, а потом создавал текстуру с таким же размером и записывал в текстуру данные. Мне советуют каким то текстурным атласом пользоваться, но я так и не читал об этом, потому как мой способ уже проверен. Правда несколько дней назад была проблема если написать один символ '-', то там вычиталось неправильно и был segfault. Исправил. Но есть строка в коде, которая работает не логично.


Сообщение отредактировал afq - Пятница, 08 Марта 2019, 22:57
afqДата: Четверг, 07 Марта 2019, 23:08 | Сообщение # 669 | Тема: свой графический движок
Разработчик
Сейчас нет на сайте
Вспомнил как читал когда-то про мужика какого то, который пришет opengl интерфейсы. А ведь действительно, можно же не только движок, но и любую программу на opengl написать. Первое время написать программу на opengl будет долгим, пока создашь все нужные виджеты, но потом, когда будет создана куча виджетов, можно будет уже быстрее создавать программы. Можно же любой какой захочешь виджет создать, это же супер. Я вот например не могу для qt создать виджет, а если говорить для gtk, то там вообще для меня не понятно. Другое же дело opengl, если в qt и gtk я не могу создать файловый менеджер, то в opengl могу. Например в своем движке файлы спрайтов будут отрисовываться в файловом менеджере. Если 3d осилю, то и 3d объекты будут отображаться в файловом менеджере в одинаковом размере. 3D объекты я могу только obj формата использовать, но этого мне хватает с головой. Правда пока 3d все равно сложная тема для меня. Но если разберусь, то можно будет и игры 3d делать и 3d интерфейсы программ делать. Вот так вот.
afqДата: Четверг, 07 Марта 2019, 17:36 | Сообщение # 670 | Тема: свой графический движок
Разработчик
Сейчас нет на сайте
drcrack, блин, а я купил книгу по vulkan, но там написано что она пойдет опытным разработчикам opengl. А я еще не очень опытный разработчик opengl.
afqДата: Четверг, 07 Марта 2019, 16:14 | Сообщение # 671 | Тема: свой графический движок
Разработчик
Сейчас нет на сайте
Делал я в общем hackingtoday игру и потом ее забросил. Щас что подумал раз я смог создать графические виджеты для игры, то я могу создать и для движка любой виджет, который захочу. Для меня проблема создавать свои виджеты с помощью gtk или qt. А так, как в aseprite, сделаю свои элементы. Только из-за того что я еще не делал этот движок думаю будут проблемы с экраном, то есть вставляя элемент его надо сразу ставить туда, куда надо, блин, а может и не будет проблем. Кто что думает о движках полностью на opengl?
afqДата: Понедельник, 04 Марта 2019, 15:32 | Сообщение # 672 | Тема: Прошу помощи с добором идеи.
Разработчик
Сейчас нет на сайте
Rage_of_life, сделай объясняющий текст, вот так и так, расы в будущем решили что рас может быть бесконечное число. И вот они из будущего пришли в прошлое и из-за того что в прошлом появляются новые расы, в будущем их становиться еще больше. И из будущего начинают уже приходить еще больше рас. И тут такой замес начинается. В будущем уже жить негде, они из будущего в прошлое идут, чтобы было где пожить. Когда количество рас принимает критическую метку, раса людей начинают понимать, что зря они разводили новые расы, лучше бы космическое пространство осваивали ( ну это текстом в конце напиши ). Будет весело.
afqДата: Понедельник, 04 Марта 2019, 14:08 | Сообщение # 673 | Тема: Прошу помощи с добором идеи.
Разработчик
Сейчас нет на сайте
Rage_of_life, пускай новые расы будут приходить из будущего, чтобы новые виды рас были созданы быстрее.
afqДата: Суббота, 02 Марта 2019, 13:45 | Сообщение # 674 | Тема: HackingToday
Разработчик
Сейчас нет на сайте

Платформа: android
Язык программирования: си
Графическая система: opengl es 3
Библиотеки: SDL2, freetype2, opengl, gles2

HackingToday ( Взлом сегодня ) - игра о хакерских взломах и атаках, мошенничествах и т.д. Планируется сделать игру интересной. Идеи приходят редко, фантазии не хватает, поэтому делать игру буду долго. Думаю что у меня получиться хорошая игра. Делаю для любого экрана. Слева на панели будут размещены виджеты, с помощью которых можно будет выполнить определенные действия.

На данный момент у меня нет идей как реализовать интересную игру. Поэтому проект заморожен.


Сообщение отредактировал afq - Среда, 06 Марта 2019, 21:21
afqДата: Среда, 27 Февраля 2019, 07:49 | Сообщение # 675 | Тема: работа с freetype2 freetype
Разработчик
Сейчас нет на сайте
Всем привет. Я достиг успеха в работе с freetype2. Пусть может быть эта тема будет кому нибудь полезна. Может кто в интернете незнает как работать с freetype, зайдет в эту тему и скачает текст класса.
Итак, вот чего я достиг. С помощью моего кода текст можно выводить в несколько строк. Эти строки будут включены в одну текстуру. Класс ведь правда? Одной текстурой рисовать несколько строк. А то я видел какие то примеры, вообще не понятные. Там как то странно нужно рисовать строки. В общем, вот что получается.

Вот как вызвать функцию.
Код

        wchar_t * text = L"привет gcup, я пишу в линуксе с sdl2 и opengl.\n"
                "Мне нравиться когда у меня начинает что-то получаться.\n"
                "А также я считаю что эта тема может пригодиться многим, кто хочет работать с freetype2.\n"
                "И так, код будет снизу!";
        font->init ( text, 21, 1, 4, 4, 0, 0, 0 );

Функция init принимает параметры.
\1 текст
\2 размер шрифта
\3 расстояние между шрифтами по горизонтали в пикселях
\3 расстояние между шрифтами по вертикали в пикселях
\3 размер пробела в пикселях
\4 красный цвет
\5 зеленый цвет
\6 синий цвет

Вот код font.hpp
Код

#ifndef H_FONT_H
#define H_FONT_H
#include <stdint.h>
#include <ft2build.h>
#include <string>
#include <vector>
#include <SDL2/SDL_opengl.h>
#include <SDL2/SDL_opengles2.h>
#include "gl_mat.hpp"
#include "global.hpp"
#include <wchar.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H

class Font {
    public:
  Font ( ) { }
  Font ( const char *ttf_file );
  void setPos ( int x, int y );
  void init ( wchar_t *text, int fontSize, int align, int valign, int space, uint8_t r, uint8_t g, uint8_t b );
  void setSize ( int w, int h );
  void draw ( );
    private:
  FT_Face face = 0;
  float *texture;
  float *vertices;
  int width;
  int height;
  int sampler;
  GLuint textureid;
  int x;
  int y;
  int max_draw;
  float ortho[4][4];
  float translate[4][4];
  float result[4][4];
  unsigned int program;
  FT_Library ft_library;
  FT_Face ttf;

};
#endif

Вот код font.cpp
Код

#include "font.hpp"

Font::Font ( const char *ttf_file )
{
    glm::clearMatrix4x4 ( &ortho[0] );
    glm::clearMatrix4x4 ( &translate[0] );
    glm::clearMatrix4x4 ( &result[0] );

    program = global.programs["sprite"];
    int width = global.width;
    int height = global.height;
    glm::ortho ( &ortho[0], 0.0f, width, 0.0f, height, 0.0f, 1.0f );
    setPos ( 0, 0 );

    FT_Init_FreeType( &ft_library );

#ifdef __ANDROID__
    FT_NewFace ( ft_library, ttf_file, 0, &face );
#else
    char *path = (char *) new char[255];
    sprintf ( path, "assets/%s", ttf_file );
    FT_New_Face ( ft_library, path, 0, &face );
    free ( path );
#endif
}

void Font::init ( wchar_t *es, int fontSize, int align, int vert, int space, uint8_t r, uint8_t g, uint8_t b )
{
    FT_Set_Pixel_Sizes ( face, 0, fontSize );

    FT_Glyph glyph;

    int w = 0;
    unsigned int h = 0;
    unsigned int maxh = 0;
    unsigned int toprow = 0;
    int len = wcslen ( es );
    for ( int i = 0; i < len; i++ ) {
  wchar_t charcode = es[i];
  FT_Load_Char ( face, charcode, FT_LOAD_RENDER );
  FT_UInt glyph_index = FT_Get_Char_Index ( face, charcode );

  FT_Load_Glyph ( face, glyph_index, FT_LOAD_DEFAULT );
  FT_Render_Glyph ( face->glyph, FT_RENDER_MODE_NORMAL );
  FT_Get_Glyph ( face->glyph, &glyph );

  FT_Glyph_To_Bitmap ( &glyph, FT_RENDER_MODE_NORMAL, 0, 1 );
  FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph) glyph;
  FT_Bitmap bitmap = bitmap_glyph->bitmap;
  w += bitmap.width;

   int resize = bitmap.rows - bitmap_glyph->top;
   h = bitmap.rows + resize;
   if ( toprow < bitmap.rows ) toprow = bitmap.rows;
  
  if ( maxh < bitmap.rows + bitmap_glyph->top ) maxh = bitmap.rows + bitmap_glyph->top;

  if ( charcode == ' ' ) w += space;
  if ( charcode == '\n' ) {
   h += vert + maxh;
   FT_Done_Glyph ( glyph );
   continue;
  }
  w += align;

  FT_Done_Glyph ( glyph );
    }

    uint8_t im[h][w];
    memset ( &im[0][0], 0, w * h * sizeof ( uint8_t ) );

    int ih = 0;
    int iw = 0;
    int posy = 0;
    int topy = 0;
    int maxwidth = 0;
    for ( int i = 0; i < len; i++ ) {
  wchar_t charcode = es[i];
  FT_Load_Char ( face, charcode, FT_LOAD_RENDER );
  FT_UInt glyph_index = FT_Get_Char_Index ( face, charcode );

  FT_Load_Glyph ( face, glyph_index, FT_LOAD_DEFAULT );
  FT_Render_Glyph ( face->glyph, FT_RENDER_MODE_NORMAL );
  FT_Get_Glyph ( face->glyph, &glyph );

  FT_Glyph_To_Bitmap ( &glyph, FT_RENDER_MODE_NORMAL, 0, 1 );
  FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph) glyph;
  FT_Bitmap bitmap = bitmap_glyph->bitmap;

  posy = bitmap_glyph->top;
  posy = bitmap.rows - posy;
  topy = toprow - bitmap.rows;

  if ( charcode == '\n' ) {
   ih += maxh;
   iw = 0;
   FT_Done_Glyph ( glyph );
   continue;
  }
  for ( unsigned int y = 0, i = 0; y < bitmap.rows; y++ ) {
   for ( unsigned int x = 0; x < bitmap.width; x++, i++ ) {
    im [ ih + posy + y + topy ] [ iw + x ] = bitmap.buffer[i];
   }
  }
  iw += bitmap.width;
  iw += align;
  if ( maxwidth < iw ) maxwidth = iw;

  if ( charcode == ' ' ) {
   iw += space;
  }

  FT_Done_Glyph ( glyph );

    }

    iw = maxwidth;
    width = iw;
    height = h;

    unsigned int size = width * height;
    uint8_t *image_data = new uint8_t [ size * 4 ];
    memset ( image_data, 255, size * 4 * sizeof ( uint8_t ) );

    for ( unsigned int i = 0, y = 0; i < size; y++ ) {
  for ( int x = 0; x < width; x++, i++ ) {
   image_data[ 4 * i + 3] = im [ y ][ x ];
   image_data[ 4 * i + 0] = r;
   image_data[ 4 * i + 1] = g;
   image_data[ 4 * i + 2] = b;
  }
    }

    glGenTextures ( 1, &textureid );
    glBindTexture ( GL_TEXTURE_2D, textureid );
    glTexImage2D ( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data );

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    
    setSize ( width, height );
    delete[] image_data;

}
void Font::setSize ( int w, int h )
{
    vertices = new float [ 12 ];
    vertices[0] = 0;
    vertices[1] = 0;
    vertices[2] = 0;
    vertices[3] = h;
    vertices[4] = w;
    vertices[5] = 0;

    vertices[6] = w;
    vertices[7] = 0;
    vertices[8] = w;
    vertices[9] = h;
    vertices[10] = 0;
    vertices[11] = h;

    texture = new float [ 12 ];
    texture[0] = 0;
    texture[1] = 1;
    texture[2] = 0;
    texture[3] = 0;
    texture[4] = 1;
    texture[5] = 1;

    texture[6] = 1;
    texture[7] = 1;
    texture[8] = 1;
    texture[9] = 0;
    texture[10] = 0;
    texture[11] = 0;
}

void Font::setPos ( int x, int y )
{
    this->x = x;
    this->y = y;
    glm::translate ( &translate[0], x, y, 0 );
    glm::sumMatrix ( &result[0], &translate[0], &ortho[0] );
}

void Font::draw ( )
{
    glUseProgram ( program );

    sampler = glGetUniformLocation ( program, "s_texture" );

    glActiveTexture ( GL_TEXTURE0 );
    glBindTexture ( GL_TEXTURE_2D, textureid );
    glUniform1i ( sampler, 0 );

    GLint projection_location = glGetUniformLocation ( program, "transform" );
    glUniformMatrix4fv ( projection_location, 1, GL_FALSE, &result[0][0] );

    glEnableVertexAttribArray ( 0 );
    glEnableVertexAttribArray ( 1 );

    glVertexAttribPointer ( 0, 2, GL_FLOAT, GL_FALSE, 0, vertices );
    glVertexAttribPointer ( 1, 2, GL_FLOAT, GL_FALSE, 0, texture );

    glDrawArrays ( GL_TRIANGLES, 0, 12 );

    glDisableVertexAttribArray ( 0 );
    glDisableVertexAttribArray ( 1 );
}

Вот код шейдера
Код

  const char *vshader =
          "#version 300 es\n"
   "layout(location = 0) in vec2 position;\n"
   "layout(location = 1) in vec2 texCoord;\n"
   "uniform mat4 transform;\n"
    "out vec2 v_texCoord;\n"
   "void main ( )\n"
   "{\n"
   " gl_Position = transform * vec4 ( position, 0.0, 1.0 );\n"
   " v_texCoord = texCoord;\n"
   "}";

  const char *fshader =
   "#version 300 es\n"
   "precision mediump float;\n"
   "in vec2 v_texCoord;\n"
   "layout(location = 0) out vec4 outColor;\n"
   "uniform sampler2D s_texture;\n"
   "void main ( )\n"
   "{\n"
   " outColor = texture ( s_texture, v_texCoord );\n"
   "}";

В пространстве glm содержаться функции по перемещению текста. Если надо, могу выложить.

Добавлено (27 Февраля 2019, 07:54)
---------------------------------------------
Как блин сделать чтобы из поисковиков на эту тему тоже была ссылка?


Сообщение отредактировал afq - Суббота, 02 Марта 2019, 13:48
afqДата: Воскресенье, 24 Февраля 2019, 22:49 | Сообщение # 676 | Тема: Художник по интерьерам для визуальных новелл
Разработчик
Сейчас нет на сайте
Супер рисунки.
afqДата: Суббота, 23 Февраля 2019, 10:00 | Сообщение # 677 | Тема: Где должен быть каталог с данными для android?
Разработчик
Сейчас нет на сайте
Делаю игру для android на sdl2 с opengl es на c++ ( на си неохото, пробую c++, вроде бы удобно ). Пока только небольшую загатовку сделал, чтобы отобразить картинку. Но вот проблема. Я думаю что каталог должен называться assets и находиться в каталоге app. Ну я видел что так называют assets. Так вот. Я запускал в отладчике игру, а она не находила файл data в assets. Где должен находиться каталог с данными и как он должен называться?
afqДата: Вторник, 19 Февраля 2019, 22:33 | Сообщение # 678 | Тема: Список участников конкурса GCUP.ru №12
Разработчик
Сейчас нет на сайте
pontuf, там вроде бы какой то winmain и с каким то возвращаемым значением отличным от int. Это я увидел читая код вот этой игры, кстати игра классная. Там в виндовой функции возвращается линуксовая функция int main ( );
afqДата: Вторник, 19 Февраля 2019, 17:16 | Сообщение # 679 | Тема: Список участников конкурса GCUP.ru №12
Разработчик
Сейчас нет на сайте
JackNazaryan, у меня тоже стоит рядом windows 10, но программировать для windows никак руки не доходят, разобраться бы в линукс хотя бы. Я видел как в windows нужно функцию main объявлять, для меня это какие-то дикие названия. Нельзя было просто как в линукс объявлять main.
Код

int main ( int argc, char **argv )
afqДата: Вторник, 19 Февраля 2019, 03:16 | Сообщение # 680 | Тема: Пиксельартист доступен для работы. Портфолио внутри.
Разработчик
Сейчас нет на сайте
офигеть, вот ты рисуешь! У тебя хоть есть заказы с этого форума?

Добавлено (19 Февраля 2019, 03:18)
---------------------------------------------
А у тебя есть ещё какой нибудь мессенджер, помимо телеграма, а то телеграм у меня не работает.

Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг