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

    +9

    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
    template<typename T> struct OBB
    {
    	vector3<T> position;
    	matrix3<T> transform;
    
    	vector3<T> GetPoint(bool positiveX, bool positiveY, bool positiveZ) const
    	{
    		const vector3<T> localUnitPoint = {T(positiveX)-T(0.5), T(positiveY)-T(0.5), T(positiveZ)-T(0.5)};
    		return vector3<T>(GetFullTransform()*vector4<T>(localUnitPoint, 1));
    	}
    
    	AABB<T> BoundingAABB() const
    	{
    		AABB<T> result;
    		result.max = result.min = position;
    		for(bool b1: {false, true})
    			for(bool b2: {false, true})
    				for(bool b3: {false, true}) //Перебираем все точки параллелепипеда
    					result.AddPoint(GetPoint(b1, b2, b3));
    		return result;
    	}
    };

    Что-то даже не могу вспомнить, когда я такое написал. Случайно наткнулся и решил, что это должно быть здесь.

    Запостил: gammaker, 05 Августа 2016

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

    • for (int i = 0; i < 8; i++)
      result.AddPoint(GetPoint(i&4, i&2, i&1));

      Вот как надо, анскилябра.
      Ответить
      • Скорее уж так:
        for (int i=0; i<8; i++)
        result.AddPoint(GetPoint(i >> 2, (i >> 1) & 1, i & 1));

        Только надо тогда вместо bool числа поставить, а то варнинги будут. Или использовать !!
        Ответить
        • ну ты анскил
          Ответить
          • Это кто такой?
            Ответить
          • В вижуалке, емнип, ворнинг был про то, что преобразование числа в бул снижает пирфоманс.
            Ответить
            • а вас не смущает сигнатура метода, пирфомансер вы наш?
              Ответить
              • > сигнатура метода
                А чё с ней? В сигнатуре bool, а i & 4 - инт. Неявный каст, все дела. В общем-то после (i & 4) != 0 даже вижуалка ругаться перестаёт (а остальным компиляторам и так похуй).
                Ответить
                • то есть вас не смущает, что точку получают по 3 булам и еботень AddPoint(GetPoint)?
                  Ответить
                  • А почему это должно меня смущать? У параллелепипеда 8 вершин.

                    > AddPoint(GetPoint())
                    А тут то что не так?
                    Ответить
        • То есть вы считаете, что не все числа, большие 0, это тру?

          PS - а внутри метода такой ебучий свич что бы понять какой угол обработать, ага...
          Ответить
    • Есть 3 утверждения. У точек параллелепипеда можно спрашивать, истинны ли эти утверждения. При этом у каждой точки своё мнение по этим вопросам. Таким образом можно понять, с какой точкой мы имеем дело.
      Ответить
      • 😀 у козла всегда годные шутки
        Ответить
    • не пидор? не сука? хуи сосешь?
      Ответить
    • — Почему, мистер Андерсон, почему? Во имя чего? Что вы делаете? Зачем, зачем встаете? Зачем продолжаете драться? Неужели вы верите в какую-то миссию, или вам просто страшно погибать? Так в чем же миссия, может быть, вы откроете?

      Ну сколько уже можно движки писать? Т_Т
      Ответить
      • Стандартная обучающая задача. Словарик, калькулятор, чатик, текстовый редактор, трёхмернвый движок, компилятор.
        Ответить

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