Ответы пользователя по тегу C#
  • Что стоит учить с или c++ или c#?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Начинать нужно всегда с того языка, на котором ты думаешь, разговариваешь в быту и пишешь. С Русского языка. У тебя с ним, видно, все вполне хорошо. Пишешь понятно, мысли за словами прослеживаются.
    Значит нужно двигаться дальше. Следующим языком для тебя должен быть интернациональный. На этом языке идет общение в сообществах и передаются знания, как через книги, так и напрямую. Английским нужно владеть на уровне способности читать без запинки и словарей, также на английском нужно уметь внятно писать. Навыки устного общения будут плюсом, но на этапе обучения сильно не требуются.

    Языки программирования - это инструменты. А инструменты всегда надо выбирать от условий задачи. У тебя не выйдет решать все задачи только каким-то одним языком. Знать во всех тонкостях и уметь использовать строго по назначению Python, Java, C#, C++, Lua, TypeScript и, например, PHP не просто нормально, а важно.
    Бьерн Страуструп один раз говорил о том, что для настоящего инженера важно знать порядка 5 разных языков и разбираться в их особенностях, чтобы считать себя настоящим специалистом.

    Поэтому вообще не важно что ты выберешь на свой первый раз. Качество инженера раскрывается в его умении полноценно владеть множеством инструментов.
    Ответ написан
    Комментировать
  • Как загрузить картинку в OpenTK c# с прозрачным фоном, при чём сам фон и так прозрачный?

    @MarkusD
    все время мелю чепуху :)
    BitmapData data = bitmap2.LockBits(new System.Drawing.Rectangle(x, y, weight, height),
        ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);

    Тут получается память изображения. Формат пикселя в data будет XRGB с шириной 32 бита.
    Внимание здесь следует обратить на то, что формат указан как RGB32. Это значит что alpha-канал в формате никак не представлен и, скорее всего, у каждого пикселя будет нулевым т.к. место под него в формате заявлено.

    Далее.
    GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0,
        OpenTK.Graphics.OpenGL.PixelFormat.Rgba, PixelType.UnsignedByte, data.Scan0);

    PixelInternalFormat.Rgba означает что в памяти GPU текстура будет представлена в формате RGBA с каналами float с нормализацией.
    OpenTK.Graphics.OpenGL.PixelFormat.Rgba означает что формат data.Scan0 нужно воспринимать как RGBA, а PixelType.UnsignedByte означает что каналы в data.Scan0 нужно воспринимать как unsigned byte.

    Тут на лицо несовпадение формата считанного из файла изображения и формата создаваемой текстуры. И если размеры и число каналов между форматами совпадают, то трактовка самих каналов - нет. XRGB != RGBA.
    Все нужно привести к единому формату. Например, из файла читать формат Format32bppArgb. Но в этом случае есть вероятность ошибиться с порядком каналов между Format32bppArgb и OpenTK.Graphics.OpenGL.PixelFormat.Rgba.
    Еще, как вариант, можно инициализировать незадействованный канал в исходных данных.

    Одним словом, после чтения из файла, данные будущей текстуры нужно подогнать под желаемый формат текстуры.
    Ответ написан
  • Как совместить 2 языка С++ и C#?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    2. Писать на С++/CLI. Только тут я не понимаю, как их совместить.
    Ну написал я код на С++/CLI, а как мне его в проект , написанный на С# вставить ?


    Этот вариант неплохо разжеван в этих двух вопросах.
    Можно ли совместить в одном проекте программы написанные на разных языках (C++, C#) в VS2012?
    Как динамически подключать библиотеки?

    Этот вариант на деле оказался самым удачным, потому что деление проекта на три части (C++; CLI; C#) так же строго делит и области ответственности. На стороне C# остается только интерфейс, на стороне CLI - только связь с низким уровнем, на стороне C++ - только низкий уровень.
    Целостность кода сохраняется, библиотеку низкого уровня можно с равной легкостью подключить как к библиотеке CLI, так и к другому низкоуровневому проекту.
    Ответ написан
  • Можно ли совместить в одном проекте программы написанные на разных языках (C++, C#) в VS2012?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    https://github.com/FrankStain/tex-conv
    Это пример такого проекта. Многозадачный конвертер текстур.

    На верхнем уровне лежит C# приложение с UI на WinForms, вся работа с пользователем выполнена именно тут.
    К верхнему уровню подключается C++/CLI ядро, представляющее собой библиотеку классов. Это ядро связывает верхний уровень с нижним, который представлен потенциально несчетным набором плагинов.

    Библиотека классов в C# используется как будто это рядовой модуль.

    Конкретно для твоего случая я порекомендую поступить так.
    • Нижний уровень - проект статической библиотеки, в которой будет весь твой C++ код.
    • Средний уровень - C++/CLI библиотека классов, в которую и линкуется нижний уровень, свяжет нижний уровень с верхним через свои классы.
    • Высокий уровень C# приложение, использующее классы среднего уровня.
    Ответ написан
    Комментировать
  • Как устроен игровой протокол передачи данных?

    @MarkusD
    все время мелю чепуху :)
    https://habrahabr.ru/post/209144/
    https://habrahabr.ru/post/209524/
    https://habrahabr.ru/post/213559/

    Оригиналы:
    web.archive.org/web/20190328001900/https://gaffero...

    Дополнительные материалы:
    web.archive.org/web/20190328001900/https://gaffero...

    По этому поводу, в целом, советую почитать блог Гленна Фидлера.

    Так же есть удобные библиотеки, которые сами собой отвечают на остальные твои вопросы:
    https://developers.google.com/protocol-buffers/
    https://capnproto.org/
    Ответ написан
    5 комментариев
  • Какие ЯП не требуют кучу прикладнухи для устройства на работу?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    LUA скриптер может знать только LUA и работать без затруднений.
    Python скриптер может знать только свой ЯП и спокойно работать.

    Уяснить тебе стоит одну очень важную вещь. Один лишь нужный ЯП знать для работы может только скриптер.
    Для разработчика-же крайне важны знания как можно более широкой информационной периферии своей области.
    Ищи игровые студии/компании которым нужны LUA/Python скриптеры. Но запомнить надо еще одну вещь - для очень многих людей это дорога без возврата.
    Ответ написан
    1 комментарий