ЧАТ

Главная
147 Новостей
Новости
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: stblack, Scout, Grohman 
Форум » Garry's Mod » Wire Expression » GPU, CPU (Срываем покровы с данного тула, не такой он и сложный.)
GPU, CPU
Оффлайн
quaquaker
Понедельник, 05.12.2011, 18:19 | Сообщение # 1
Пользователи
Сообщений: 22
3
Я наконец-то добрался до этого тула и понял для чего он нужен, обьясню вкратце.
CPU и GPU это центральный и графический процессор соответственно. Оба работают на языке програмирования ассемблер архитектуры Z.

1. Общие характеристики и с чем эти штуковины едят.

CPU представляет из себя почти полноценный центральный процеесор, такой же как и у всех компов. Он програмируется на ассемблере и представляет из себя чип схожий с Е2. Однако у Е2 и у CPU есть масса различий. Во первых CPU предназначен для вычислений и работы с самодельными компами на ваир моде, то-есть сам по себе он почти никак физически не взаимодействует с окружающим миром. Во вторых CPU быстрее, намноооого быстрее. Для тех кто знает на собственном опыте что язык програмирования С тоже является достаточно быстрый, тоесть на "Hello world" ему требуется 10000 сигналов, но ассемблеру необходимо всего 3000. И наконец третье, GPU это как егп, только туда уже встроен чип и он пишется на ассемблере, а ещё он быстрее и поддерживает 3D.

Ах да, задавайте сюда вопросы, попробую ответить.

2. Где научится? cry

К сожалению я пока не нашёл адекватных туториалов по сабжу, но я могу дать ссылки на некоторые темы на wiremod.com и на документацию на русском языке.

http://brain.wireos.com/wiremod/zcpudoc_ru.html#htoc10 - документация на русском, не путать с самоучебником, ибо здесь нужно знать основы устройства процессора.

http://www.wiremod.com/forum....ie.html - туториал по GPU на английском.

http://www.wiremod.com/forum....al.html - туториал по CPU на английском, хотя автор русский. Я ниасилил cranky

Добавлено (05.12.2011, 18:19)
---------------------------------------------
Вобщем решил я написать вам туториал о ГПУ. Основан он будет на туториале дранка shy , поэтому если вы его тутор уже читали то ничего нового вы не узнаете. Предупреждаю, что желательно знать основы программирования.

1. Основы
И так, начнём с построения программы и типов переменных. Программа строится следующим образом "Действия и условия" dexit "Переменные, константы и т.д.".
Dexit - это команда выхода из программы. В паскале это end.

Переменные бывают 7 типов:

Color - цвет.
String - Текстовое значение.
Vec2f - 2D координаты.
Vec3f - 3D координаты.
Alloc - численная переменная.
Define - константа.
Matrix - матрица для 3D проекции.

Комментарии пишутся после знака "//"
Code
//Комментарий.


после каждой команды кода необходимо ставить ";".

Вот пример правильного кода:

Code
dwrite pos,text;
dexit;
vec2f pos,200,200;
string text,'Text';


Обьясню по порядку:
dwrite - выводит текст, необходимы переменные vec2f и string.
dexit - выход.
vec2f - наша переменная позиции в 2д, цифры пишутся через запятую после названия переменной.
string - текст, пишется 'в таких кавычках'.

2. Переменные и как их использовать.

Color

Для того чтобы использовать переменную нам нужен объект для издевательств. Им будет весь экран.
Для начала надо придать экрану значение цвета. Это будет наша переменная.
Code
Dclrscr green;
dexit;
color green,0,255,0;


После запятой мы расписываем наш цвет в формате RGB.
Таким образом мы получаем зелёный экран.

Vec2f

Тут мы уже будем работать с отдельными объектами. Нам придётся рассмотреть все геометрические фигуры (а мне всё это написать Т_Т) .

И так, вектор задаётся двумя числами, X и Y. Vec2f pos,X,Y;

Для начала рассмотрим прямоугольник. Ему нужно либо 2 вектора, это точки диагоналей, либо один вектор (центр), высота, и ширина. Создаётся он посредством команды drect (2 вектора) или drectwh (1 вектор).

Code
drect pos1,pos2;
dcolor red;
dexit;
vec2f pos1,100,100;
vec2f pos2,200,200;
color red,255,0,0;


И вот, мы получили красный квадрат.

Другие фигуры прописываются так:

Круг - dcircle pos(центр круга),n(вместо n пишем радиус).
Линия - dline pos1(начало),pos2(конец);

Остальные фигуры пишутся с помощью полигонов, но о них позже.

Возьмите на заметку, что по умолчанию разрешение у ГПУ всего 512х512.

String

Перейдём к выводу текста.Вывод текста представляет из себя команду dwrite к которой необходимо присобачить координаты начала писанины,сам текст, цвет, размер и шрифт (последние 2 не обязательны и пишутся перед командой dwrite как и цвет).

Выглядит это следующим образом:

Code
dcolor blue;
dsetsize 16;
dsetfont 4;
dwrite pos,text;
dexit;
color blue,0,0,255;
vec2f pos,256,256;
string text,'Hello world.';


И так, раcберёмся:
dcolor - цвет текста
dsetsize - размер текста
dsetfont - шрифт
dwrite - где и что будет написано.

Насчёт типов шрифта, их всего 8:

0 - Lucida Console
1 - Courier New
2 - Trebuchet
3 - Arial
4 - Times New Roman
5 - Coolvetica
6 - Akbar
7 - csd

Так же вместо текста можно писать цифры.

3. Полигоны и ещё немного о тексте.

