ria pc game
translate to English   translate to Chinese
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
22 февраля 2019 21:25
Вход Регистрация Забыли пароль ?

megainformatic - Макет дизайна Вашего сайта
     
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - уроки Photoshop free

megainformatic cms express

megainformatic cms express

megainformatic cms express

megainformatic cms express files

megainformatic - Методы создания растровых изображений в Adobe Photoshop

megainformatic - Создание фотореалистичной текстуры травы

megainformatic - Рабочее пространство Adobe Photoshop

megainformatic - Бесшовные (тайловые) текстуры

megainformatic - Создание изображений огня, воды, неба

megainformatic - Создание текстур горных пород и суши (урок 5)

megainformatic - Рисование персонажей (урок 6)

megainformatic - Рисование фона (урок 6 часть 2)

megainformatic - Рельефные изображения

Добавление статей на сайт под управлением megainformatic cms express

megainformatic - Воспроизведение файлов в форматах it, xm, s3m, mod

megainformatic - Воспроизведение файлов в форматах it, xm, s3m, mod - страница 2

megainformatic - Воспроизведение в игре музыки в формате XM

megainformatic - Воспроизведение файлов в формате OGG Vorbis

megainformatic - игра "Веселый Буквоежка" - инструменты разработки

megainformatic - Игра "Веселый Буквоежка" - история создания проекта

megainformatic - Как анимировать паука ?

megainformatic - Уроки Photoshop

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Купить Уроки Photoshop - Рисуем и Анимируем

megainformatic - Эмулятор игры Ну, Погоди!

сайт megainformatic - Говорящий Комикс Веселый Буквоежка

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - Моделируем девушку в 3d используя 3ds max

megainformatic - Уроки Fruity Loops Studio - пишем свою музыку

megainformatic - Уроки Fruity Loops Studio - пишем свою музыку - урок 1 - Быстрый старт

megainformatic - Сброник статей по дизайну и компьютерной графике. Обзор.

megainformatic - Уроки 3d на delphi directx - Вывод Заставки

Добро пожаловать в систему управления сайтом megainformatic cms

megainformatic - Создание эскиза и макета страницы сайта

megainformatic - Верстка созданного макета

megainformatic - Добавление модулей обеспечивающих минимально необходимый функционал

megainformatic - Основы добавления контента на сайт, управления и поддержки сайта

megainformatic - Проверка работы сайта, установка на хостинг

megainformatic - Основы продвижения созданного сайта

megainformatic - Создание шаблонов

megainformatic - Создание интернет-магазина

megainformatic - Музыкальные миры - композиция Морозное утро - 10 версий

ЛЕТО

megainformatic - Нечто Необъяснимое - пре релиз

megainformatic cms admin

megainformatic cms admin

megainformatic - Основы создания 3d игр - проект Тайны Морских Глубин

megainformatic - уроки delphi directx 8.1 3d - Основы Вращений и Управления камерой

megainformatic cms seo

megainformatic cms admin

megainformatic - Моделируем девушку в 3d - Подготовка 2d-эскиза тела человека

megainformatic cms stat kit

megainformatic cms seo

megainformatic - Теория и практика 3d игр - О Кватернионах

megainformatic - Теория и практика 3d игр - Основы теории векторов

подробнее

     
  Уроки Photoshop  
     
  Рисуем волка из мультфильма  
     
  30/10/2008  
     
 

Как нарисовать персонажа в Photoshop?

