четверг, 9 октября 2014 г.

Сome back?

Пару месяцев назад, хотя - нет, я всегда хотел вернуться к блогу. Так вот пару месяцев назад я даже обновил на нём дизайн, но увы руки никак до него не доходили. Я  не знаю интересно ли расписывать что и как я сделал за этот год, потому что сделано было действительно много, что и забывался за то, что у меня есть блог. Сейчас я не готов утверждать, что начну активно вести его, но пока у меня нету достаточно хорошего портфолио, будет интересно поделиться своими мыслями здесь.
На этом у меня всё. До скорой встречи, lev@n.

воскресенье, 28 июля 2013 г.

Welcome Back...

Давненько я ничего не писал в блоге. Да и плюс ко всему этому, попросту не было времени в связи с экзаменами и вступительной компанией в институт.Тем не менее у меня появилась свободная минутка для публикаций в блоге.

3DS Max ; UVW ; Photoshop:
Адская смесь, но когда то, года два назад, два последних термина для меня были не постижимыми понятиями. Скажем так любому начинающему 3d-шнику, приходится с трудом понимать,как 3d модель разложить 2d поверхность, и подогнать под текстуру или наоборот. В моём случае, всё было также.

Но всё в один момент изменилось, когда я нашёл видео курс под названием
"Специалист 3DS Max" от  Эпова Дмитрия Андреевича. Приблизительно за неделю я начал понимать, как работать с развёрткой и вот результат моей первой, так скажем осведомлённой работы:


















Работа для компании Ilogos. UVW+ Текстура.
Так, как у меня было мало опыта, работа может показаться мрачной и отталкивающиеся.
Но на этом я её просто так не оставил.

После работы над этой моделью, я сосредоточился на набивании скилла, на более простых по форме моделей, для примера сойдёт модель лавочки возле моего дома:


Оригинал:


Модель + Сетка:

Развёртка:
 
Как можно заметить, на данной модели для сложных форм, я применял ленточный маппинг,
который при выделении рёбер круглых форм, распрямляет их на поверхности одним нажатием кнопки.Но вмешательство человека присутствует всё равно, ибо распрямлением не идеальное.

Final Render:

На данную работу я потратил 5-6 часов.(Одна ночь)
10 чашек кофе и половину пачки сигарет Camel.


Также, я вернулся за работу над The Revenge. Помимо вышеперечисленного пытаюсь уделять время на прокачивании рисунков, и изучение других движков.
Нубский скетч, сделанный на уроке истории.

Его приблизительная реализация:

Заготовки первой сцены на Unity.


А это UDK:
До, которого я ещё так и не добрался помимо кубика.

Подведём итоги:
За одну неделю изучения видео лекций, можно хорошенько набить руку в 3d пакетах: 3ds max и Photoshop. Главное иметь желание всё это выучить, так как курс по продолжительности занимает ~30 часов, что не каждому под силу выдержать. И всё же, кому интересно: 
Моей рекомендации, данного преподавателя нет предела. То чего я пытался добиться 2-3 года, я достиг за неделю.

Начинаем делать успехи, в осваивании гитары

Мам, это моя новая девушка, и теперь она будет жить с нами.

Пока, что на этом всё. До скорой встречи.

понедельник, 13 мая 2013 г.

Работы 2010 года

Спасибо Витёк Ляхович за предоставление моего билда 2010 года. В нём как оказалось всё ещё остались все мои работы. Миф о том, что я не сделал ни одной карты, разрушен.








среда, 1 мая 2013 г.

Переменные и константы [Третья часть]

Последняя часть из занятия "Переменные и константы".
Ну что ж приступим.

Константы:
Подобно переменным, константы представляют собой ячейки памяти предназначенные для хранения данных. Но в отличии от переменных, константы не изменяют значения!
Создаваемую константу нужно инициализировать, поскольку её значение позже изменить нельзя!
Литеральные константы:
Это значение, непосредственно вводимое в самой программе.
Например:
int myAge = 39;

myAge является переменной типа int, а число 39 - литеральной константой.
Нельзя присвоить никакое значение константе 39.

                                                          Символьные константы:
Константа, представленная именем. Однако в отличии от переменной , значение ин
инициализированной константы изменить нельзя.
Если в программе есть одна целочисленная переменная с именем students, а другая с именем classes, можно вычислить общее количество учеников школы при условии, что известно сколько классов в школе и сколько учеников в каждом классе.

students = classes * 15;
В этом примере 15 , является литеральной константой. Но если её изменить символьной то можно легче читать и изменять в будущем.

students = classes * studentsPerClass
Если впоследствии потребуется изменить количество участников в каждом классе, можно сделать это единожды в той строке программы, где определяется константа.

studentsPerClass
И тогда  придётся вносить изменения в каждую строку программы, где используется это значение.

Объявление константы:
В языке С++ существует два типа определения константы традиционый и ныне уже устаревший #define.

1)#define studentsPerClass 15;
Переменная не имеет типа (int, char, и т.д.), а директива выполняет простую текстовую подстановку.Каждый раз, когда препроцессор встраивает слово studentsPerClass, он заменяет его литералом 15.

2)const
const unsigned int  studentsPerClass = 15;
Этот способ имеет ряд примуществ.Есть тип и компилятор может проследить за использованием только непоназначению.(т.е. В соответствии с объявлённым типом.).

Константы перечислений:
Перечесления позволяют создавать новые типы данных, а затем определять переменные этих типов,  значения , которых ограниченны набором константных значений.
Для создания перечисления используется ключевое слово enum , за которым следует имя типа, открывающаяся фигурная скобка, список константных значений разделённых запятыми и закрывающая фигурная скобка.

enum COLOR { RED, BLUE, GREEN, WHITE, BLACK };
Это выражение выполняет две задачи:
  1. Создаёт перечисления с именем COLOR, являющаяся новым типом.
  2. Определяются символьные константы: RED со значением 0; BLUE со значением 1; GREEN со значением  2 и т.д.
Каждой константе перечисления соответствует значения. По умолчани. первая константа инициализируется значением 0, а каждая следующая значением на единицу больше предыдущего.
Однако любую константу можно инициализировать произвольным значением, а в этом случае не инициализрованные константы будут продолжать возрастающую последственность:
Например:
  
enum COLOR { RED= 500 , BLUE, GREEN = 700 , WHITE, BLACK = 1000 };
Следовательно значение BLUE будет равно 501, a White- 701.

Теперь можно определить переменные типа COLOR, но каждой из них можно присвоить только одно из перечисляемых значений.Переменной COLOR можно присвоить любое из значений, даже если оно не соответствует ни одному из разрешённых цветов, но в этой случае компилятор должен показать предупреждение.
Важно помнить, что переменные перечисления на самом деле имеют тип.
unsigned int и целочисленными переменными присваиваются заданые константы перечесления.
Однако при работе с цветами и днями недели и другими подобными наборами значений, несложно иметь возможность называть эти значения по имени.

В строке 4 определяется перечисления DAYS с семью константными значениями.Все они образуют последовательность чисел, начиная с нуля; таким образом значения Вторника = 2.
Такого же перечисления можно сделать используя константы целочисленного типа.
Const int Sunday = 0;
   Const int Monday = 1;
Const int Tuesday = 2; 

 Вывод:
На этом занятии я рассматривал числовые и символьные значения переменных и констант.
Числовые переменные могут быть ( char, short, long int) либо вещественными (Float и Double).
Кроме того они могут быть знаковые и без знаковые( unsigned ). Хотя на разных компьютерах все эти типы могут иметь разные размеры, но на одном компьютере, переменные одного и того же типа всегда имеют постоянный размер.
Переменную нужно объявить до её использования. При работе с данными необходимо следить, чтобы тип данных соответствовал объявленному типу переменной. Если поместить слишком большое число в целую переменную возникает переполнение, которое приводит к приводит к нулевому результату. 
Кроме того мы познакомились с литеральными, символьными и перечисленными константами, а также с двумя способами объявления символьных констант.

На этом конспектирование  по переменным и константам законченно.
На конспект у меня ушло три дня и тетрадка на 36 листов. Считайте это сжатое изложение материала в три части. На этом пожалуй и всё. Меня ждёт изучения операторов.

Источник: Книга "Освой самостоятельно С++ за 21 день" (Джесс Либерти)

Переменные и константы [Вторая часть]

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

Создание несколько перемен одинакового типа:
В языке С++ предусматривается возможность создания в строке программы сразу несколько переменных одного типа. Для этого стоит указать тип, за которым перечисляются имена переменных, разделённые запятыми.
Например:





Присваивание значения:
Для этого используется оператор ( = ) . Так, чтобы присвоить число 5 , переменной Width, нужно записать следующее :

unsigned short Width;
Width = 5;

Теперь, эти две строки переведём одну и инициализируем переменную Width в процессе определения:

unsigned short Width = 5;

Инициализация напоминает присвоение особенно в случае целочисленных переменных. В следующем посте, при рассмотрение констант, можно узнать, что некоторые значения обязательно должны быть инициализированы, поскольку по отношению к ним нельзя выполнить операцию присваивания. Существенное отличие инициализации в том, что она проходит в момент создания переменной.Подобно тому, как можно определять несколько переменных, можно и инициализировать сразу несколько переменных, при их создании.
Например:

// Создаём две переменных типа long и инициализируем их
 long width = 5, lenth = 7;

При определении нескольких переменных, можно инициализировать только некоторые из них
Например:
 int myAge = 39, yourAge, his Age = 40;

В этом примере инициализируется  только первая и третья переменная.

Создание псевдонима типа:
unsigned short int
В С + + предусмотрена возможность создания псевдонима, для этой фразы путём использования ключевого слова typedef, которое означает определения типа.
Чтобы создать псевдоним типа данных, нужно сначала записать ключевое слово typedef, за которым следует существующий тип, а за ним новое имя с символами и запятой.
Например:
typedef unsigned short int USHORT

Создаётся новое имя, которое можно использовать везде где нужно определить переменную unsigned short int.


 
















Сделаем анализ листинга:
В строке 5 идиентификатор USHORT с помощью ключевого слова typedef определён, как псевдоним типа unsigned short int.

В каких случаях использовать long и short думаю было понятно из предыдущей части.
Но всё таки разъясним этот вопрос детально.
  1. Если существует хоть малейший шанс того, что значение будет слишком большим для предполагаемого типа, нужно использовать тип с большим размером данных.
  2. Float и Double могут хранить очень большие значения вплоть до 19 цифр, после округляеться.
Переменные с меньшим значениям используют меньший объём памяти.
Самый оптимальный тип для значений:
int = 4 bytes.

Переполнение без знаковых и знаковых чисел:
Когда без знаковое число достигает своего максимального значения при очередном инкременте(прибавлении) оно сбрасывается в нуль и отсчёт начинается сначала.


 Сделаем анализ данной программы:
В строке 4 объявляется переменная smallNumber типа unsigned short int, которая способна хранить значения от 0 до 65535. В строке 5 присваивается максимальное значение,которое в строке 6 выводится на экран. В строке 7 переменная smallNumber увеличивается на один, с помощью оператора проращивания (++).
Однако тип переменной не позволяет хранить число больше 65535, поэтому сбрасывается на ноль, который и выводится в строке 8.
В строке 9 вновь увеличиваем значение переменной и получаем значение 1;

А вот знаковые числа отличаются от без знаковых тем, что половина этих значений всего диапазона- отрицательные. При выводе за пределы максимального положительного, принимает минимальное отрицательное значение:
Например:

Ну и последнее, что  я законспектирываю;
Переменная char, взаимосвязь между числом и буквой:
Переменная char интерпретируется в диапазоне между 0 и 255. Всем прописным и строчным буквам присвоены значения от 0 до 128.
Нужно понимать разницу между значением 5 и символом "5". Это большая разница.
Символу 5 соотвествует значение 53, так же как букве "а" -97.

