• Как сделать определенную часть модели более низкополигональной с помощью модификатора deciminate?

    @yellingorange
    Создай Vertex group, и примени модификатор только к ней.
    61666209c8243837125483.jpeg
    Ответ написан
    Комментировать
  • Как удалить аккаунт github?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Напечатайте "delete my account", там же написано))
    Ответ написан
    3 комментария
  • Как можно реализовать данный код без библиотеки string?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Заведите char массивы какой-то достаточной длины. Читайте через gets_s. Сравнивайте строки через strcmp.
    Ответ написан
    Комментировать
  • В чем разница между * и &?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Указатель это есть адрес, он и хранится в переменной.
    & Это ссылка. Как бы алиас на то место, куда ссылается. Разница есть.
    Ссылку нельзя изменить, изменить можно только значение в памяти, куда ссылается ссылка. Саму ссылку поменять нельзя. Указатель можно менять. Константный указатель нельзя поменять.
    Ссылка не может быть неинициализированна, указатель может быть.
    Указатель может указывать на память в куче, которая должна быть освобождена, ссылку никогда не нужно освобождать отдельно.
    Плюс ещё бывают r-value ссылки(кажется, так называются) &&. В них нельзя присваивать, только читать.
    Ответ написан
  • Как располагаются в памяти элементы массива обьектов класса?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Объекты в C++ имеют постоянный размер, известный на этапе компиляции и равный sizeof(экземпляр)

    Утверждение:
    объект класса может содержать и вектор ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.

    неверно, так как вектор хранит свои данные не в своем экземпляре, а туда, куда их засунет аллокатор (обычно засовывает на кучу).

    Утверждение:
    [объект класса] и шаблонным может быть ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.

    неверно, так как все шаблоны конкретизируются на этапе компиляции.

    Следовательно, объекты класса сидят в массиве друг за дружкой, имеют фиксированный размер, и по ним можно ползать указателем, сдвигая его на этот размер.
    Ответ написан
    Комментировать
  • Как узнать размер каждого элемента вариативного шаблоны по отдельности?

    @Porohovnik
    Необходим С++17, для C++11 это возможно через шаблонную рекурсию.Если надо, я поясню как её сделать.

    template<typename ...Arg>
    auto foo(){
    
    
        std::vector<unsigned int> _sizeofs;// массив с размерами каждого элемента
        ((_sizeofs.push_back(sizeof(Arg))),...);
    
    
    
    }
    Ответ написан
    3 комментария
  • Подходит ли Unreal Engine для очень простых, казуальных игр?

    @s7on1250
    Зависит от того, планируете заниматься этим профессионально или как хобби. В плане казуальных игр конечно лидирует Unity и вакансий следственно будет больше. Ежели это ваше хобби/проект, то вполне можно делать, это вполне легально). Но труднее
    Ответ написан
    Комментировать
  • Почему одна текстура работает и загружается, а другие нет?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Как показало обсуждение в комментариях, исключение бросается из функции glTexImage2D.
    Подозрение в этом случае может пасть только на то, что размер переданной через data памяти меньше расчетного размера, который определяет функция исходя из параметров width, height, GL_RGBA, GL_UNSIGNED_BYTE.

    Это может означать что переданные в glTexImage2D параметры не соответствуют считанному изображению. А т.к. width и height получены напрямую при чтении изображения, вопросы возникать могут только относительно заявленного формата изображения - GL_RGBA, GL_UNSIGNED_BYTE.

    Собственно, именно так и оказалось на самом деле. Прочитанное изображение имеет другой формат и меньше каналов, а следовательно и меньший размер относительно расчетного.

    Касательно самой функции загрузки текстуры - она слишком простая. Настоящая функция загрузки учитывает массу возможных вариантов хранения изображения и всегда учитывает все возможные точки отказа. Обработка всех возможных ошибок гораздо важнее прикладного кода функции.
    Ответ написан
    Комментировать
  • С++ Как замедлить выполнение цикла while?

    0hquazEd
    @0hquazEd
    #include <thread>
    
    int main(int argc, char** argv)
    {
    	int y = 0;
    	while (y >= 20)
    	{
    		std::this_thread::sleep_for(std::chrono::seconds(1));
    		y++;
    	}
    
    	return 0;
    }
    Ответ написан
    Комментировать
  • Почему бы вместо абстрактного класса не делать обычный, но с пустыми методами?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Абстрактный класс нужен для того, чтобы не было возможности создавать его экземпляры, а только его классов-наследников.
    Простой пример. Пусть у нас будет абстрактный класс Фигура с методом Нарисовать; и есть его классы-наследники Круг и Квадрат.
    Так вот. Экземпляры классов Круг и Квадрат мы имеем право создавать, а вот экземпляр Фигуры создавать не имеем права, т.к. это не имеет физического смысла. И уж тем более мы никак не можем реализовать метод Нарисовать у Фигуры. Поэтому и сделан такой запрет на абстрактные классы.
    Это необходимо, чтобы код был надёжным и защищённым от кривых рук других программистов
    Ответ написан
    5 комментариев
  • QT C++ Почему код так отличается?

    Zoominger
    @Zoominger
    System Integrator
    А в Qt (будем считать, что это рописано в функции кнопки): qDebug() << "Hello world!";

    И то, и другое выводит в консоль, просто в Qt для этого сделан отдельный объект со своими "фишками".

    И вообще является ли qt отдельным языком программирования(

    Да, является.

    Если да, то где лучше всего почитать про него)?

    Тут
    Ответ написан
    5 комментариев
  • QT C++ Почему код так отличается?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Почему код на C++ , отличается от кода на qt?

    Вопрос изначально неверно сформулирован. Надо было написать "от кода, написанного с использованием Qt". На ваш взгляд есть визуальные отличия, но это потому что Qt предоставляет свои API.

    Чтобы вывести Hello world! в c++ нужно : cout << "Hello world!" << endl;
    А в Qt (будем считать, что это рописано в функции кнопки): qDebug() << "Hello world!";

    Вариант с cout будет точно так же работать.

    И вообще является ли qt отдельным языком программирования(Если да, то где лучше всего почитать про него)?

    Нет, Qt -- это не отдельный язык программирования, а набор библиотек или фреймворк (зависит от того, как использовать) + набор инструментов.
    Однако же, для разработки UI, с Qt можно использовать отдельный язык, который называется QML. Но можно и не использовать.
    Ответ написан
    Комментировать
  • Зачем при использовании библиотеки stb_image указывают #define STB_IMAGE_IMPLEMENTATION?

    @res2001
    Developer, ex-admin
    Обычно в библиотеках используют подобный подход, когда один и тот же заголовочный файл используется при компиляции самой библиотеки и при компиляции пользовательских приложений, использующих библиотеку (ваш случай).
    Например для микрософтовского компилятора для объявления экспортируемых функций (при компиляции библиотеки) требуется один аттрибут для функции, а для ее импорта из библиотеки (при компиляции приложения) другой. Вот подобные вещи и регулируются этим макросом.
    Ответ написан
    Комментировать
  • Что именно делается константным при таком определении типа?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Константный вектор. Можно вызывать только константные методы, переприсваивать или как-то изменять нельзя.

    Но откуда тут вообще может быть непонимание? В C++ никогда нельзя менять, на что ссылаются ссылки. const/не const может быть только то, на что оно ссылается.

    Edit: изначально я тут некорректно назвал это константной ссылкой, но по хорошему, оно называется ссылка на константу.
    Ответ написан
    4 комментария
  • Какой курс по word press можно купить для 15 мальчика?

    Lillipup
    @Lillipup
    Allons-y, Алонсо!
    Любой, как тут говорят, курсы это налог на тупость
    Ответ написан
    Комментировать
  • Влияет ли на скорость вычисления сколько знаков в double?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Обычно - не влияет. Во-первых, все эти числа в двоичной записи имеют практически одинаковое количество занятых бит - вся мантисса. Во-вторых, операцию выполняет аппаратный блок - ему параллельно единицы ли там или нули в битах.

    Но, если процессор не умеет в операции с числами с плавающей точкой, то будет программная эмуляция - и там уже может зависеть.
    Ответ написан
    Комментировать
  • Что означают просто { тут блок кода } в с++?

    GavriKos
    @GavriKos
    Означают просто блок кода. Влияет, например, на область видимости.
    Хотя так еще можно вроде массивы инициализировать (не уверен), еще что то.
    Ответ написан
    Комментировать
  • Что означают просто { тут блок кода } в с++?

    @tugo
    Пользуются свойствами блока кода:
    1. создается новая область видимости
    2. объект, созданный внутри блока кода, удалится по завершению (т.е вызовется деструктор). В сочетании с RAII иногда удобно.

    // Когда не хочется придумывать новое имя другой переменной, которая точно такая же по смыслу.
    // И хочется дать ей константность - ее менять я не собираюсь, в смысле изменчивости переменной.
    const bool ok = foo1();
    if (!ok)
        return;
    {
        const bool ok = foo2();
        if (!ok)
            return;
    }


    // Когда надо защитить мьютексом изменение переменной, на как можно более короткое время.
    ...  некий код
    {
        const std::lock_guard<std::mutex> lock(_mutex);
        ++i;
        // _mutex is automatically released when lock goes out of scope
    }
    ... продолжаем код


    Или замерить время выполнения части кода. Создаем объект, в конструкторе которого захватываем текущее время, в деструкторе выводим затраченное время в лог.
    Ответ написан
    Комментировать
  • Как привязать текстуру к определенному VAO?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Важно понимать, что во времена шейдеров и мегатекстур, все это стало условностями.
    Текстура - это просто большущий растр, на котором могут хранится "текстуры" хоть от всех объектов сцены - вопрос в координатах.

    glBindTexture() // выбрать текстуру
    glActiveTexture(GL_TEXTURE0) //прицепить ее в текстурный модуль

    glBindTexture() // выбрать еще текстуру
    glActiveTexture(GL_TEXTURE1) //прицепить ее в другой текстурный модуль

    В шейдере создаете два семплера.
    sampler2D a;
    sampler2D b;
    В семплеры грузите номера текстурных модулей:
    glUniform1i( id_a, 0);
    glUniform1i( id_a, 1);
    Ответ написан
    2 комментария
  • Как устроена скорость в играх?

    profesor08
    @profesor08
    Частота кадров это частота кадров, она не должна влиять на игровой процесс. Это лишь реакция на изменение состояния в игре. Скорость это величина зависящая от расстояния и времени за которое объект проходит из точки А в точку Б. Например за секунду твой объект преодолевает N пикселей, за 10 секунд он преодолеет 10N пикселей, независимо от частоты кадров. Чтоб правильно отобразить объект на экране, независимо от частоты кадров, тебе надо узнать прошедшее время с момента последнего рендера. Зная это время, ты посчитаешь точное расстояние, на которое мог сместиться объект, чтоб правильно отобразить его на экране. Это самый просто способ что-то анимировать на экране, не привязываясь к частоте кадров, значение имеет только время и расстояние на которое может сместиться объект за какое-то время.

    Если еще один случай, когда у тебя есть некоторый внутренний цикл, который живет своей жизнью, меняет состояние мира 1 раз в фиксированный промежуток времени. За этот промежуток тебе надо посчитать где окажется объект, с чем он столкнется, что произойдет и кучу всего разного. Остается только взять это состояние, которое уже посчитано и отобразить на экране. А чтоб не было рывков, сгладить способов выше.

    P.S. Я сильно сомневаюсь, что в игровых движка придется этим заниматься, там уже все сделано. Но если хочешь что-то сделать с чистого листа то придется заморочиться.
    Ответ написан
    9 комментариев