Попробуем изобразить вот такого волка -

 
     
   
     
  [щелкнув по изображению раскрашенного волка можно открыть вариант в натуральную величину]  
     
  [к началу] [страница 2] [страница 3] [страница 4]  
     
  Следующее затруднение, которое у Вас возникнет заключается в следующем:  
     
   
     
  Когда Вы будете заливать области представленные замкнутыми контурами, например глаза, как на этом рисунке, то после выполнения заливки заметите, что вдоль краев осталась незакрашенная область. Она объясняется тем, что контуры выполнялись кистью с нежесткими, полупрозрачными краями. Устранить это можно подрисовав края кистью вручную или применением эффекта перехода (Blending) представленного обводкой (Stroke) -  
     
  Выберите слой с заливкой глаз и щелкните в панели слоев по нему правой кнопкой мыши, в появившемся контекстном меню выберите Blending Options -  
     
   
     
  в открывшемся окне щелкните пункт stroke  
     
   
     
  вместо красного цвета обводки задайте белый, размер обводки уменьшите до 2 пиксель -  
     
   
     
  обратите внимание - для отображения параметров эффекта Stroke нужно не только поставить галочку напротив данного пункта, но и сделать, чтобы он был выделен также как на рисунке.  
     
  После применения эффекта обводки Вы увидите в панели слоев появление пункта обозначающего применение эффекта. В дальнейшем Вам потребуется работа с изображением в таком виде, чтобы эффекты были растрированы, т.е. превращены из эффектов в пиксели изображения. Чтобы превратить эффект в растровое изображение достаточно создать пустой слой, связать этот пустой слой со слоем, в котором мы хотим растрировать эффекты и выполнить склеивание связанных слоев.  
     
   
     
   
     
  Для связывания слоев достаточно щелкнуть мышью в пустом окошке напротив слоя (см. рисунок выше - обведено зеленым).  
     
  После этого пункта эффекта в названии слоя исчезает, а сам эффект становится частью изображения, как будто Вы изобразили его сами. Т.е. полученное можно обрабатывать дальше - прорисовывать, улучшать, добавлять новые эффекты и т.п.  
     
  Теперь переходим к работе со свето-тенью. Всё что Вам потребуется - это новые слои, расположенные под слоем с контурами, но над слоями с раскраской, кисть различной степени прозрачности и оттенки цветов которые Вы уже применили при раскрашивании.  
     
  Используя более светлые оттенки чем основные Вам нужно нарисовать у волка участки, которые имеют блик или лучше освещены. Используя более темные оттенки Вы изобразите соответственно тени.  
     
  Вот что у Вас примерно должно получиться -  
     
   
     
  Теперь рассмотрим как это выполнить  
     
  Создаем новый слой и располагаем его так, чтобы он находился над слоями с раскрашенными элементами, но под слоем с контурами -  
     
   
     
  Выберите инструмент кисть и сделайте у нее нежесткие края и меньшую непрозрачность -  
     
   
     
  На новом созданном слое, например под именем body_shadows начинаем рисовать тени. Цвет теней можно задать следующим образом:  
     
  Наводим курсор кисти на участок изображения, с которого хотим взять цвет и нажав клавишу [Alt] превращаем кисть в пипетку. Пипетка служит для взятия цвета пикселя под ее курсором. После этого в окне диалога выбора цвета делаем из выбранного более темный цвет -  
     
   
     
   
     
   
     
   
     
  Теперь используя выбранный цвет рисуем тени. Области для рисования теней показаны на рисунке ниже -  
     
   
     
  Т. е. предположив, что источник освещения находится слева и над головой волка в соответствии с этим изображаем тени на футболке - от рук, от головы. Кроме того тени могут быть во впалых участках тела. По аналогии с этим рисуются и светлые участки и блики, для светлых участков цвет соответственно должен быть светлее основного тона раскрашиваемого элемента (см. рисунок) или вообще используйте белый цвет или близкие к белому оттенки серого.  
     
  После того, как Вы закончите волк будет готов!  
     
  Если Вы всё поняли и у Вас всё получилось, то можно двигаться дальше - выполнить анимирование волка, например нарисовать анимацию хотьбы.  
     
  Об этом рассказано дальше  
     
     
     
     
     
     
     
     
  [назад] [далее]  
     
  [Все уроки]  
     
подробнее

     
 
megainformatic cms free

Быстрая и Компактная Система Управления Вашим Сайтом - megainformatic cms express files

megainformatic cms express files - это простое, быстрое и очень компактное решение для создания первого вашего сайта. НЕ ИСПОЛЬЗУЕТ базы данных mysql. Вместо этого используются файловые базы данных. Поэтому Вы можете использовать систему даже на хостинге с поддержкой php, но без поддержки баз данных my sql.

Очень проста в установке - достаточно вам скопировать все файлы на ваш хостинг и сайт готов к работе !!!

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

Стоимость: 100 руб.

 
     
 

Быстрая и Компактная Система Управления Вашим Сайтом - megainformatic cms express files

Особенности:

- очень компакта и быстра в работе и развертывании сайта;

- открытый исходный код на php;

- быстрая и простая установка;

- подробное описание возможностей;

 
     
 