Также компилятор распознаёт специальные символы для форматирования текста. 
Чтобы вставить эти символы используется обратный слеш " \ ".

\ - обратный слеш.
\t - символ табуляции.

В этой таблице данны примеры символов форматирования текста:









На этом вторая часть законченна. В следующей части законспектируем понятия о константах.







Не смотря на достаточно большой объём материала и ларенгит я всё таки выучил что из себя представляет переменная и константа в С++ и сегодня хочу законспектировать этот метериал в электроном виде.

p.s. Данные записи я размещаю не для того, чтобы как то увысить своё чувство чрезмерного
само возвышения. Всё делается для пользы себе и тем кому интересно.

Переменные и константы.

Сегодня я конспектирую в электроном варианте:
  1. Как объявлять и определять переменные и константы
  2. Как присваивать значения переменным и использовать их в программе
  3. Как выводить значения переменных на экран.
Переменная представляет из себя, как ячейка памяти компьютера в которой можно хранится
некоторые значения, доступные для использования в программе.
Память компьютера можно рассматривать, как ряд ячеек.Все ячейки последовательно пронумерованы.Эти номера номера называются- адреса памяти. Переменная занимает
одну или несколько ячеек, в которых можно хранить одну или несколько значений.









Резирвирование памяти:
При объявлении переменой необходимо предоставить компилятору информацию о её типе.
Например: int , chart , bool , float. или другого типа. Благодаря этой ифнормации будет известно
сколько памяти необходимо зарезирвировать для неё и какого рода значение будет храниться 
в этой переменной.
Каждая ячейка имеет размер в один байт! Если для переменой указанного типа требуется четыре байта , то для неё будет выделенно четыре ячейки. То есть имеено по типу переменной 
компилятор судит о том, какой объём памяти (сколько ячеек) нужно зарезирвировать для этой переменной.

Размер целых:
Для переменных одних и тех же типов на компьютерах разных видов- марок выделяется разный объём памяти, в то же время в пределах одного компьютера две переменные одинакового типа будет иметь постоянный размер.

 
Каждый тип занимает своё количество байтов (ячеек) в памяти. Но на разных компьютерах значения могут не много отличаться.Для того чтобы узнать сколько памяти занимает занимает определённый тип можно воспользоваться данной программой:













Знаковые и без знаковые числа:
Целочисленные переменные в программе могут быть знаковыми и без знаковыми.
Иногда бывает полезно установить для переменной использование только положительных чисел.Целочисленные типы (short и long ) без ключевого слова unsigned считаются знаковыми.
Проще говоря:
Знаковые числа- это те числа , которые могут быть и положительные и отрицательные.
Без знаковые числа - это те числа, которые могут быть только положительные.

Важно! Поскольку, как для без знаковых , так и для знаковых целочисленных отводится одно и тоже кол-во байт, то максимальное число, которое можно хранить в без знаковом целом, вдове превышает положительное число, которое можно хранить в знаковом.
Например:

Тип unsigned short int может обрабатывать числа в диапазоне 0 - 65535.
В тоже время, как просто short in может обрабатывать числа в диапазоне от
-32 768 - 32 767.

В языке с++ предусмотренны и другие типы переменных:
  1. Целочисленные ( например 1 ; 2; 3)
  2. Вещественные  ( с плавающей точкой)
  3. Символические- занимают один байт памяти и используются для хранения 
     256 символов и знаков ASCII.















Определение переменной:

Чтобы создать или определить переменную нужно:
Указать тип, за которым ( после одного или двух пробелов ) следует её имя, завершающееся
точкой с запятой.
Например: unsigned short int myAge;
Для имени можно использовать любую комбинацию букв. Главное что бы, было понятно
за что отвечает переменная.
Важно знать то , что язык С++ чувствителен к регистру букв:
age , Age , AGE - это три разных переменных.

Ключевые слова 
If , while , for, main , sizeof  - эти слова ключевые и не могут быть использованы в имени переменной.

 В этой записи законспектированы базовые понятия об переменных.
Дабы не сбить с себя с толку,  расширенные переменные законспектирую в следующем посте.