И вот мы добрались до вещи которая может сравнятся с ЕГП, а в некоторых аспектах даже превзойти его. Представляю вам полигоны.
Полигоны - это фигуры закрашенные внутри и имеющие неограниченое количество граней. Например это может быть шестиугольник или трапеция или вообще что угодно.

Полигоны прописываются с помощью 3 вещей:
1.Команда создания полигона, в ней надо прописать саму команду, название массива и объём массива. Например так:
Code
dvxdata_2f something,9;

Здесь мы написали саму команду (dvxdata_2f), название массива (something) и его объём (3).

2.Цвет полигона, ну это мы уже проходили.

3. В поле где мы расписываем переменные, мы распишем и наш массив. Для этого нам нужно написать название массива,а затем расписать его значения поочерёдно через команду "db".
Вот пример того что должно быть в конце:

Code
dcolor red;
dvxdata_2f something,9;
dexit;
color red,255,0,0;
something:  
db 150,150; db 40,80; db 70,55; db 300,100; db 200,200; db 405,310; db 70,255; db 370,80; db 400,11;


Каюсь, все числа я взял от балды happy

А что там с текстом?

Массивы можно применять как для полигонов, так и для многого другого, например для написания многострочных тестов. Для этого, когда мы расписываем переменную вместо команды string мы напишем название нашей переменной текста а потом распишем её как массив, с текстом вместо цифр которые у нас были когда мы писали полигоны. Для переноса на следующую строку используйте цифру 10 прописанную через запятую после теста строки.

Пример:

Code
dcolor blue;
dwrite pos,text;
dexit;
color blue,0,0,255;
vec2f pos,0,0;
text:
db 'Give me a kiss to build a dream on',10;
db 'And my imagination will thrive upon that kiss',10;
db 'Sweetheart, I ask no more than this',10;
db 'A kiss to build a dream on';


(Палец вверх за fallout 2 cool )

На экране появится синяя надпись.
Оффлайн
DeMaGe
Понедельник, 05.12.2011, 18:30 | Сообщение # 2
Администраторы
Сообщений: 1216
503
quaquaker, Врядли тебе здесь помогут, Lua кодеров давно на сайте не видно...
Оффлайн
quaquaker
Понедельник, 05.12.2011, 20:59 | Сообщение # 3
Пользователи
Сообщений: 22
3
DeMaGe, а причём здесь LUA? Не забывай что луа и ассемблер два совершенно разных языка. К тому же ассемблер работает с вайром, а луа с игрой.
Оффлайн
DeMaGe
Вторник, 06.12.2011, 08:12 | Сообщение # 4
Администраторы
Сообщений: 1216
503
quaquaker, Я просто не прочитал что ты написал в первом посте, ибо лень.
Оффлайн
quaquaker
Вторник, 13.12.2011, 12:35 | Сообщение # 5
Пользователи
Сообщений: 22
3
К сожалению я больше не могу редактировать пост который находится выше, вот некоторые косяки которые мне хотелось бы исправить:

1. drectwh пишется с использованием двух векторов. Один из них позиция верхнего левого угла, а другой высота и ширина, X - ширина, Y - высота.
2. В тексте перед dwrite всегда пишите цвет.

Скоро будем работать с синхронизацией Е2 и работать с данными, ждите happy

Добавлено (08.12.2011, 10:29)
---------------------------------------------
Нус, начнём.

Часть 2. Данные

1. Синхронизация с Е2.

Во первых стоит рассказать о принципе работы. На ГПУ можно задавать значение на порт, с которого в свою очередь информация передаётся на Е2, там она обрабатывается и выдаётся обратно через вайрлинк.

Вы можете задать значение порта вместо одной из переменных и таким образом работать одновременно с двумя чипами.
В свою очередь в е2 надо прописать вход GPU:wirelink и с его помощью уже работать с ГПУ.
Вот пример кода для передачи текущего времени на ГПУ с Е2.

GPU:

Code
dcolor blue;
dsetsize 10;
dsetfont 2;
dwrite pos,#64000;
dexit;
color blue,0,0,255;
vec2f pos,200,256;


Символ "#" нужен для того чтобы обозначить что нам нужны именно данные с данного порта, а не цифра 65000. Dwritei это как обычный dwrite, только предназначен он для работы с числами и выводит только целые значения.
Район используемых портов от 63488 до 64511
А вот Е2 код:

Code
@inputs GPU:wirelink
GPU[64000]=curtTime()


Добавлено (13.12.2011, 12:35)
---------------------------------------------
К сожалению я опять ошибся, но ошибку исправить уже не могу. Надо писать не dwrite а dwritei, таким образом будет выдаваться целочисленное значение. Нусь, перейдём к процессам изменения переменных в самом ГПУ.

2. Mov

Оператор MOV даёт нам право изменять значение переменной, даже если она состоит из множества значений. Например это можно использовать для создания движущихся объектов, передавая значения координат с Е2 через порты. Цвета тоже входят в их число.
Немного теории, для начала нам понадобится написать сам оператор, а затем ввести часть переменной которая будет изменятся, так же надо расписать тип переменной, иначе никак. Например:

Code
dcolor green;
dcircle N,20;
mov N.x #63488;
mov N.y #63489;

dexit;

color green,0,255,0;
vec2f N;


А вот для Е2:

Code

@name test
@inputs GPU:wirelink X Y
GPU[63488]=X
GPU[63489]=Y


Подаём на X, Y значения координат. Таким образом мы задаём положение круга.
Форум » Garry's Mod » Wire Expression » GPU, CPU (Срываем покровы с данного тула, не такой он и сложный.)
Страница 1 из 11
Поиск: