Задать вопрос
  • Есть ли смысл мучаться с текстурами?

    Airat1995: Мои познания тоже не настолько глубокие =( Могу посоветовать "OpenGL Insights", в свое время спер оттуда пару интересных решений.
  • Есть ли смысл мучаться с текстурами?

    Airat1995: Precach\Preload каждый реализует сам в конкретном движке со своими хитростями, нет универсального способа или особых финтов в opengl на тот счет. В целом как я и выше писал, либо грузите все необходимое заранее до геймплея, либо грузите все в реальном времени и изобретаете велосипеды чтобы это было незаметно либо комбинируете оба способа.
    По поводу мипмапов https://www.khronos.org/registry/OpenGL-Refpages/g...
    Без LOD смысла нет, но лоды обязательно надо делать.
  • Есть ли смысл мучаться с текстурами?

    Airat1995: TBO если проще говорить это линейный буфер с не совсем известными данными(внутри может быть 1D\2D\3D\Cube и т.д.), никаких мипмапов или фильтраций нет, только хардкор. Мипмапы автоматически не генерируются, на этот счет от версии к версии opengl было и есть куча разных методов для генерации оных.
    С IO надо исходить из задачи. Раньше когда видеопамяти и озу было не так много то часто хитрили и на лету грузили и выгружали ресурсы. Сейчас эта проблема остро не стоит, памяти везде много и она очень быстрая. Исключением может быть игра с бесшовным миром и огромным числом текстур. Если исключить такие миры то текстуры грузят не в реальном времени на лету а вначале при загрузке уровня загружают абсолютно все что понадобится для уровня(обычно называют прекэшем), по времени это опять же становится не критичным т.к. пока грузятся ресурсы игроку обычно показывают экран загрузки с нескучными картинками.
    Намного больше времени,как правило, уходит на разработку алгоритма грамотного прекэша. Решают или в лоб путем статичного списка прекэша который точно не меняется на протяжении игры(текстура героя\оружия... в общем все то что на протяжении всей игры не меняется и будет почти на каждом уровне) и данимаческий список(текстуры присущие конкретному уровню, составляется обычно отдельной утилитой которая делает файлик со списком всех текстур на уровне). Динамический список при каждой смене\загрузки уровня сначала вычищается а потом на его место грузится новый. Такой подход в движке сорса и вообще почти в каждом.
    Бывает что идут немного интереснее и эти списки составлют динамически на лету и также динамически асинхронно по этому списку все грузят и выгружают. Чтобы сделать этот процесс незаметным идут хитрым путем. Делают свой "велосипед" формат текстур в котором запекают мипмапы, располагают их в начале файла самый мелкий а в конце самые большие т.е. текстура в оригинальном разрешении. При необходиомсти загрузки асинхронно быстро грузится начало текстуры и сразу накладывается на объект(он получается мыльный) и по мере загрузки файла подменяют мипмапу на более качественную. Такой подход тоже много где используется, живой пример был и остается двиг UE3. В нем на компьюерах с малым количеством памяти\медленной памятью или медленным хардом можно наблюдать в реальном времени за этой загрузкой. Карта грузится очень быстро, затем включается рендер мира и все мыльное мыльное и в течении секунд на глазах все обрастает деталями, стоит поднять новое оружие как оно несколько секунд мыльное и вдруг резко становится красивым. У этого подхода к плюсам можно отнести более быструю загрузку, возможность делать огромные и бесшовные миры, возможность загружать огромные текстуры но все это прекрасно и красиво на очень мощных ПК или на более слабых с условием что игра не шибко динамичная а размеренно плавно медленная.
  • Как обновлять контент своего приложения?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Palantir21: Тогда лучше начните с азов явы, затем переходите к азам работы с БД а после только пишите такие приложения.
  • Почему без вызова this система не принимает ответ?

    jamakasi666
    @jamakasi666 Куратор тега Java
    А есть некий живой компилируемый псевдопример такой ситуации, было бы интересно попытать его в разных ситуациях.
  • Как лучше хранить данные о трафике в БД?

    Дмитрий Чередниченко: Я же говорю как вариант можешь раскладывать по принципу как я выше описал. Проблема больших чисел в том что каждый ЯП, каждая функция в фремворки или собственная, каждый вызов вывода данных все это неизбежно приводит к ошибкам округления. Живой пример:
    Mysql минимум -9,223,372,036,854,775,808 максимум 9,223,372,036,854,775,807 или при счете от
    минимум 0 максимум 18,446,744,073,709,551,615
    PHP минимум -2,147,483,648 максимум 2,147,483,647 или php 64 битный
    минимум -9,223,372,036,854,775,808 максимум 9,223,372,036,854,775,807
    Тоже самое происходит и с другими ЯП или форматами данных.

    Намного проще упростить систему по рецепту выше =)
  • Как удалить классы во время сборки приложения?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Atllantis: Если не вариант то надо написать скриптик который рекурсивно прошерстит все java файлы перед компиляциеей и если найдет в строке коментарий, скажем, /*------debug-delete*/ то удалит всю строчку целиком. Только в таком случае придется в коде такие места умещать в 1 строку и не задействовать этим кодом ничего другого.
    Тогда в каком то смысле это будет заменой #ifdef
  • Почему Yii/Yii2 не подходит для крупных проектов?

    Максим Тимофеев: я вообще то не писал конкретно про yii. Но если так то все что связанно с yii требует расширения и стиля писания как yii-way, шаг в сторону сразу расстрел на месте.
    К примеру попробуйте сделать сложную форму? Ааа, вроде виджетов много но подходящего нет, пробуй написать свой виджет ииии (yii-way):
    "Разрабатываемые виджеты должны быть самодостаточными. Это означает, что для их использования должно быть достаточно всего лишь добавить виджет в представление. Добиться этого бывает затруднительно в том случае, когда для его функционирования требуются внешние ресурсы, такие как CSS, JavaScript, изображения и т.д. "
    Отсюда родится костыль или отхождение от стиля фреймворка.
  • В чем разница ОС Linux и OS X (Mac)?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Дмитрий Крымцев: убунта этот тоже дебиан только unstable.
  • Как записать в файл данные очень быстро??

    jamakasi666
    @jamakasi666 Куратор тега Java
    Антон @ Лялин: смотря что в вашем понятии "быстро" и "очень медленно". Обычно в таких случаях надо профилировщиком искать бутылочное горлышко.
    Может у вас очень хреновый hdd\ssd или проц не вытягивает.
  • Как писать много кода, оставляя его простым, как в начале?

    Руслан Янбердин: строго по интерфейсам. Вы должны знать что этот черный ящик принимает только String дальше идет магия и на выходе получается сортированная строка. Что и как происходит внутри вас волновать не должно.
    Еще можно добавить 4й пункт. Один класс решает одну конкретную задачу, не стоит городить комбайны.
  • Как создать DataMatrix с utf-8 (кириллицей) в Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Maxim: это как раз костыль о котором я и писал. Кто то его доделывает а кто то нет в итоге с utf-8 все очень плохо.
  • Использование интерфейсов в Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    dima_meln: Не будут, но станут доступны если сделаете так Save velik = new Velosiped();
    Или же скастуете тип:
    Transport velik = new Velosiped();
    ((Save)velik).someSave();
    Вообще интерфейсы очень мощная и удобная штука.
  • Использование интерфейсов в Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    dima_meln: я так понимаю вот это Transport velik = new Velosiped();
    Тут следующее.
    Transport это интерфейс как сразу понятно но ему присваивается реализация Velosiped. Фишка в том что будут доступны все методы которые объявлены в интерфейсе но не будет каких то сторонних которые могли быть объявлены внутри реализации. Т.е. если в классе Velosiped вы напишите совершенно новый метод, к примеру void MegaTurboDvijenie()то вы его не увидите потому что его нет в интерфейсе.
    Так же найдете этот метод если объявите явно Velosiped velik = new Velosiped();
    Другой вариант каст класса. Например ((Velosiped )velik).MegaTurboDvijenie(); Этот метод станет виден хотя он не объявлен в интерфейсе.

    При всем этом нельзя сделать такое Transport velik = new Transport(); Это будет ошибкой.
  • Использование интерфейсов в Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    dima_meln: какая часть конкретнее? Эта ((Transport)someObject).sadimsya(); ?
  • Использование интерфейсов в Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Денис Загаевский: все ради понимая. Видно что человек изучает тему и хочет понять. В тех же книгах примеры обычно очень скудные для понимания, особенно тем кто только изучает и не может понять а почему так назвали и т.д. В общем не расстраивайся, в реальном коде я такого не делаю =D
  • Как рассчитать точку и время пересечения 2 объектов?

    Максим Гречушников: описанное выше применимо хоть к клиенту, хоть к серверу. Как только на сервер поступает запрос я так полагаю он у вас уже будет знать начальные точки и их стартовые параметры. Запрос поступил, можете посчитать сразу или сложить в очередь и просчитать через минуту.
    А вообще разрыв в минуту это что то с чемто честно говоря =D. За минуту может столько произойти, что синхронизировать клиентов запаришься.
  • Как правильно организовать работу с сокетами?

    jamakasi666
    @jamakasi666 Куратор тега Java
    mitaichik: возможно, я последнее время для резкого набора чего то на коленке все чаще использую CryoNet. Уж очень нравится подход и удобность.
  • Как организовать просмотр сериалов с домашнего сервера через интернет?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Nathan Stark: WinBox->PPP->Profiles->твой_впн_профиль->Вкладка Protocols:
    Отключаешь "Use compression" и "Use encryption".
  • Как установить windows рядом с ubuntu?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    ipswitch: Судя по вопросу автора, а точнее всего по его познаниям юниксовых исходя из вопроса наверное все же поиграть. А убунта стоит только для обучения и познания.