Чтобы создать свой сайт быстро и легко - приобретите megainformatic cms express files всего за 100 рублей, получите дистрибутив, распакуйте его и скопируйте полученные файлы на свой хостинг.

Ваш сайт готов к работе !!!

 
     
  Для добавления новых статей на ваш сайт - достаточно выложить файл контента в нужную папку, например papers/my_paper1  
     
 

А затем добавить описание в файл data/papers.csv для этой статьи.

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

Модули поиска и карты сайта автоматически собирают информацию о добавленных статьях из файла статей.

 
     
 

Если возможности megainformatic cms express files, вам кажутся ограниченными и Вы хотите чего-то большего - обратите внимание на следующие продукты -

megainformatic cms e-pro

 
     
  megainformatic cms e-shop  
     
  megainformatic cms e-mailer  
     
  Удачи вам в создании собственного виртуального интернет-пространства !!!  
     
     
     
подробнее

Создание простейшей нейросети на примере распознавания цифр

нейронная сеть перцептрон

Данная статья основана на статье -

Глава 4. Персептроны

В статье объясняется понятие элементарной нейросети, персептрона и принципов
её создания на конкретном примере - программы для распознавания
цифр от 0 до 9.

Пример программы представлен на языке python.

Я привожу пример этой же программы, но на языке php, так что вы можете
увидеть результат её работы прямо здесь - на данной странице
в вашем браузере.

Результат работы программы: (при каждом обновлении страницы результат будет варьировать).

количество итераций: 10000

Вывод значений весов

0 2 0
1 0 -4
0 0 0
-3 0 1
2 2 0


обучение сети:

0 это 5? 0
1 это 5? 0
2 это 5? 0
3 это 5? 0
4 это 5? 0
6 это 5? 0
7 это 5? 0
8 это 5? 0
9 это 5? 0


тестирование сети:

Узнал 5? 1
Узнал 5 - 1? 1
Узнал 5 - 2? 1
Узнал 5 - 3? 1
Узнал 5 - 4? 1
Узнал 5 - 5? 0
Узнал 5 - 6? 1




Ниже привожу полный исходный код программы на языке php.

	// Цифры (Обучающая выборка)
	
	$num0 = '111101101101111';
	$num1 = '001001001001001';
	$num2 = '111001111100111';
	$num3 = '111001111001111';
	$num4 = '101101111001001';
	$num5 = '111100111001111';
	$num6 = '111100111101111';
	$num7 = '111001001001001';
	$num8 = '111101111101111';
	$num9 = '111101111001111';
	
	//Список всех вышеуказанных цифр
	
	$nums = array($num0, $num1, $num2, $num3, $num4, $num5, $num6, $num7, $num8, $num9);
	
	//# Виды цифры 5 (Тестовая выборка)
	
	$num51 = '111100111000111';
	$num52 = '111100010001111';
	$num53 = '111100011001111';
	$num54 = '110100111001111';
	$num55 = '110100111001011';
	$num56 = '111100101001111';
	
	//Инициализация весов сети
	
	global $weights;
	
	$weights = array();
	
	for ( $i = 0; $i < 15; $i++ )
	{
		$weights[$i] = 0;
	}
	
	//Порог функции активации
	
	global $bias;
	
	$bias = 7;
	
	//Является ли данное число 5
	
	function proceed($number)
	{
		global $weights;
		global $bias;
	
		$net = 0;
		
		for ( $i = 0; $i < 15; $i++ )
		{
			$net += intval($number[$i]) * $weights[$i];			
		}		
		
		//превышен ли порог ?
		return $net >= $bias;
	}
	
	//Уменьшение значений весов, если сеть ошиблась и выдала 1
	
	function decrease($number) 
	{
		global $weights;	
	
		for ( $i = 0; $i < 15; $i++ )
		{
			if ( intval($number[$i]) == 1 )
			{
				$weights[$i] -= 1;
			}
		}
	}
	
	//Увеличение значений весов, если сеть ошиблась и выдала 0
	
	function increase($number) 
	{
		global $weights;
	
		for ( $i = 0; $i < 15; $i++ )
		{
			if ( intval($number[$i]) == 1 )
			{
				$weights[$i] += 1;
			}
		}
	}
	
	/*
	# Тренировка сети
	for i in range(10000):
    # Генерируем случайное число от 0 до 9
    option = random.randint(0, 9)
 
    # Если получилось НЕ число 5
    if option != 5:
        # Если сеть выдала True/Да/1, то наказываем ее
        if proceed(nums[option]):
            decrease(nums[option])
    # Если получилось число 5
    else:
        # Если сеть выдала False/Нет/0, то показываем, что эта цифра - то, что нам нужно
        if not proceed(num5):
            increase(num5)
	*/
	
	//инициализируем генератор случайных чисел
	srand((double) microtime() * 1000000);
		
	//выполняем тренировку сети
	for ( $i = 0; $i < 10000; $i++ )
	{
		//Генерируем случайное число от 0 до 9
		$option	= rand(0, 9);
		
		//Если получилось НЕ число 5
		if ( $option != 5 )
		{	
			//Если сеть выдала True/Да/1, то наказываем ее
			if ( proceed($nums[$option]) )
				decrease($nums[$option]);	
		}
		else {
		//Если получилось число 5
		
			//Если сеть выдала False/Нет/0, то показываем, что эта цифра - то, что нам
			//нужно
			if ( !proceed($num5) )
				increase($num5);
		}
	}
	
	//Вывод значений весов
	
	$c = 0;
	for ( $i = 0; $i < count($weights); $i++ )
	{
		echo $weights[$i].' ';
		$c++;
		if ( $c == 3 )
		{
			$c = 0;
			echo '<br>';
		}
	}
	echo "<br>"; echo "<br>";
	
	echo "0 это 5? ". intval(proceed($num0)); echo "<br>";
	echo "1 это 5? ". intval(proceed($num1)); echo "<br>";
	echo "2 это 5? ". intval(proceed($num2)); echo "<br>";
	echo "3 это 5? ". intval(proceed($num3)); echo "<br>";
	echo "4 это 5? ". intval(proceed($num4)); echo "<br>";
	//echo "5 это 5? ". intval(proceed($num5)); echo "<br>";
	echo "6 это 5? ". intval(proceed($num6)); echo "<br>";
	echo "7 это 5? ". intval(proceed($num7)); echo "<br>";
	echo "8 это 5? ". intval(proceed($num8)); echo "<br>";
	echo "9 это 5? ". intval(proceed($num9)); echo "<br>";
	
	echo "<br>";
	echo "<br>";
	
	echo "Узнал 5? ". intval(proceed($num5));  echo "<br>";
	echo "Узнал 5 - 1? ". intval(proceed($num51)); echo "<br>";
	echo "Узнал 5 - 2? ". intval(proceed($num52)); echo "<br>";
	echo "Узнал 5 - 3? ". intval(proceed($num53)); echo "<br>";
	echo "Узнал 5 - 4? ". intval(proceed($num54)); echo "<br>";
	echo "Узнал 5 - 5? ". intval(proceed($num55)); echo "<br>";
	echo "Узнал 5 - 6? ". intval(proceed($num56)); echo "<br>";

Теперь вы можете сами заняться созданием собственной нейросети
начав с основ.

Показанная программа является действующим реальным примером
простейшей нейронной сети, умеющей распознавать образы цифр от
0 до 9, представленных в виде строковых значений в виде побитовой
маски.

образы цифр для нейросети распознавания цифр в виде черно-белых пикселей

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

Каждому черному пикселю соответствует значение 1, а белому - 0.

1 – 001001001001001
2 - 111001111100111
3 - 111001111001111
4 - 101101111001001
5 - 111100111001111
6 - 111100111101111
7 - 111001001001001
8 - 111101111101111
9 - 111101111001111

Эти строки и записаны в самом начале программы.

	// Цифры (Обучающая выборка)
	
	$num0 = '111101101101111';
	$num1 = '001001001001001';
	$num2 = '111001111100111';
	$num3 = '111001111001111';
	$num4 = '101101111001001';
	$num5 = '111100111001111';
	$num6 = '111100111101111';
	$num7 = '111001001001001';
	$num8 = '111101111101111';
	$num9 = '111101111001111';
подробнее

Пишем слайдер на javascript с нуля

Доброго Вам времени суток, странник интернета !!!

Я давно хотел рассказать о том, как можно создать свой слайдер используя javascript - технологию.

Вы скажете - слайдеров уже готовых в интернете - МОРЕ.

Согласен с Вами. Но все они написаны чужой рукой, а значит знания о том, как они писались остаются за бортом :((

Я же хотел бы пополнить и расширить свои и Ваши знания по языку javascript, его применению и главное - сделать что-нибудь полезное, а не демонстрировать слишком "абстрактные" примеры. ;)

В самом низу страницы над футером Вы можете лицезреть готовый, работающий слайдер, показывающий различные продукты моего сайта, которые я делал в разное время. :)))

Итак, рассмотрим какой html-код требуется для отображения слайдера и что должен делать с этим кодом javascript, чтобы этот код превратился в слайдер.

Если посмотреть код html, относящийся к слайдеру, который отображает браузер, то мы увидим следующее

<div id="gl_slider" style="text-align: center;">

<div id="gl_slider_container">

<div class="timedSlideshow jdSlideshow" id="mySlideshow" style="display: block; "><a class="global" href="">

<div class="slideElement" style="position: absolute; left: 0px; top: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; background-image: url('.$slider_dir.'/images/banner/05.gif); visibility: hidden; opacity: 0; background-position: 50% 50%; "></div>

<div class="slideElement" style="position: absolute; left: 0px; top: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; background-image: url('.$slider_dir.'/images/banner/fl_lessons.jpg); visibility: hidden; opacity: 0; background-position: 50% 50%; "></div>

<div class="loadingElement" style="display: none; "></div><div style="visibility: visible; opacity: 0.7; height: 40px; " class="slideInfoZone"><h2>продукты сайта</h2><p>все продукты нашего сайта</p></div></a> </div> <script type="text/javascript">

countArticle = 0;

var mySlideData = new Array();

mySlideData[countArticle++] = new Array(

'modules/slider/images/banner/05.gif',

'http://localhost/megainformatic_ru/?page=40&banner',

'Уроки Photoshop',

'Если Вы хотите изучить профессиональные методы работы в Adobe Photoshop'

);

mySlideData[countArticle++] = new Array(

'modules/slider/images/banner/ph_draw_and_anim.jpg',

'http://localhost/megainformatic_ru/?page=66&banner',

'Уроки Photoshop - Рисуем и анимируем',

'учимся рисовать и анимировать в photoshop'

);

</script>

<script type="text/javascript">

function startSlideshow() {

var slideshow = new timedSlideShow($('mySlideshow'), mySlideData);

}

addLoadEvent(startSlideshow);

</script>

</div>

</div>

Исходя из этого кода можно сделать такой вывод - в блоке div с id mySlideshow размещаются все картинки слайд-шоу в виде блоков div класса slideElement.

Как можно заметить все они имеют атрибут visibility: hidden;
Т. е. скрытый - поэтому они не отображаются.

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

Как видите в теории это достаточно просто.

Посмотрим что имеет место в скрипте фактически.

Сначала выполняются некоторые подготовительные операции -

countArticle = 0;

var mySlideData = new Array();

mySlideData[countArticle++] = new Array(

'modules/slider/images/banner/05.gif',

'http://localhost/megainformatic_ru/?page=40&banner',

'Уроки Photoshop',

'Если Вы хотите изучить профессиональные методы работы в Adobe Photoshop'

);

Т. е. в яваскрипте создается массив элементов, в который заносится информация, необходимая для каждого элемента слайдера -

Адрес изображения

Ссылка для перехода по клику на данное изображение

А также некоторые пояснительные надписи

Затем происходит следующее -

function startSlideshow() {

var slideshow = new timedSlideShow($('mySlideshow'), mySlideData);

}

addLoadEvent(startSlideshow);

Т. е. внутри обработчика функции startSlideshow создается экземпляр класса timedSlideShow и ему передаются параметры -

id блока набора элементов слайдера

и массив описаний к этим элементам.

Далее данная функция добавляется в обработчик события onLoad для загрузчика onLoad страницы.

Это стандартный обработчик, с которого начинают свою работу многие javascript-приложения.

В нашем случае таким приложением как раз является скрипт слайдера.

То что мы рассматривали выше - это так называемая подготовительная часть работы, которая описывает html код слайдера вместе с его содержимым (набором картинок), а также вызов метода для создания яваскрипт-объекта слайдера.

Внешний вид слайдера описан в стилях css, подключенных к странице, а сама логика работы класса слайдера на основе которой будет работать созданный объект, описана в соответствующих подключенных файлах скриптов.

На самом деле их всего 3:

<script src="<?php echo $slider_dir; ?>/inc/mootools.release.83.js" type="text/javascript"></script>

<script src="<?php echo $slider_dir; ?>/inc/timed.slideshow.js" type="text/javascript"></script>

<link rel="stylesheet" href="<?php echo $slider_dir; ?>/inc/jd.slideshow.css" type="text/css" media="screen">

файл mootools.release.83.js - представляет из себя подключенную, используемую слайдером библиотеку mootools.

файл timed.slideshow.js - содержит собственно логику работы слайдера.

ну и наконец файл jd.slideshow.css - это собственно описание элементов внешнего вида слайдера.

Поскольку все эти 3 файла Вы без каких-либо ограничений можете скачать себе просто путём сохранения данной страницы из браузера на свой компьютер, то я соответственно не буду здесь приводить специально ссылки на получение этих файлов.

Нам с вами остается собственно кратко познакомиться с логикой работы слайдера (т. е. прокомментировать код, описанный в файле timed.slideshow.js).

Этим Мы с вами займёмся в следующей статье - логика работы слайдера на javascript

Game craft - отображение scv модели в формате x в d3d9-приложении

[все уроки game craft]  [моделируем scv]  [моделируем scv шаг 1 часть 2] [моделируем scv шаг 2 часть 3] [Прорисовка текстуры робота SCV шаг 5]  [экспорт робота scv в формат x] 

В предыдущих уроках мы рассмотрели как моделируется, текстурируется и экспортируется модель. Теперь покажем как выводить данную модель в d3d9-приложении.

Модель робота scv в d3d9 - приложении

Вы можете скачать самораспаковывающийся архив, содержащий весь необходимый исходный код

Для нормальной сборки вам также потребуется среда разработки MSVS 2005 и DirectX SDK August 2008.

Теперь попробуем кратко продокументировать код, который содержит приложение d3d9_skin_mesh

Здесь Мы не преследуем формальную цель подробного и досконального описания всего кода, который содержится в модуле D3DAppTemplate.cpp . С полным исходным кодом Вы можете ознакомиться, скачав его по ссылке выше, откомпилировать и запустить полученное приложение, и убедиться, что оно работает.

Выполнение приложения начинается с вызова метода CD3DAppTemplateApp::CD3DAppTemplateApp()

Далее следует остановиться на вызове метода BOOL CD3DAppTemplateApp::InitInstance(), т. к. внутри него создается и скрывается главное окно приложения -

pMainWindow = new CD3DAppTemplateDlg();
pMainWindow->Create(CD3DAppTemplateDlg::IDD);
pMainWindow->ShowWindow(SW_SHOW);
pMainWindow->ShowWindow(SW_HIDE);

Это делается для того, чтобы внутри процедуры InitialD3DAppSettings новое окно, создаваемое и используемое для целей вывода 3D сцены не перекрывалось с основным и не возникало путаницы. Просто создается иллюзия, что окно 3D сцены и есть основное.

void InitialD3DAppSettings()

//...

DXUTCreateWindow( L"D3D9 App Template", 0, 0, 0);

//...

В этой связи возникает вопрос: А почему окно pMainWindow нельзя использовать для вывода 3D сцены ?

Ответ звучит так: окно pMainWindow - это базовое окно MFC приложения, с которым связаны некоторые ресурсы, но для целей вывода 3D сцены оно не пригодно, т. к. DirectX API предполагает для этого только вновь созданное, отдельное окно. В противном случае обеспечить работу D3D в этом окне не представляется возможным. Поэтому именно такой способ и используется в нашем приложении d3d9_skin_mesh

Нетрудно догадаться, что основная работа по подготовке d3d-приложения к работе описана внутри процедуры InitialD3DAppSettings, а собственно цикл работы приложения описан в DXUTMainLoop и заключается в поочередном вызове сначала процедуры void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ), а после неё - void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext ).

У Вас может возникнуть вопрос: Как реализуется обработка управления от клавиатуры и мыши ?

В данном приложении она реализована обычными средствами Windows - через функцию MsgProc - но это будет более медленный способ. В реальном игровом приложении это реализуется посредством вызова специальной функции где-то в самом начале процедуры OnFrameMove. Например в игре Веселый Буквоежка для этой цели используется процедура UpdateInput - внутри которой проверяется какие клавиши или действия мышью были использованы пользователем и в ответ на это вызываются соответствующие процедуры, функции или методы которые привязаны к конкретной клавише или действию мышью. Подробнее об этом можно узнать получив полный исходный код движка Fle, на котором написана игра Веселый Буквоежка. Также будут не бесполезны иструменты разработки на движке Fle - SceneEditor, описание механизма сборки локаций и утилита Coords2D.

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

Итак, двинемся по коду d3d9_skin_mesh дальше. После того как все предварительные действия в приложении осуществлены - это как я уже говорил, описано внутри процедуры InitialD3DAppSettings, вызываются поочередно процедуры void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ) и void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext ). Внутри них и надо искать ответ на вопросы - как собственно работает d3d-приложение и каким образом это реализовано ?

Очень полезное умение, которое Вам несомненно пригодится - умение задавать себе вопросы и находить на них ответы в коде. Внутри OnFrameMove Вы увидите, как запоминается предыдущее значение таймера в переменной g_fLastAnimTime, там же есть метод вызова камеры (но она пока не используется), а также методы, которые используются для управления обзором игровой сцены вместо камеры - через g_ArcBall.

В процедуре OnFrameRender формируется изображение игровой сцены - сначала выводятся элементы управления g_SettingsDlg, затем очищается backbuffer (невидимый экран, который как только будет подготовлен будет выведен на экран реальный - чтобы изображение не мерцало отображая как на нём рисуются элементы), задаются параметры для источника света и собственно происходит модель робота SCV - DrawFrame.

Резонные вопросы, которые возникают - где, как и каким образом загружается модель и как она затем отрисовывается ? Нужно добавить, что в приложении d3d9_skin_mesh, которое базируется на коде примера SkinnedMesh из DirectX SDK Aug 2008, реализовано отображение не только статичных, но и анимированных моделей. Так что если загрузить модель, в которой есть скелетная анимация - то модель будет выводиться в движении - циклично воспроизводя имеющуюся в ней анимационную цепочку.

Код, который воспроизводит анимацию - достаточно объёмный и Вы его можете посмотреть сами скачав архив по ссылке выше. Традиционно Мы остановимся только на самых важных деталях.

Внутри процедуры OnCreateDevice происходит загрузка файлов эффектов и файла модели. Обрабатывается иерархия объектов в X файле модели, настраиваются указатели на скелетные матрицы, вычисляется граничная сфера для модели (которая может потом использоваться для проверки столкновения с другими моделями в игровой сцене.

Оставшийся код, Вы можете рассмотреть самостоятельно и лучше это делать путём написания нового приложения, которое бы выполняло определенные задачи. Например не только загружало анимированную модель, но и по нажатию клавиш или кликам мышью, заставляло бы перемещатьтся 3D-модель в игровом пространстве. В последующих наших уроках мы именно этим и займёмся: будем рассматривать поэтапно каждую задачу, возникающую в типичном игровом проекте - на примере нашей игры Game Craft, а также будем моделировать все необходимые для этого модели и делать другие сопутствующие вещи (текстуры, описания, звуки, музыку и др.)

В цикле наших уроков Мы постараемся остановиться на следующих вопросах:

- работа с 3d-камерой;
- перемещение модели в пространстве;
- реализация управления игрой от клавиатуры и мыши;
- создание игровых панелей и реализация простейших операций по управлению игрой через игровую панель;
- создание рельефа земной поверхности и его текстурирование;
- вывод рельефа в игре и перемещение по нему моделей;
- модели игровых ресурсов: минералы, гейзер веспен-газа;
- не-интерактивные игровые объекты, формирующие окружающую среду: деревья, кусты, камни и прочее.
- постройка нового коммандного центра в игре рабочим scv;
- добыча ресурсов рабочими роботами scv;
- создание фоновой музыки и сопутствующих игровых звуков;
- создание редактора игровой сцены;

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

В следующем уроке мы займёмся изучением управления игрой от Direct Input и работой с 3d-камерой в d3d9-приложении работа с 3d-камерой в d3d9-приложении

[все уроки game craft]  [моделируем scv]  [Моделируем робота SCV шаг 1 часть 2]  [Моделируем робота SCV шаг 2 часть 3]  [Прорисовка текстуры робота SCV шаг 5]  [экспорт робота scv в формат x] 

megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 2,7414