1. C++ / Говнокод #14416

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    struct Vector2f{float x, y;};
    struct Vector3f{float x, y, z;};
    struct Tensor3f{float xx, xy, xz, yy, yz, zz;};
    struct Matrix3x3f{float data[9];};
    struct Space2
    {
      typedef Vector2f Vector;
    };
    struct Space3
    {
      typedef Vector3f Vector;
    };
    
    
    template<typename Space>
    struct ParticleSystem
    {
      template<typename T>
      struct ParticleData{};
    
      template<> 
      struct ParticleData<Space2>
      {
        float orientation;
        float invInertia;
      };
    
      template<> 
      struct ParticleData<Space3>
      {
        typename Matrix3x3f orientation;
        typename Tensor3f inertiaTensor;
      };
    
      struct Particle : public ParticleData<Space>
      {
        typename Space::Vector pos, velocity;
      };
    
      template<typename T>
      void DumpParticle(){}
    
      template<>
      void DumpParticle<Space2>()
      {
        printf("%f %f", particles[0].orientation, particles[0].invInertia);
      }
    
      template<>
      void DumpParticle<Space3>()
      {
        printf("%f %f", particles[0].orientation.data[0], particles[0].inertia.xx);
      }
      
      void DumpParticles()
      {
        DumpParticle<Space>();
      }
      std::vector<Particle> particles;
    };

    Хочу объединить трехмерный и двухмерный движок.

    Запостил: LispGovno, 26 Января 2014

    Комментарии (50) RSS

    • Ну конечно же написать через вектора длиной в 2 и 3 элемента с параметром длинны в шаблоне мы уже не можем.
      Ну конечно написать так чтобы скомпилировалось на компиляторе поддерживающем стандарт, например gcc мы тоже не можем.
      Ответить
      • А что здесь не соответствует стандарту? Лень вчитываться, а на первый взгляд не видно...
        Ответить
        • ну как минимум специализация внутри шаблонного класса
          Ответить
    • use boost.geometry, luke
      Ответить
      • А чего не boost::linalg?

        Ну про фатальный недостаток бустовых решений ты знаешь. Люди просто годами пишут движки и никуда не приходят. Из-за кучи фатальных недостатков по всем библиотекам. Просто его бросают, если это не спонсируется большими дядьками с большим золотым запасом. Это ещё везет, если дядька с золотым запасом догадался поставить требование взять движок готовый. Я вообще не представляю что там с ними на гейдеве такое и чем они заражены. Даже наиболее грамотный специалист пушкоф рассказывал что не видит ничего плохого чтобы велосипедить регулярно. Буквально недавно рассказывал как он велосипедил строки. В общем хворь какая-то у них там гейдевская непостижимая. Пару десятков человек даже решили написать свой компилятор, а ещё пару человек сейчас пишут свой компьютер на логсиме или как его там... Хотят увидеть в железе потом.
        Ответить
        • А пара человек ушла на берег собирать песок, чтобы делать свои кристаллы для своего процессора?
          Ответить
        • Хех, эта "максимальная скорость любой ценой" это уже какая-то болезнь...
          Ответить
          • Да если бы дело было в максимальной скорости большинство из них тупо не понимает в контейнеростроительстве, безопасности, производительности, но пишет свои контейнеры и прочее STL безобразие, свой XML, свои вектора и матрицы, свои уравнения. Потом потеряв безопасность меряют каким-нибудь былинным однобоким тестом и рапортуют об ускорении. Тимлид приказывает - всем юзать его контейнер. Нам нужна FPS. Я ему говорю: нахрен пошел. Я буду юзать STL и буст. Мне в ответ: ну и питух. Я объясняю ему то, что сказал вам. Он меня не понимает. Говорит: цифры в тесте видишь? Я говорю что вижу. Крики постепенно сходят на нет. Соседи правят баги в контейнерах или не правят, а я дальше юзаю стандартные средства или сторонние библиотеки. А тимлид на меня только и кричит - какого хрена ты зависимость добавил в наш проект? Зачем я должен новую хрень скачивать из svn? Например буквально недавно я притащил в проект pugixml, тимлид снова орал.
            Ответить
            • ты там прям луч света в темном царстве :)
              пуги мы тоже юзали во всю, хорошая вещь
              Ответить
              • Ага, плять, Катерина из Грозы Островского.
                Ответить
                • и как, контейнер тимлида всех рвёт?
                  Ответить
                  • на некоторых тестах он рвет на гроши. меня от него тоже рвет, так что не нужен. Особенно его быдло интерфейс. В основном от итераторов избавились, безопасность исключений и basic thread safety потеряли. вот и стало быстрее

                    http://cs7009.vk.me/c606424/v606424107/18fb/f43V-xcshcw.jpg
                    Ответить
                    • > basic thread safety потеряли
                      Блин, но как он это сделал?!

                      Хранил все в статических массивах? Или геттер что-то писал в объект?
                      Ответить
                      • ленивая инициализация чего-то там. до С++11 даже через статик в функции если она реализована, то не тред сайв. да и вообще медленно с С++11 из-за синхронизации
                        Ответить
                        • > даже через статик в функции если она реализована, то не тред сайв
                          Опять вижуалстудия, я угадал?
                          Ответить
                          • они в новой вижуалке это с с++11 все ещё не запилили? а в старом гцц же тоже не должно быть это реализовано. с++11 это описывает
                            Ответить
                  • > всех рвёт
                    И стек рвет, и кучу рвет, и выравнивания рвет, и контракты по исключениям и потокобезопасности рвет, и даже мозг LispGovno и его коллег рвет. Всех рвёт ;)
                    Ответить
                    • мозг не рвет. просто не люблю быдлокод.ру., согласно парадокса блаба или эффекта даннинга-крюгера я этому питуху ничего не могу объяснить. мне намекают, что я брежу и оно нафиг никому не сдалось.
                      Ответить
                      • и никуда не сваливаешь, потому что...?
                        Ответить
                        • ...лентяй каких свет не видовал
                          Ответить
                          • Ладно, я честно скажу. Хочу доделать игру. Не могу бросить никак. Если брошу - меня будет грызть чувство вины. Ничего не могу с собой поделать. Не знаю как от этого избавится.
                            Ответить
                            • Парни, посоветуйте мне книжку: как бросить любимый проект для чайников и уйти на высокооплачиваемую работу?
                              Ответить
                              • хм... Кастанеда?)

                                http://www.youtube.com/watch?v=Abp9wSYitUE
                                Ответить
                              • Как перестать беспокоиться и начать жить?
                                Ответить
                            • и как, долго осталось?
                              просто если вы вводите новые убер-контейнеры и срётесь насчет их, то это явно финальная терминальная стадия
                              Ответить
                              • ну ты прав. там ещё долго. люди уходят. контейнеры вводят, свой движок пишут и тд. :(
                                Ответить
                                • Дай угадаю: диздоки так и не написаны, на сценарий всем похуй, модельки и концепт-арты никто не рисует, музыку не сочиняют, и только программисты углубились в написание двигателя от велосипеда?

                                  Если да - то это очень грустно :(
                                  Ответить
                                  • Двигатель велосипеда это человек.
                                    Ответить
                                  • диздоков нет, сценарий устный, тестов нет. разглашать не стану подробностей, а то этот пингвин никогда не взлетит
                                    Ответить
        • Между прочем не шучу, если посмотреть начало темы, то парень собирается запариться, собирая свой процессор и ПеКа на рассыпухе. Потом запустить там свой тетрис и змейку.
          http://www.gamedev.ru/flame/forum/?id=185331&page=2#m19
          Ответить
          • На рассыпухе, имхо, лучше собирать аппаратную змейку и тетрис, без процессора. Ибо всяко меньше гейтов выйдет ;)
            Ответить
            • на рассыпухе вообще ничего не собирать

              откуда у людей столько свободного времени...
              Ответить
              • > на рассыпухе вообще ничего не собирать
                Где-то попадалась мне статья, где чувак собирал RFID метку на рассыпухе. Брутальную такую, 10х15см вроде монтажка вышла, и огроменная катушка-антенна. Самое забавное - она даже читалась сканером.
                Ответить
    • > Хочу объединить трехмерный и двухмерный движок.
      Выбросить двухмерный, и юзать трехмерный в обоих случаях :) В худшем случае он будет просто медленней работать.
      Ответить
      • Да тот же Wayland, насколько помню, для ускорения использует именно OpenGL, а не какой-нибудь двумерный API.

        Плюс на многих архитектурах у SIMD-инструкций основной тип данных - четырехкомпонентные векторы. Привет, невыровненный доступ (см. говнокод ниже)!
        Ответить
      • А в юнити наоборот, добавили поддержку Box2D для двухмерных игр, потому что с трехмерным PhysX все глючит и тормозит.
        Ответить
        • а чё у них так? не асилили написать физику без тормозов?
          Ответить
          • а чё это 3д сложнее чем 2д да?
            Ответить
            • А че, нет? Ну-ка посчитай мне коллизию икосаэдра с цилиндром и их импульсы после разлета ;)

              Физика для 2d все-таки попроще будет.
              Ответить
          • Трехмерный движок для двухмерной физики это какой-то нереальный оверкилл. Особенно интересно как там всякие жидкости и ткани будут работать. Но подробностей не знаю.
            Ответить
            • > Особенно интересно как там всякие жидкости и ткани будут работать
              Просто не юзать, зачем они в 2d ;)
              Ответить
        • > с трехмерным PhysX все глючит и тормозит
          Столько игр AAA класса с физиксом, и никто не жалуется ;)
          Ответить
          • просто они используют собственные указатели и контейнеры
            Ответить
          • 2d-игр AAA-класса? Я явно отстал от жизни.
            Ответить
            • 3d. Но почему он должен баговать на 2d, если он вполне работает в 3d в тех играх? И медленней, чем для 3d сцен он точно не станет.
              Ответить
              • Очевидно, он будет работать медленнее чем движок предназначенный для 2д. Судя по тому что нагуглилось - примерно вдвое медленее.
                А насчет багов - ну может это криворукость пользователей юнити.
                Ответить
    • - Козел! Больно, - вырвалось у меня вместо приветствия.
      Ответить

    Добавить комментарий