Использование OpenGl с C#? [закрытый]

В знаковых 6-битных двоичных двоичных символах дополнения значения битов:

-32  16   8   4   2   1

Обратите внимание, что старший бит имеет отрицательное значение. Однако, когда сложение, вычитание и умножение выполняются по модулю 64, этот знак минус абсолютно не влияет на то, как работают эти операции, потому что 32 = -32 мод 64.

Ваше умножение не выполняется мод 64, однако, так что знак должен быть принят во внимание.

Один способ думать о вашем умножении состоит в том, что 6-битные числа расширяются до 12 битов, а затем выполняется умножение по модулю 4096. При расширении числа со знаком старший бит реплицируется, поэтому -32 становится -2048 + 1024 + 512 ... +32, которые вместе имеют одинаковое значение -32. Так что расширьте числа со знаком и умножьте. Я сделаю это с 3 битами, умножив мод 64:

Given:         Sign-extended:
A2 A1 A0       A2 A2 A2 A2 A1 A0
B2 B1 B0       B2 B2 B2 B2 B1 B0

Multiply:
A0B2    A0B2    A0B2    A0B2    A0B1   A0B0
A1B2    A1B2    A1B2    A1B1    A1B0        
A2B2    A2B2    A2B1    A2B0
A2B2    A2B1    A2B0
A2B1    A2B0
A2B0

Поскольку мы реплицировали одни и те же биты в нескольких позициях, вы увидите одинаковые битовые продукты в нескольких позициях.

A0B2 появляется 4 раза с общим значением места 60 или 15 < 2 и т. Д. Давайте запишем множители в:

                        A0B2*15 A0B1   A0B0
                A1B2*7  A1B1    A1B0        
        A2B2*5  A2B1*7  A2B0*15

Опять же, из-за модульной арифметики, * 15s и * 7s такие же, как * -1, а * 5 совпадает с * 1:

                       -A0B2    A0B1   A0B0
               -A1B2    A1B1    A1B0        
        A2B2   -A2B1   -A2B0

Эта модель начинает казаться знакомой. Теперь, конечно, -1 не является битовым значением, но ~ A0B2 = 1-A0B2, поэтому мы можем перевести -A0B2 в ~ A0B2 и затем вычесть дополнительный 1, который мы добавили. Если мы сделаем это для всех вычитаемых произведений:

                       ~A0B2    A0B1   A0B0
               ~A1B2    A1B1    A1B0        
        A2B2   ~A2B1   ~A2B0
                 -2       -2

Если мы сложим значения мест этих -2 и расширим их в эквивалентные биты, мы обнаружим источник дополнительных 1 на вашей диаграмме:

                       ~A0B2    A0B1   A0B0
               ~A1B2    A1B1    A1B0        
        A2B2   ~A2B1   ~A2B0
   1              1
117
задан Vallentin 23 April 2017 в 04:30
поделиться

6 ответов

дао , как предполагается, является хорошей платформой.

От их сайта:

Платформа дао для.NET является набором привязки для упрощения межплатформенной разработки мультимедийного приложения, использующей.NET и Моно платформы.

15
ответ дан Jonathan 24 November 2019 в 02:08
поделиться

Я также рекомендовал бы Платформа дао . Но одно дополнительное примечание:

Смотрят на эти учебные руководства: http://www.taumuon.co.uk/jabuka/

7
ответ дан Vallentin 24 November 2019 в 02:08
поделиться

Что хотели бы Вы эти вспомогательные библиотеки делать? Просто использование OpenGL от C# достаточно просто и не требует никаких дополнительных библиотек afaik.

4
ответ дан korona 24 November 2019 в 02:08
поделиться

Я думаю, что имел в виду @korona, поскольку это всего лишь C API, вы можете использовать его прямо из C #, набрав столько текста, как это:

[DllImport("opengl32")]
public static extern void glVertex3f(float x, float y, float z);

К сожалению, вам понадобится сделайте это для каждой вызываемой вами функции OpenGL, и в основном это то, что Tao сделал для вас.

16
ответ дан 24 November 2019 в 02:08
поделиться

XNA 2.0 требует минимум карты шейдера 1.1. Это старая технология, но она есть не у всех. Некоторые новые ноутбуки (по нашему опыту планшеты Toshiba с графикой Intel) не поддерживают шейдер 1.1. XNA просто не будет работать на этих машинах.

Это серьезная проблема для нас, и мы перешли на Tao и OpenGL. Кроме того, с Tao у нас есть привязки для поддержки аудио и Lua.

1
ответ дан 24 November 2019 в 02:08
поделиться

OpenTK является улучшением по сравнению с API Tao, поскольку он использует идиоматический стиль C # с перегрузкой, строго типизированные перечисления, исключения и стандартные типы .NET:

GL.Begin(BeginMode.Points);
GL.Color3(Color.Yellow);
GL.Vertex3(Vector3.Up);

в отличие от Tao, который просто отражает C API:

Gl.glBegin(Gl.GL_POINTS);   // double "gl" prefix
Gl.glColor3ub(255, 255, 0); // have to pass RGB values as separate args
Gl.glVertex3f(0, 1, 0);     // explicit "f" qualifier

Это затрудняет перенос, но невероятно удобен в использовании.

В качестве бонуса он обеспечивает рендеринг шрифтов, загрузку текстур, обработку ввода, аудио, математику ...

Обновить 18.1.2016 : Сегодня сопровождающий OpenTK отказался от проекта , оставив его будущее неопределенным. Форумы забиты спамом. Сопровождающий рекомендует перейти на MonoGame или SDL2 #.

125
ответ дан 24 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: