Форум Игромании

Форум Игромании (http://forum.igromania.ru/index.php)
-   Игрострой (http://forum.igromania.ru/forumdisplay.php?f=278)
-   -   Учимся делать игры (http://forum.igromania.ru/showthread.php?t=11396)

pokibor 16.09.2006 12:51

Цитата:

Сообщение от Roker
Не для новичкофф. Для новичков - Ф. Хилл "OpenGL. Программирование компьютерной графики". Вот там - точно основопологающее. Это фундаментальная книга. Сам училсо по ней полгода в универе.
Ссылка в сибирь:
http://www.natahaus.ru/2006/02/12/Op...j_grafiki.html

К сожалению, OpenGL и Direct3D все-таки разные вещи. Так что книги скорее альтернативны, нежели дополняют друг друга...
P.S. Даже шейдерный ассемблер не совпадает! Ну неужели как-нибудь о совместимости договорится не могли?..

pokibor 22.09.2006 20:03

Пишу новый пост, т.к. он совсем на другую тему, да и времени много после предыдущего прошло:
Кто-нибудь знает хороший способ генерации шума?
О том, зачем это:
мне нужно сделать генерацию текстуры земли пиксельными шейдерами. В шейдер идут текстурные координаты, а также одно или несколько чисел, определяющих цвет итогового пикселя (видимо, случайные числа + другие данные для функции). Пока что я нашел только Perlin Noise, но он как-то сложноват для реализации в шейлере (стараюсь уложиться в 2.0)... Если есть шум, который вполне может сгенерить более-менее похожую на реальность текстуру ландшафта - дайте знать!

STOLEN 01.10.2006 11:30

Люди, есть вопрос! Короче недавно с Visual С++ поралельно я начал осваивать Delphy. Ну и первый из движков который я нашел оказался конечно GLScene. Вопрос первый: с помощью кокого элемента я могу загружать свои модели в формате 3DS? Плиз напишите поподробней. Вопрос номер два: мне нужно разместить несколько камер в локации, так чтобы при нажатии кнопки можно было переместиться в другую часть локации. Помогте плиз! Просто уроков в сеи сейчас не очень много. От силы штук 10 найти можно.
P.S Прошу не спрашивать вопросы типа зачем тебе DELPHY когда есть С

S@intMan 02.10.2006 15:39

Здрасьте!
Я снова здесь(...или сдесь:???: ...вот блин...)после долгой отлучки от инета!
Короче у меня вопрос:
Можно ли найти ЛИЦЕНЗИОННЫЙ С++(желательно 2005) в обычном магазине, а не в интернете?

З.Ы. Кстати тоже самое относительно DirectX SDK
(не очень то мне хочется качать последние версии на Dial-up'е
хотя в ближайшем будущем я хочу поставить себе спутниковый
или через мобилу)

pokibor 02.10.2006 15:45

Цитата:

Сообщение от xOlegusx (Сообщение 1059452)
Здрасьте!
Я снова здесь(...или сдесь:???: ...вот блин...)после долгой отлучки от инета!
Короче у меня вопрос:
Можно ли найти ЛИЦЕНЗИОННЫЙ С++(желательно 2005) в обычном магазине, а не в интернете?

З.Ы. Кстати тоже самое относительно DirectX SDK
(не очень то мне хочется качать последние версии на Dial-up'е
хотя в ближайшем будущем я хочу поставить себе спутниковый
или через мобилу)

DirectX SDK вполне можно и у пиратов купить, ибо он бесплатен. А C++ (какой? Наверное, Вы о Visual Studio .NET) вполне можете спросить в ближайшем представительстве Microsoft, вот только стоит он таких денег, что Вам скорее всего, не по карману (иначе бы Вы вряд ли на Dial-up'е сидели).

L'ombre 02.10.2006 16:02

Цитата:

Сообщение от xOlegusx (Сообщение 1059452)
ЛИЦЕНЗИОННЫЙ С++(желательно 2005)

Visual Studio 2005 Team Edition for developers стоит $4,876.31 (http://www.amazon.com/s/ref=nb_ss_gw...&Go.x=0&Go.y=0)

Professional Edition - "всего" $711.92
Standart Standart - $266.11

замечено, что на Standart Edition, в отличие от Express, вполне можно программировать под Windows. так что если есть деньги - решайте. Однако такие продукты imo целесообразнее приобретать организации для своих программистов, а не самим программистам.

S@intMan 02.10.2006 17:51

Цитата:

Сообщение от L'ombre (Сообщение 1059538)
Professional Edition - "всего" $711.92
Standart Standart - $266.11

Хех... чего и следовало ожидать
Ну ладно, поднакоплю чуток, все же $266.11
можно сказать нистрашно,
тем более речь идет о нужной вещи.
(да и лицензия все таки)

P.S. Спасиба за инфу

Pilate 10.10.2006 11:24

Как на DirectX SDK с графикой работать? Это тоже самое что и простой DirectX 9.0C или что-то еще? (извините за такой вопрос, но я в этом DirectX - ноль...) есть ли какие-то специальные редакторы по работе с графикой в DirectX, или с этим можно работать и в 3д Максе?

L'ombre 10.10.2006 12:39

DirectX SDK - это прежде всего набор библиотек и подключаемых файлов для Visual C++, а также samples, tutorials, documentation, взякие инструментальные средства и тд.
Цитата:

Сообщение от Anton_Keks (Сообщение 1085509)
или с этим можно работать и в 3д Максе?

3DMax - редактор моделей. естественно есть и другие редакторы... Что ты имеешь в виду под "работой с графикой в DirectX"?

pokibor 10.10.2006 13:21

Цитата:

Сообщение от Anton_Keks (Сообщение 1085509)
Как на DirectX SDK с графикой работать? Это тоже самое что и простой DirectX 9.0C или что-то еще?

Ты учишь язык программирования (любой из более-менее современных, лучше C++), и используешь готовые функции DirectX для вывода на экран трехмерных изображений (а также для вывода в колонки звуков и т.д. - ведь DirectX - это не только Direct3D, это еще DirectSound, DirectMusic и DirectPlay). DirectX обеспечивает тебе корректную работу с любой (в идеале :sml: ) видюхой, имеющей драйвера под Windows, аппаратное ускорение графики и прочие прелести, существенно упрощающие программирование игр и не только. В любом случае, не зная языка программирования, качать DirectX SDK нет смысла.
Цитата:

Сообщение от Anton_Keks (Сообщение 1085509)
есть ли какие-то специальные редакторы по работе с графикой в DirectX, или с этим можно работать и в 3д Максе?

Нет, с DirectX никаких 3D редакторов не идет. Идет только Viewer, позволяющий прсматривать файлы в формате .x и эффекты в формте .fx, по-моему..., так же идут несколько утилит для работы с шейдерами... и еще много чего полезного. Но 3D редакторов там нет. Вообще, с форматом, в котором хранится 3D-модель, DirectX никак не связан. В него можно загрузить модель из любого формата (ведь модель - по сути, набор вершин с текстурными координатами, нормалями и пр.), вот только загрузчик придется писать самостоятельно :sml: . В DirectX есть функции только для загрузки x-файлов. В x-файлы вполне можно конвертировать модели из 3dmax'а, нужно только найти и скачать плагин. Я пользуюсь PandaDX.

Pilate 10.10.2006 15:29

pokibor
Спасибо, вроде разобрался;)

Teмник 12.10.2006 02:17

Что нужно чтобы создать анимацию для flash игры?

2VVRME 16.10.2006 23:29

Извините если не туда пишу, просто не нашел (а может невнимательный;)) как в Morrowinde писать скрипты т.е. мы с друзьями решили просто ради интереса (прикола!!!) написать небольшой мод, но незнаем принцип работы со скриптами в этой игре. Помогите чем сможите, в долгу не останемси...

STOLEN 16.10.2006 23:36

Заходи на МОДный форум там специальная тема для этого дана...

Pilate 17.10.2006 20:09

Скажите, а с чего надо начать создание игры?

pokibor 17.10.2006 20:36

Цитата:

Сообщение от Anton_Keks (Сообщение 1109864)
Скажите, а с чего надо начать создание игры?

С написания диздока, в котором будут изложено твое видиние этой игры, ее сюжет и т.п. - в общем, версия игры в текстовом виде. Потом идет поиск движка или написание собственного, ну и потом уже программирование игры, создание моделей и т.п.

Evil.Hard 18.10.2006 11:53

Цитата:

Сообщение от pokibor (Сообщение 1027645)
Пишу новый пост, т.к. он совсем на другую тему, да и времени много после предыдущего прошло:
Кто-нибудь знает хороший способ генерации шума?
О том, зачем это:
мне нужно сделать генерацию текстуры земли пиксельными шейдерами. В шейдер идут текстурные координаты, а также одно или несколько чисел, определяющих цвет итогового пикселя (видимо, случайные числа + другие данные для функции). Пока что я нашел только Perlin Noise, но он как-то сложноват для реализации в шейлере (стараюсь уложиться в 2.0)... Если есть шум, который вполне может сгенерить более-менее похожую на реальность текстуру ландшафта - дайте знать!

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

pokibor 18.10.2006 13:11

Цитата:

Сообщение от Evil.Hard (Сообщение 1111583)
Насколько я знаю то пользуються только этим методом для генерации шума... Покрайне мере я только этот метод видел...
Сам не пробывал его реализовать так как с шейдерами не работал
Если получиться у тебя его реализовать то небольшая просьба - выложи реализацию !!! )))

Ага, я уже его реализовал. С шейдерами идея вылетела в трубу, так как в них нет (по крайней мере, в версии 1.4 - точно) побитных операций да и целых чисел вообще. Приду домой - выложу свою программку на C++ Builder (да, я пользуюсь этой дрянью только для быстрого создания "офисных" приложений, так что никакого противоречия с обругиванием мною этого продукта нет) с небольшими пояснениями, ибо интерфейс там не особо понятный. Кстати, я сделал там еще генерацию тайлов (т.е. чтобы у ряда рисунков были одинаковые края с целью их совмещения).
---
Вот выложил: http://www.webfile.ru/1154582. Кому надо - качайте на здоровье (522 кб). Пояснения по управлению - в ReadMe.doc.

Evil.Hard 18.10.2006 18:44

упс... не качаетсо (((

pokibor 18.10.2006 19:35

Цитата:

Сообщение от Evil.Hard (Сообщение 1112821)
упс... не качаетсо (((

Это почему? Сейчас попробовал - у меня качается спокойно (даже webfile не тормозит, хотя он это любит). В чем проблема?
Могу выслать по аське или по мейлу, если вдруг у тебя с вебфайлом какие-то проблемы.

razor21 21.10.2006 21:21

Ребят, а как подключить Irrlicht к MS Visual Studio .NET 2003?

BestPlay 22.10.2006 22:48

Люди, подскажите плиз какую-нибудь прогу, где можно делать простенькие игры, но чтобы было ну очень легко освоить

pokibor 22.10.2006 23:59

Цитата:

Сообщение от razor21 (Сообщение 1122866)
Ребят, а как подключить Irrlicht к MS Visual Studio .NET 2003?

Копируешь все из папок lib и include в соответствующие папки в дирректории <дирретория Visual Studio>\vc7. Кроме того, кидаешь DLL к экзешнику каждого проекта, юзающего Irrlicht.
Цитата:

Сообщение от BestPlay (Сообщение 1127165)
Люди, подскажите плиз какую-нибудь прогу, где можно делать простенькие игры, но чтобы было ну очень легко освоить

Редактор твоей любимой игры. Проще не найдешь. Мне, например, очень нравится редактор StarCraft. Вроде даже в WarCraft 3 он намного мощнее, а вот поди ж ты...

STOLEN 23.10.2006 00:17

Цитата:

Люди, подскажите плиз какую-нибудь прогу, где можно делать простенькие игры, но чтобы было ну очень легко освоить
Если ты хочешь сделать ну очень простенькую игру, тогда можешь попробовать Game Maker. А вообще лучший вариан конечно у Pokibor

Nord 24.10.2006 18:16

Цитата:

Сообщение от BestPlay (Сообщение 1127165)
Люди, подскажите плиз какую-нибудь прогу, где можно делать простенькие игры, но чтобы было ну очень легко освоить

Во первых, что ты вкладываешь в понятие "простенькие игры"?

Вообще, всё зависит от тебя, если ты знаешь основы базовых языков типа Pascal или Basic, то тебе не сложно будет разобраться в каком-нибудь Blitz3D. Все программы, в которых программирование сведено к минимуму - это просто движок и редактор левелов, но и там тебе надо будет писать скрипты. На счет Game Maker - не пробывал, но говорят очень простой, попробуй, потом расскажешь :)).

razor21 24.10.2006 18:26

Цитата:

Сообщение от Nord (Сообщение 1131163)
Вообще, всё зависит от тебя, если ты знаешь основы базовых языков типа Pascal или Basic, то тебе не сложно будет разобраться в каком-нибудь Blitz3D.

Зачем учить basic для разработки игр? Все равно ничего толкового не написать! Надо учить С++ и работать с такими движками, как irrlicht (сейчас сам его изучаю), или неплохой 2D жвижок Haaf's Game Engine 1.6 (HGE). Вот :)

pokibor 24.10.2006 19:03

Цитата:

Сообщение от razor21 (Сообщение 1131192)
Зачем учить basic для разработки игр? Все равно ничего толкового не написать! Надо учить С++ и работать с такими движками, как irrlicht (сейчас сам его изучаю), или неплохой 2D жвижок Haaf's Game Engine 1.6 (HGE). Вот :)

Верно. Про Blitz мое (и не только мое) отношение выражено здесь (отобраны отдельные посты):
http://forum.igromania.ru/showpost.p...6&postcount=32
http://forum.igromania.ru/showpost.p...5&postcount=45
http://forum.igromania.ru/showpost.p...9&postcount=86
http://forum.igromania.ru/showpost.p...7&postcount=87
http://forum.igromania.ru/showpost.p...3&postcount=88

razor21 24.10.2006 20:04

У меня вопрос к тебе, как к хорошему знатоку irrlicht'a:
при компиляции моего первого проекта у меня возникает ошибка, точнее при запуске: "Unable to start program 'c:/_______/razor21/мои док./vis studio proj/irr_hello/irr_hello.exe' - Не удается найти указанный файл!" Как мне ее решить?
Вот код, который я написал:
Код:

#include "irrlicht.h"
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;
using namespace io;
using namespace gui;
#pragma comment(lib, "C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/lib/Irrlicht.lib"

int main()
{  IrrlichtDevice *device = createDevice(EDT_SOFTWARE, dimention2d(512, 384), 16, false, false, false, 0);
  device->setwindowcaption(L"Hello, World! Irrlicht DEMO";
  IVideDriver *driver = device->getVideoDriver();
  ISceneManager *smgr = device->getSceneManager();
  IGUIEnvironment *guienv = device->getGUIEnvironment();
  guienv->addStaticText(L"Hello, World!", rect(10, 10, 200, 22), true);
}

P.S.
Заголовочный файл irrlicht.h тоже подключить не забыл.

pokibor 24.10.2006 21:06

Больше похоже на то, что проблема не в irrlicht, а в файловой системе - компилятор, по-видимому, не может найти только что скомпиленый экзешник для запуска. попробуй сохранять проект в какой-нибудь более нормальной папке, а не в "Моих документах", причем без русских букв. Я вообще обычно стараюсь делать имена папок только английскими, причем даже без пробелов. Также не забудь, что в папке с экзешником должны лежать Irrlicht.dll и (если проект .NET) Irrlicht.NET.dll. Также может быть, что у тебя как-то не так настроен компилятор (обычно он сохраняет екзешник в папке Debug либо Release в зависимости от режима).
Кстати, к lib-файлу в #pragma вовсе не обязательно указывать полный путь, если он находится в папке lib компилятора, хватит и просто имени файла.
И как ты себе представляешь работу этой программы? У тебя же в ней цикла нет, она у тебя сразу завершит работу! Добавь-ка
Код:

        while(device->run())
        {
                driver->beginScene(true, true, SColor(255,100,101,140));
                smgr->drawAll();
                guienv->drawAll();
                driver->endScene();
        }
        device->drop();

и в строке device->setwindowcaption(L"Hello, World! Irrlicht DEMO"; у тебя скобочка закрывающая нет стоит...

Pilate 24.10.2006 22:22

А вообще как, в иррлихте на сколько тяжело разобраться (если не учитывать знание C++)?

pokibor 24.10.2006 22:52

Цитата:

Сообщение от @nton_Kek$ (Сообщение 1132106)
А вообще как, в иррлихте на сколько тяжело разобраться (если не учитывать знание C++)?

Кому как. Имхо, по примерам и хелпу - элементарно. Хотя есть несколько неочевидных вещей, но о них и спросить можно. Например, почему-то по умолчанию альфа-канал в материале считает значения < 0.5 равными нулю. Зачем это сделано, для меня осталось загадкой, но для устранения нужно поменять значение переменной материала MaterialTypeParam на ненулевое (насколько я понял, на какое, роли не играет. Хотя тут я могу ошибаться. Но значение 0.01 работает 100%). Впрочем, о таких вещах обычно написано в хелпе, просто внимательно читать его нужно. Я вот невнимательно читал, за что и поплатился нервными клетками :(
А вот чтобы модифицировать движок под свои нужды, нужны уже знания поглубже. Впрочем, такая необходимость бывает нечасто. Мне пока что было необходимо лезть в движок всего два раза - один раз посмотреть, в каком порядке матрицы перемножаются для вычисления поворота, и один - исправить ошибку в классе системы частиц и дописать еще пару эмитеров.

Nord 25.10.2006 18:37

Цитата:

Сообщение от razor21 (Сообщение 1131192)
Зачем учить basic для разработки игр? Все равно ничего толкового не написать! Надо учить С++ и работать с такими движками, как irrlicht (сейчас сам его изучаю), или неплохой 2D жвижок Haaf's Game Engine 1.6 (HGE). Вот :)

Да я ничего против C++ не имею! Я только за, т.к. сам учусь на программиста и понимаю все преимущества языка си . Но BestPlay сказал, что ему нужно делать простенькие игры, кстати, я не сказал учить бейсик, я предложил блитц как вариант, если он упешно изучил бейсик в школе. Как я понял ему надо "быстро и просто", вы представляете сколько времени и сил он потратит на изучение си?

Pilate 26.10.2006 08:27

а насколько движок игровой (иррлихт) упрощает разработку игры?

pokibor 26.10.2006 09:04

Цитата:

Сообщение от @nton_Kek$ (Сообщение 1135482)
а насколько движок игровой (иррлихт) упрощает разработку игры?

Сильно. Во-первых, его изучить проще, чем DirectX. Во-вторых, код с использованием Irrlicht писать быстрее, чем код с использованием непосредственно DirectX. В-третьих, многие наиболее употребляемые фишки в Irrlicht уже реализованы (например, генерация земли по карте высот, системы частиц и т.п.). В-четвертых, Irrlicht может использовать как OpenGL, так и DirectX, а может и вообще в Software варианте работать. При этом для переключения тебе достаточно изменить всего одно значение, ну и шейдеры нужные грузить. Также нужно отметить, что в Irrlicht реализована загрузка многих популярных типов файлов (как 3d-моделей, так и текстур), тогда как в DirectX, например, из 3D-моделей по-умолчанию только x-файлы грузит. А из текстур Irrlicht, например, даже фотошоповские psd грузить умеет.
В остальном Irrlicht можно считать надстройкой над OpenGL/DirectX, объединяющей их разрозненную структуру с длинными именами в удобные классы.

Pilate 26.10.2006 12:49

тоесть, если я скачал иррлихт, то директИКС качать не надо?

pokibor 26.10.2006 15:46

Цитата:

Сообщение от @nton_Kek$ (Сообщение 1135890)
тоесть, если я скачал иррлихт, то директИКС качать не надо?

Нет, если ты не будешь перекомпиливать исходники Irrlicht. Впрочем, DirectX SDK тебе все равно может понадобится, так как Irrlicht - чисто графический движок. В него не входят компоненты работы с сетью и со звуком. Впрочем, Direct Sound есть очень простая вещь. Про DirectPlay практически ничего сказать не могу - мне нравится Winsock, и я юзаю его.
P.S. Кстати, я надеюсь, ты выше имел ввиду DirectX SDK, а не собственно библиотеку?

razor21 27.10.2006 12:42

У меня назрели некоторые вопросы по Irrlicht'у:

1. Можно ли менять цвет кнопок, edit box'ов, label'ов, заднего фона? Как?
2. Как поменять размер шрифта?
3. Поддерживает ли Irrlicht русские буквы?
4. Как работать с таймером? т.е. как его подключить к проекту и примерно покажите синтаксис такого примера: каждую секунду значение label'а возрастает на 1.
Подскажите....

pokibor 27.10.2006 13:49

Цитата:

Сообщение от razor21 (Сообщение 1138506)
1. Можно ли менять цвет кнопок, edit box'ов, label'ов, заднего фона? Как?

И да, и нет. Меняется как бы общий цвет для каждого элемента управления, т.е. как бы каждому элементу задается общий оттенок. Это делается так (пример из кода моей игры, ALPHA - прозрачность интерфейса):
Код:

        #define ALPHA 255
        for (s32 i=0; i<EGDC_COUNT ; ++i)
        {
                SColor col = env->getSkin()->getColor((EGUI_DEFAULT_COLOR)i);
                col.setAlpha(ALPHA);
                env->getSkin()->setColor((EGUI_DEFAULT_COLOR)i, col);
        }
        env->getSkin()->setColor(EGDC_3D_FACE, SColor(ALPHA,0,128,0));
        env->getSkin()->setColor(EGDC_3D_SHADOW, SColor(ALPHA,0,128,0));
        env->getSkin()->setColor(EGDC_HIGH_LIGHT , SColor(ALPHA,0,128,0));
        env->getSkin()->setColor(EGDC_3D_HIGH_LIGHT, SColor(ALPHA,128,160,128));
        env->getSkin()->setColor(EGDC_WINDOW, SColor(ALPHA,128,160,128));
        #undef ALPHA

В общем, за визуальный вид интерфейса отвечает IGUISkin. У него много интересных методов... Смотри хелп.
Цитата:

Сообщение от razor21 (Сообщение 1138506)
2. Как поменять размер шрифта?

Где? Если в интерфейсе, то шрифт меняется так:
Код:

env->getSkin()->setFont(IGUIFont *Font)
Создается объект с интерфейсом IGUIFont методом getFont GUIEnviroment'а. Шрифт создается из bmp-файла, и потому его размер просто так не поменяешь. Кстати, так в большинстве игр: векторных шрифтов нет, есть только растровые. Привыкай.

Цитата:

Сообщение от razor21 (Сообщение 1138506)
3. Поддерживает ли Irrlicht русские буквы?

Да, а то как бы моя игра была на русском языке. Но, во-первых, русские буквы должны быть в шрифте (а шрифт в Irrlicht берется из bmp-файла определенного формата, причем идущая с ним программа для создания этого файла IrrFontTool почему-то шрифты с кириллицей конвертирует как без кириллицы). Я обошел это так: взял моноширинный шрифт и нарисовал все вручную. Могу поделится: http://www.amais.org.ru/file/index.p...tory=Irrlicht&

Цитата:

Сообщение от razor21 (Сообщение 1138506)
4. Как работать с таймером? т.е. как его подключить к проекту и примерно покажите синтаксис такого примера: каждую секунду значение label'а возрастает на 1.
Подскажите....

Не забывай, у тебя в Irrlicht идет бесконечный цикл рендера, навыки из Borland C++ Builder'а тут абсолютно бесполезны. Ты должент каждый раз в этом цикле рендера сам проверять таймер. Время в миллисекундах, прошедшее с момента запуска программы, можно получить так:
Код:

device->getTimer()->getTime();
Если хочешь, можешь получить время с начала работы системы:
Код:

device->getTimer()->getRealTime();
Теперь об организации класса таймера. Можно, например, сделать глобальный список таймеров, каждый раз в циле пробегать его, передавая каждому время. Таймер будет сверять это время со временем своей последней активации, и, если оно больше или равно этому времени + интервал таймера, ставить его соответственно и вызывать что тебе нужно, то есть примерно так:
Код:

TTimer::TTimer() {
  next_act_time = device->getTimer()->getTime() + interval;
}
void TTimer::checkTimer(unsigned int curTime) {
  while (curTime >= next_act_time) {
    next_act_time += interval;
    OnTimer();//Процедура, срабатывающая в таймере
  }
}

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

razor21 27.10.2006 13:55

Цитата:

Сообщение от pokibor (Сообщение 1138608)
Надеюсь, понятно.

pokibor
Да, большое спасибо!

pokibor 27.10.2006 14:06

Кстати, вообще с русскими буквами в Irrlicht не все понятно. В большиснтве случаев строка для вывода имеет тип wchar_t * и можно подумать, что писать нужно в кодировке unicode. Так вот, это не так. нужно писать в обычной windows'овской кодировке, но как wchar_t. При этом компилятор жутко тупит... в общем, я пока обнаружил единственный способ писать в коде русские wchar_t-константы - писать их как массив из char и приводить ссылку на него к ссылке на wchar_t (в игре я, кстати, это не использую - у меня весь текст идет из ресурсных файлов):
В общем, пишется все так:

((wchar_t *)"Р\0у\0с\0с\0к\0о\0е\0 \0с\0л\0о\0в\0о\0\0")

То есть после каждой буквы ставится нулевой байт, потом это все трактуется как wchar_t (т.е. 2 байта на символ) - и все получется верно. Сдается мне, если разместить русские буквы в шрифте подальше, то все, может, и нормально будет, но это не факт, а так у меня все работает. И не забудь в конце ставить лишний \0, так как еще один \0 к нему добавится как конец char-строки.

razor21 27.10.2006 14:26

Я скачал тот шрифт и непокатило! Кста, почему IrrFontTool не работает, или как с ним работать? Вот я из списка выбрал шрифт нажал "перекодир" и .... ничефо! в чем дело?

И еще напиши поподробнее как поменять размер шрифта?

pokibor 27.10.2006 14:32

Цитата:

Сообщение от razor21 (Сообщение 1138659)
Я скачал тот шрифт и непокатило!

А как ты все грузил и строковую константу писал? В моей игре все работает, так что ты где-то ошибся.
Цитата:

Сообщение от razor21 (Сообщение 1138659)
Кста, почему IrrFontTool не работает, или как с ним работать? Вот я из списка выбрал шрифт нажал "перекодир" и .... ничефо! в чем дело?
И еще напиши поподробнее как поменять размер шрифта?

Читать по-английки учись. Кнопка называется "create bitmap font and copy to clipboard", то есть рисунок заносится в буфер обмена и вставляется в любом графическом редакторе, например, в Paint'е.
Размер шрифта менять невозможно, возможно создать несколько разных файлов с различнми размерами одного шрифта. Размер задается в той же IrrFont tool (список правее списка шрифтов).
P.S. Мда... такое чувство, что IrrFont Tool учитывает только 8-битную часть шрифта, а так как русская секция находится в unicode-области, то она игнорируется. Я постараюсь переписать исходники IrrFont tool и исправить этот баг.

P.S. Блин. Я ламер. Все правится исправлением одной константы в IrrFontTool, и текст становится unicode... Теперь мне нужно что-то делать с игрой (у меня же все старые надписи не в unicode в файле ресурсов!) либо все-таки переписывать эту утилиту...

razor21 27.10.2006 14:39

Цитата:

Сообщение от pokibor (Сообщение 1138671)
Читать по-английки учись.

Да я умею, вроде... Спасибо!
Цитата:

Сообщение от pokibor (Сообщение 1138671)
строковую константу писал?

Здесь поподробнее.
Цитата:

Сообщение от pokibor (Сообщение 1138671)
Я постараюсь переписать исходники IrrFont tool и исправить этот баг.

ОК! По ходу разработчик этого движка не расчитывал, что его двиг будут и русские использовать...

Цитата:

Сообщение от pokibor (Сообщение 1138671)
Все правится исправлением одной константы в IrrFontTool, и текст становится unicode...

Т.е. теперь русские буквы будут отображаться без проблем, да?

pokibor 27.10.2006 15:51

Цитата:

Сообщение от razor21 (Сообщение 1138684)
ОК! По ходу разработчик этого движка не расчитывал, что его двиг будут и русские использовать...
Т.е. теперь русские буквы будут отображаться без проблем, да?

Итак, ниже есть ссылка на дирректорию, в которой выложены исправленные исходники IrrFontTool и сама новая версия. Теперь можно указать, до какого символа создавать шрифт. Раньше этот параметр был равен 381, и русские символы unicode-шрифтов в битмеп просто не попадали. Теперь они попадают (если задать параметр = 1200), и (я проверял!) константа L"Русское слово" корректно выводится русскими буквами.
Собственно, ссылка:
http://www.amais.org.ru/file/index.p...ctory=Irrlicht

Замечание для razor21: я не понял твоих трудностей. Ладно, в чем бы они не были, теперь, как написано выше, строковая константа L"Русское слово" нормально отображается. Вроде, она, как и должно, транслируется компилятором в юникод. Так что теперь у тебя все должно работать, не забывай только символ L строки впереди ставить - он означает, что символы строки имеют тип wchar_t, а не char.

razor21 27.10.2006 18:34

pokibor
Спасибо!

pokibor 28.10.2006 22:56

Мне тут понадобились skybox'ы для игры, и я нашел отличный набор! Спешу поделится ссылкой: http://www.codemonsters.de/html/textures_cubemaps.html

razor21 28.10.2006 23:06

pokibor
Прикольно! Слушай, я вот ни разу не видел твою игру... она у тебя ни где не лежит (webfile.ru, slil.ru)?

pokibor 29.10.2006 00:10

Цитата:

Сообщение от razor21 (Сообщение 1143277)
pokibor
Прикольно! Слушай, я вот ни разу не видел твою игру... она у тебя ни где не лежит (webfile.ru, slil.ru)?

Нигде она не лежит, так как находится еще в стадии разработки. Срок выхода альфа-версии (под которой я понимаю завершенную версию игрового процесса, возможно с серьезными дырками в балансе и без кампании) - конец января, так как игра сдается как диплом. Потом буду делать уже кампанию и отлаживать баланс. Мне игру нетрудно выложить, но не для широкого посмотра. А то боюсь, что, посмотрев сейчас, заклеймят позором и потом никто интересоваться не будет. Графика там ерундовая (а что ты хотел от игры, которую делают два программиста без всякого намека на модельеров и художников?), AI пока что туп как пробка (он в разработке), пока что есть только режим битвы (но это самая сложная часть проекта, глобальный режим я за пару месяцев планирую сделать).
В общем, если не будешь сразу ругать и плеваться, и можешь спокойно скачать в районе 50 мегабайт, могу выложить запароленый архив. А пароль тебе через ПС передать.

razor21 29.10.2006 00:28

Цитата:

Сообщение от pokibor (Сообщение 1143545)
В общем, если не будешь сразу ругать и плеваться

Ни в коем случае! Я все понимаю!

ОК!

pokibor 30.10.2006 09:32

Извиняюсь, что до сих пор не выложил. У моего провайдера проблемы с доступом в интернет. Сегодня узнаю, бесплатный ли у нас аплоад на работе. Если бесплатный - выложу с работу, иначе придется ждать, пока провайдер поднимет свои сервера.
---
Выложил. См. личку.

STOLEN 09.11.2006 14:04

У меня опять вопрос по вашей части! Итак сейчас я все таки нашел время на освоение GLScene (неспрашивайте почему!!!). Короче скачал пару уроков по этому горе движку. Пытаюсь экспортировать модель в формате .3DS, но нифига неполучается. Я наверное что то нетак делаю кто нийбудь может мне по пунктам все подробно объяснить, как это делается...плиззз

pokibor 09.11.2006 14:43

А ты проверь - GLScene точно формат 3ds понимает? А то ж может, он только .x какой-нибудь знает. Или еще вариант - ты забываешь добавить источник света, и у тебя все объекты сцены просто не освещены.

STOLEN 09.11.2006 15:01

Не GLScene точно 3DS хавает. Просто я что то не так делаю можете написать все по пунктам, что бы все понятно...

Fulcrum 10.11.2006 01:48

Цитата:

Не GLScene точно 3DS хавает. Просто я что то не так делаю можете написать все по пунктам, что бы все понятно...
http://www.mirgames.ru/article/glscene/7.html

Поверхносто, но понятно. Вобще GLScene слишком высокоуровневый.

STOLEN 12.11.2006 13:47

Вот, недавно справился с проблемой описаной на форуме раньше. Но неожданно сталкнулся с другой! Я сделал программку, ктоторая может загружать модель в формате 3DS. Загружаю я в нее достаточно простенькую модель с простнейшей текстурой, и вижу достаточно долгую загрузку модели (примерно 4 секунды). Это нормально? Просто я думаю, если в кадре будет не одна простенькая модель, а достаточно много причем более сложных! Делал программку на GLScene, достаточно низкая скорость загрузки может быть вызвана из за работы дижка? Можно ли как ускорить этот поцесс?

pokibor 12.11.2006 15:58

Цитата:

Сообщение от STOLEN (Сообщение 1185999)
Загружаю я в нее достаточно простенькую модель с простнейшей текстурой, и вижу достаточно долгую загрузку модели (примерно 4 секунды). Это нормально?

Нет, не нормально. Разве что в модели куча полигонов и она имеет размер в несколько сот мегабайт (впрочем, от такой модели движок, скорее всего, скончался бы, не приходя в сознание). Тут три варианта:
1) В GLScene загрузку 3ds-файлов писал какой-то ламер.
2) Вы что-то не поняли, и загружаете модель неоптимальным способом.
3) Файл с моделью сделан как-то криво.
Соответственно, в первом случае Вы вряд ли что-то сделаете, во втором - разберитесь, как нужно грузить 3ds-файлы, в третьем - смените модель, лучше сперва попробуйте какую-нибудь пирамидку из 4 полигонов загрузить.

STOLEN 12.11.2006 17:02

Вот и мне показалось, что это ненормально. Загружаю я модель способом, который видел в уроке по движку. Я конечно не уверен, что этот способ оптимальный т.к. из исходного листинга написанного в статье я обнаружил сразу 3 грубых ошибки! А сама модель это простой чайник из 3DS max. Не думаю, что у движка должны были возникнуть проблемы с загрузкой этой модели.

pokibor 12.11.2006 18:57

Цитата:

Сообщение от STOLEN (Сообщение 1186516)
Вот и мне показалось, что это ненормально. Загружаю я модель способом, который видел в уроке по движку. Я конечно не уверен, что этот способ оптимальный т.к. из исходного листинга написанного в статье я обнаружил сразу 3 грубых ошибки! А сама модель это простой чайник из 3DS max. Не думаю, что у движка должны были возникнуть проблемы с загрузкой этой модели.

Вообще-то чайник в максе может быть разной степени детализации. Сделай-ка для начала модель кубика, и попробуй загрузить ее. Если опять 4 секунды грузится будет - значит, точно какой-то ламер писал загрузчик для GLScene (у меня в Irrlicht что 3ds, что x одинакого быстро грузятся).

STOLEN 13.11.2006 18:06

pokibor
Да, все вроде стало норм, спасибо за помощь! Но возникает проблема. Так как пока ничего особо мощьного мне не надо продолжаю работать на GLScene. Короче загружаю я в движок свою сцену, но как сделать так, чтобы я мог мышью поворачивать камеру?

pokibor 13.11.2006 19:06

Цитата:

Сообщение от STOLEN (Сообщение 1188936)
pokibor
Да, все вроде стало норм, спасибо за помощь! Но возникает проблема. Так как пока ничего особо мощьного мне не надо продолжаю работать на GLScene. Короче загружаю я в движок свою сцену, но как сделать так, чтобы я мог мышью поворачивать камеру?

Ну так как я GLScene не знаю, то точно сказать не могу, но в любом приличном движке должен быть реализова тот или иной механизм работы с мышью. В Irrlicht, например, все управление реализовано при помощи интерфейса обработчика событий - от него наследуется класс, и переопределяется функция получения события, которая и вызывантся при возникновении любого события, такого как движения мыши, нажатие клавиши и т.п. Разумеется, в функцию передаются и некоторые данные о событии (как далеко сдвинулась мышь по осям, какая клавиша была нажата и пр.). Если же в GLScene ничего подобного не предусмотренно, то остается тебе вручную отлавливать движения мыши - например, в цикле рендеринга (если таковой вообще есть в GLScene) смотреть новые координаты мыши и сравнивать их со старыми. Для этого можно использовать, к примеру, функции Windows API: GetCursorPos - чтобы получить текущую позицию курсора, и SetCursorPos - если ее надо изменить (если ты делаешь вид от первого лица, то после проверки мыши на перемещение нужно поставить курсор опять по центру экрана, чтобы он не мог в один прекрасный момент дойти до края и перестать двигаться дальше).

STOLEN 13.11.2006 23:14

Итак, просмотрев очень очень много бесплатных игровых движков (особенно тчательно просматривал те движки, в которых большое пространство дается новичкам) и пришел к выводу, что на РС их не так уж и много! Сам я изучаю Delphi, за С++ пока не берусь ибо пока это слишком сложный для меня язык. С++ конечно предоставляет хоть какой то выбор движков для поклонников языка (а таковых немало!), но на Delphi я нашел в более мение нормальном состоянии лишь один. Разумеется это GLScene. Конечно он не сравнится с другими более продвинутыми двиглами для С++, но для новичко вроде меня впринцепе подойдет. Больше всего меня взбесило наличиие ошибок в уроках для этого движка! И тут ко мне в голову пришла неожидонная мысль а не создать ли мне свой простинький 3D движок. Начать я решил с простенького квестового двигла от первого лица, где переход от локации к локации происходит щелчком мыши. Не подскажете ли вы где можно достать литературу по написанию собственного движка. И посоветуйте, как лучше это сделать. Заранее блогодарен!

ROLF 14.11.2006 01:43

Если я неошибаюсь то сделать это так можно
Цитата:

Public
mx, my : Integer;
Цитата:

procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
mx:=x; my:=y; //Запомнить координаты мыши

end;

procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if Shift<>[] then begin //Если нажата клавиша
GLCamera1.MoveAroundTarget(my-y, mx-x); //Перемещаем камеру вокруг целевого объекта

GLLightSource1.Position:=GLCamera1.Position; //Пусть источник освещения будет рядом с камерой
mx:=x; my:=y;
end;
end;

pokibor 14.11.2006 09:36

Цитата:

Сообщение от STOLEN (Сообщение 1189485)
Итак, просмотрев очень очень много бесплатных игровых движков (особенно тчательно просматривал те движки, в которых большое пространство дается новичкам) и пришел к выводу, что на РС их не так уж и много! Сам я изучаю Delphi, за С++ пока не берусь ибо пока это слишком сложный для меня язык. С++ конечно предоставляет хоть какой то выбор движков для поклонников языка (а таковых немало!), но на Delphi я нашел в более мение нормальном состоянии лишь один. Разумеется это GLScene. Конечно он не сравнится с другими более продвинутыми двиглами для С++, но для новичко вроде меня впринцепе подойдет. Больше всего меня взбесило наличиие ошибок в уроках для этого движка! И тут ко мне в голову пришла неожидонная мысль а не создать ли мне свой простинький 3D движок. Начать я решил с простенького квестового двигла от первого лица, где переход от локации к локации происходит щелчком мыши. Не подскажете ли вы где можно достать литературу по написанию собственного движка. И посоветуйте, как лучше это сделать. Заранее блогодарен!

Есть книги о программировании на Delphi под OpenGL и DirectX. По крайней мере, должны быть, но их очень мало, так как большинство людей все-таки пишут под эти библиотеки на C++. А вообще, если выяснишь, как данные библиотеки подключить в Delphi, то можешь брать и C++'ные книги (с.м. http://forum.igromania.ru/showthread.php?t=23543), тебе ж нужны только функции и структуры, а они будут и на Delphi очень похожими. Ну а собственно по созданию движка книг не видел, смотри www.gamedev.ru и другие подобные сайты.

Fulcrum 14.11.2006 22:12

Цитата:

Итак, просмотрев очень очень много бесплатных игровых движков (особенно тчательно просматривал те движки, в которых большое пространство дается новичкам) и пришел к выводу, что на РС их не так уж и много! Сам я изучаю Delphi, за С++ пока не берусь ибо пока это слишком сложный для меня язык. С++ конечно предоставляет хоть какой то выбор движков для поклонников языка (а таковых немало!), но на Delphi я нашел в более мение нормальном состоянии лишь один. Разумеется это GLScene. Конечно он не сравнится с другими более продвинутыми двиглами для С++, но для новичко вроде меня впринцепе подойдет. Больше всего меня взбесило наличиие ошибок в уроках для этого движка! И тут ко мне в голову пришла неожидонная мысль а не создать ли мне свой простинький 3D движок. Начать я решил с простенького квестового двигла от первого лица, где переход от локации к локации происходит щелчком мыши. Не подскажете ли вы где можно достать литературу по написанию собственного движка. И посоветуйте, как лучше это сделать. Заранее блогодарен!
Оуу муай гад! Тебе, наивная душа, с десяток умных книжек учить надо, а ты сложную программную систему сос сложной программной архитектурой писать собрался. Впрочем, если нужна будет помощь по конкретным вопросам - стучи в асю =)


А теперь к вопросу об OpenGL. Товарищам, нагло посмевшим заявить о превосходстве DirectX 10 могу предложить посмотреть на следующие расширения:

GL_EXT_geometry_shader4

EXT_gpu_shader4

NV_gpu_program4

pokibor 15.11.2006 10:32

Цитата:

Сообщение от Fulcrum (Сообщение 1191210)
А теперь к вопросу об OpenGL. Товарищам, нагло посмевшим заявить о превосходстве DirectX 10...

Это где ж такие товарищи есть? Как можно заявлять о превосходстве того, чего еще в окончательном варианте нет? А Майкрософту верить - высшая степень наивности :lol: .

Xar 15.11.2006 20:07

Всем доброго времени суток!
Я собирался освоить возможности DirectX 8 для вывода 2D графики. И сразу же столкнулся с проблемой - существуют два способа вывода 2D: через D3DXSprite и через создание квадратных полигонов и текстурирования их - какой из этих способов выбрать? D3DXSprite кажется заметно проще, но, как я подозреваю, у второго способа больше возможностей, в плане вывода графики. Буду очень признателен за любые советы.
P.S: Кроме советов из серии 'зачем осваивать DirectX, если есть хорошие бесплатные 2D движки?'

STOLEN 19.11.2006 02:21

Блин, как я уже писал ранее хочу создать собственный игровой движок. По этой теме прочитал очень много литературы. Но практически во всех статьях и книгах описываются общие принцепы создания, а не сам процесс. Люди, кто нть из вас пробовал написать свой движок? Если кто нть может мне чем то помочь напишите плизз. А то сожусь каждый раз за Delphi и даже незнаю с чего мне начать...Заранее спасибо!
______________________________
Дополняю. Напишу поподробней о моей идее. Короче, хочу написать движок для начала для создания простенького квеста. Главное, чтобы можно было загружать игровые 3D модели и передвигаться. Ни каких мощьных эфектов пока ненадо!

Fulcrum 19.11.2006 03:41

Цитата:

Люди, кто нть из вас пробовал написать свой движок? Если кто нть может мне чем то помочь напишите плизз. А то сожусь каждый раз за Delphi и даже незнаю с чего мне начать...Заранее спасибо!
Давайте сделаем так. Вы рассказываете мне о математическом устройстве вселенной, я же расскажу о Software enginering aka проектировании, организации графического конвейара и рендЭре. Идёт? Начинай, рассказывай.

Цитата:

По этой теме прочитал очень много литературы.
Пожалуйста приведи список ( потом я дам свой, и гарантию, что после внимательного изучения моих книг и небольшой практики - вы станете вполне нормальным программером ) . Если скажешь, что много приводить - я тебе скажу - это невозможно. Понимаешь, друг, надо читать не "Borland DelФи для полных дебилов", где в каждой книге обсуждается главный вопрос человечества: гигиеничное построение кнопочек на формачГах, и животрепещущая дисскусссия ( хз сколько "с" %)) вокруг события OnClick. Эти делфийские аффтары друг друга копируют, причём абсолютной забив член на читающих. И ещё - не читайте господа рузких афтароф, они можут быть прекрассными программистами и столь же беспонтовыми преподавателями.

P. S: Чо то я тожа хочу поотвечать на вопросы в разделе "языги программирования". %)) Лавры Покибора мешают мне спать %)

pokibor 19.11.2006 10:18

Цитата:

Сообщение от STOLEN (Сообщение 1199119)
Но практически во всех статьях и книгах описываются общие принцепы создания, а не сам процесс.

А ты хочешь, чтобы тебе в книги прямо код движка приводили? Нет уж, изволь по изложенным тебе общим принципам создания сам построить интерфейс движка (перед чем было бы нелишним диздок написать), потом понять, какие функции каких библиотек тебе нужны, найти их и разобраться, с какими данными они работают, и только потом начинай кодить. Ни в одной книге тебе пример создания движка не приведут, код того же Irrlicht на пару тысяч страниц точно потянет (это как минимум).
Цитата:

Сообщение от STOLEN (Сообщение 1199119)
Люди, кто нть из вас пробовал написать свой движок? Если кто нть может мне чем то помочь напишите плизз. А то сожусь каждый раз за Delphi и даже незнаю с чего мне начать...Заранее спасибо!
Дополняю. Напишу поподробней о моей идее. Короче, хочу написать движок для начала для создания простенького квеста. Главное, чтобы можно было загружать игровые 3D модели и передвигаться. Ни каких мощьных эфектов пока ненадо!

Как ни странно, я создавал нечто подобное на C# (мой первый и последний опыт создания крупного проекта в .NET, заодно я на примере убедился, что для игр эта штука не подходит в принципе :sml:), и могу сказать: сперва досконально изучи возможности OpenGL или Direct3D (на основе чего ты там его создавать решил) - пойми, какие функции уже реализованы, а какие придется писать ручками. И не "содись каждый раз за Делфи" - тебе до начала кодирования еще много предстоит изучить и написать на русском языке :sml:. Программирование - это не только набивание кода!
Цитата:

Сообщение от Fulcrum (Сообщение 1199183)
потом я дам свой, и гарантию, что после внимательного изучения моих книг и небольшой практики - вы станете вполне нормальным программером

Давай! Мне интересно будет почитать то, что я еще не читал из него.

razor21 19.11.2006 13:37

pokibor
Вот возникли у меня вопросы к тебе по Irrlicht Engine. Так как я в Irrlicht'e ламер вопросы для тебя должны быть простыми.
Первый: необходимо реализовать такую ситуацию: загрузил я из файла 1.bmp(10,70, 70,70) рисунок, как мне сделать так, чтобы при кликании мышкой по этому рисунку он менялся на рисунок этого же файла с координатами(80, 140, 140, 140) Координаты я написал примерно.

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

Третий: как в Irrlicht'e обрабатывать команды с клавиатуры, т.е. мне надо сделать так: чтобы при нажатии клавиши 'W' или стрелки ВВЕРХ этот рисунок передвигался вверх, при нажатии клавиши 'S' или стрелки ВНИЗ рисунок двигался вниз, и соответственно с клавишами 'A' и 'D' или стрелками ВЛЕВО и ВПРАВО.
Подскажи, пожалуйста!

Fulcrum 19.11.2006 14:20

Цитата:

Программирование - это не только набивание кода!
Золотые слова. Набивание кода - чуть ли не последний процесс, если включать в этот процесс отладку. Правда потом следует тестирование системы...

Stolen ответьте себе на следующие вопросы:

1 - Могу ли я адекватно выработать требования системы, компоненты.

2 - Что такое грамотная постановка задачи.

3 - Что такое псевдокод? ( одно из самых важных на мой взгляд условий, после того как я открыл для себя данную технику, процесс программирования стал истинным удовольствием ) То есть, по сути программирование превращается в "чёткую формулировку действия или проблемы на родном языке".


СРАЗУ ПРЕДУПРЕЖДАЮ, ЕСЛИ ПРИВИДЁННЫЙ НИЖЕ ПРИМЕР ПОКАЖЕТСЯ ЛОХОВСКИМ И ДЛЯ ДЕТЕЙ, А ТАКЖЕ НАДУМАННЫМ. ДАЙТЕ МНЕ ЗАДАЧУ ЛЮБОГО УРОВНЯ СЛОЖНОСТИ И Я СМОДЕЛИРУЮ ЕЁ АБСОЛЮТНО ТЕМИ ЖЕ МЕТОДАМИ. НА СЛИШКОМ СПЕЦИФИЧЕСКИЕ ЗАДАЧИ МОГУ НЕ ОТВЕТИТЬ - ВПАДЛУ РАЗБИРАТЬСЯ. ТО ЕСТЬ МОГУ ПРОВЕСТИ ПРОЦЕСС ПСЕВДОКОДА ДЛЯ ВАШИХ ЗАДАЧ.


ПРОЧУВСТВУЙТЕ САМОЕ ГЛАВНОЕ - НИТЬ РАССУЖДЕНИЙ. ЗАМЕТЬТЕ, Я РАССУЖДАЮ КАТЕГОРИЯМИ РЕАЛЬНОГО МИРА А НЕ С++ ИЛИ ДЕЛФИ СИМУЛЫ ИЛИ АДА, ИЛИ ДАЖЕ С#. ТАКЖЕ ЗАМЕТЬТЕ, ЧТО ДАННЫЙ ПРИМЕР ПОХ НА ЧОМ РЕАЛИЗОВЫВАТЬ - ОН ОПИСАН В ТЕРМИНАХ ПРЕДМЕТНОЙ ОБЛАСТИ. ПРИМЕР СЛИШКОМ УПРОЩОН ПО СРАВНЕНИИ С ПСЕВДОКОДОМ РЕАЛЬНОЙ СИСТЕМЫ И МЕТОДОВ, ОПУЩЕНЫ ВСЕ "ИСКЛЮЧЕНИЯ" ( THROW - CATCH - TRY ), И МНОГИЕ ВЕЩИ ТАКЖЕ ОПУЩЕНЫ. ХОТЯ ОН И СИЛЬНО УПРОЩОН, НА МОЙ ВЗГЛЯД ОТРАЖАЕТ РЕАЛЬНУЮ КАРТИНУ. ЕСЛИ Я НАПИСАЛ НЕВРАЗУМИТЕЛЬНЫЙ ПРИМЕР ИЛИ УВАЖАЕМЫЕ ЗДЕШНИЕ ПРОГРАММИСТЫ СЧИТАЮТ ЕГО ЛАМЕРСКИМ - МНЕ ВСЁ РАВНО. Я ХОЧУ ПОКАЗАТЬ СМЫСЛ ПСЕВДОКОДА И МОДЕЛИРОВАНИЯ В ТЕРМИНАХ ПРЕДМЕТНОЙ ОБЛАСТИ А НЕ ЯЗЫКА И СИНТАКСИЧЕСКИХ ПРИПИЗДОНОФФ.


EXAMPLE ПСЕВДОКОД ( САМ ПСЕВДОКОД В МЕТОДЕ ):


Например, твоя задача: релизовать "модель автопилота пассажирского самолёта". Можно конечно выделить автопилот в класс, но я считаю это "действием" самолёта и вполне относится к абстракции реального мира, т. е. действию над абстракцией. Ведь у настоящих самолётов есть режим автопилота, правда? В РЕАЛЬНОЙ СИСТЕМЕ Я ЗДЕЛАЛ БЫ ДРУГОЙ МЕТАД ПРИНИМАЮЩИЙ ПЕРЕЧИСЛЯЕМОЕ ЗНАЧЕНИЕ ТЕКУЩЕГО РЕЖИМА ТОЕСТЬ averangeCurrentRegimeFlight(AUTO_PILOT); Но здесь - тестовый пример.

То есть какую абстракцию реального мира можно выделить в класс? Правильно, самолёт. Я думаю хоть мы и пишем систему автоматизации управления пассажирским самолётом, но необходима иерархия. Ведь самолёты могут быть ( не знаю я эту облать, пример придумал на ходу )
"...." и "....". Создавать буду именно абстрактный класс, пренебрегая тем, что у других самолётов может не быть автопилота, т.е. подразумевая что он есть у всех классов самолётов и что совсем ужасно одинаково работает. В реальной, комерческой системе, которыми я занимаюсь я сделал бы метод автопилота абстрактным, то есть объявил его как


virtual Тип Имя(параметры) = 0;


и переобределил для соответствующих дочерних классов.


абстракция пассажирского самолёта:



class Aeroplane;



/* Небольшой отступ, предположим абстракция "пилота", то есть класс "пилот" захочет установить режим "автопилота" на пилотируемом самолёте ( вполне логично, не находишь?), что ему надо сделать в реальном мире? Правильно, "включить автопилот" - именно поэтому метод "автопилот" самолёта приемлем и однозначен. Это абстракция реального мира - это не конструкция С++. Это - действие, а не сухой синтаксис. */

Остановимся на самом методе автопилота. Обматерим падлу так, что смысл действия можно будет понять ВОБЩЕ НЕ СМОТРЯ РЕАЛИЗАЦИЮ, т. е. ***.СРР файл.

ActiveAutopilot(типы параметров).

/* Заметьте, что если метод ActiveAutopilot принадлежал не классу, данное название было бы грубой ошибкой программиста. Его следовало бы назвать так, чтобы полностью документировать суть и "действие". Например AeroPlane_Autopilot(); */

ПРИСТУПИМ К САМОМУ ПСЕВДОКОДУ:

/* параметры должны уже быть фактическими, но для наглядности оставим формальные, тем более я их не определял, заметьте, что по их названию можно безошибочно определить действие не заглядывая в исходный кот. Если, дружог, в твоём коде определены переменные аля "k", "i", "j" - ты хромосом. Даже в цикле данные нуна объявлять например так:

for(int aeroplaneIndex = MIN_AEROPLANE; aeroplaneIndex != MAX_AEROPLANE; aeroplaneIndex++) Понятный код? Тото же.

Или так:

typedef List<Aeroplane> :: iterator aeroplaneIterator;

for(employeeIterator = employeeList.begin(); employeeIterator != employeeList.end(); employeeIterator++)

/*Если кто либо начнёт визжать о скорости выполнения - пусть выпьет кофе и зарубит чугунным паяльником надпись на члене: данные действия происходят во время компиляции, а не во время выполнения! Это вам не агрессивное использование template, где тип определяется во время выполнения. Также всегда ставте {} даже если выражение одно - опять же вы не потеряете ни одного такта вашего драгоценного працессара.*/


// И так, я уже говорил - параметры используем формальные - нарочно!
// да и вспомогательные классы типа Time тоже легко
//реализуются. Запомните, парни: всё что можете скрыть - скрывайте!

void Aeroplane :: ActiveAutopilot(Time TimeAutonomyflight)
{

// Вот сам псевдокод.

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

void Aeroplane :: ActiveAutopilot(Time TimeAutonomyflight)
{
while(!EndTime(TimeAutonomyflight)) || !currentRoute.EndPoint() ||

!mainPilot.ActiveFlight())

{

// движемся к точке, возвращённой текущей точкой маршрута

MoveTo(currentRoute.CurrentPoint());

// делаем активной следующую точку маршрута.

currentRoute.ActiveNextPoint();

}

mainPilot.ActiveManagerFlight(); // передаём управление
}


Вот собственно был пример псевдокода - СИЛЬНО УПРОЩЁННЫЙ. В РЕАЛЬНОЙ СИСТЕМЕ МЕТОД БЫЛ БЫ В НЕСКОЛЬКО РАЗ ДЛИННЕЕ И ОБРАБАТЫВАЛ ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ. Но суть я думаю понятна - пытайтесь смоделировать ситуацию в терминах предметной области - то есть здесь: в терминах самолёта, автопилота и пилота а не конструкций С++.

Ещё раз посмотрите пример псевдокода, в нём хоть что нибудь говорится о языке программирования и деталях реализации???

/* Пока не закончилось заданное время автономного полёта или недостигнута конечная точка маршрута, и управление небыло передано основному пилоту - движемся по основному маршруту, летим в следующую точку основного маршрута. Повторяем данные действия. После чего передаём управление пилоту и завершаем работу в режиме "автопилот".
*/

Естественно методы MoveTo() ActiveManagerFlight() а также некоторы классы необходимо реализовать предварительно, но! Посмотрите - какая читабельность!

////////////////////////////////////////////////////////////////////////
Продолжаются вопросы к столену:

4 - Чего я вобще хочу? Не хочется ли мне чего то абстрактного а не определённого конкретного?


4 - Какие методы отладки приложений я знаю?

5 - Что представляет собой высокоуровневая архитектура и чем собственно эта дура отличается от проектирования?

6 - Возьми любой header любой своей программы и выложи интерфейс любого класса включая объявление методов здесь. Если я смогу по имени класса и именам параметрофф панять "что это и что оно собой прдеставляет" то ты убийца Кармака иначе - утчи матчасть %))


Цитата:

Как ни странно, я создавал нечто подобное на C# (мой первый и последний опыт создания крупного проекта в .NET, заодно я на примере убедился, что для игр эта штука не подходит в принципе ),
Вполне подходит. С# подходит для производства, весь вопрос в скорости и недостаточности библитек кода. Также АПИ managed DX 9 был реализован сравнительно недавно, в сравнении с анологичными средствами С++. Если интересно могу дать ссылку на запись форума программистов ( в живую ) на КРИ 2006. Блин они 1 час обсуждали подходит ли этот язык. Формат OGG/

Fulcrum 19.11.2006 14:27

Мля тупо метод назвал... уберите Active... просто Aeroplane.Autopilot();
И вобще я жестоко ступил... такого метода не должго быть... должен быть метод принимающий текущее состояние полёта:


enum regimeFlight {MAIN_PILOT_MANAGER, AUTO_PILOT, ETC.}

averangeCurrentRegimeFlight(AUTO_PILOT);

то есть должен быть метод устанавливающий режим полёта а не отдельно автопилота...

Цитата:

Давай! Мне интересно будет почитать то, что я еще не читал из него.
*щас... скоро напишу чиать устанешь*

НО ОСНОВНУЮ ИДЕЮ: ПСЕВДОКОД Я ПОКАЗАЛ.

pokibor 19.11.2006 17:28

Fulcrum
Грандиозно! Надо бы кинуть на твой пост ссылку как на статью.
Цитата:

Сообщение от razor21 (Сообщение 1199828)
Первый: необходимо реализовать такую ситуацию: загрузил я из файла 1.bmp(10,70, 70,70) рисунок, как мне сделать так, чтобы при кликании мышкой по этому рисунку он менялся на рисунок этого же файла с координатами(80, 140, 140, 140) Координаты я написал примерно.

Тебе нужно, во-первых, написать обработчик событий мыши, клавиатуры и прочего, унаследовав его от интерфейса IEventReceiver и переопределить для него метод bool OnEvent(SEvent event). Этот метод будет вызываться при каждом событии от мыши, клавиатуры, GUI и прочего. Таким образом ты сможешь отлавливать события мыши (такие как клики). Ну и при каждом клике проверяешь, не находится ли курсор сейчас на том месте, где у тебя рисунок рисуется (информация об X и Y курсора в момент клика также передается).
Теперь о рисовании рисунка. В твоем случае его нужно рисовать методом
void IVideoDriver::draw2DImage ( video::ITexture * texture, //Рисунок
const core::position2d< s32 > & destPos, //Область, куда он рисуется
const core::rect< s32 > & sourceRect, //Область, которая рисуется
const core::rect< s32 > * clipRect = 0, //Это у тебя будет 0
SColor color = SColor(255, 255, 255, 255), //Это будет SColor(255,255,255,255)
bool useAlphaChannelOfTexture = false //Используется ли Alpha-канал
)
Ну и меняя передаваемую в цикле рендера в sourceRect облать после клика мышью ты добьешься рисования того, что нужно. А вообще см. пример 06.2DGraphics из комплекта примеров, идущего с Irrlicht.
Цитата:

Сообщение от razor21 (Сообщение 1199828)
Второй: почти как первый. Как сделать так, чтобы при наведении курсором мыши на рисунок он менялся. (использовать координаты и файл из первого вопроса).

Тут просто можно отслеживать в цикле рендера координаты курсора. Вот пример из кода моей игры:
Код:

if (buttonRect.isPointInside(device->getCursorControl()->getPosition()))
        driver->draw2DImage(buttonTexture, buttonRect.UpperLeftCorner,
                                        onRect,0,SColor(255,255,255,255),true);
else
        driver->draw2DImage(buttonTexture, buttonRect.UpperLeftCorner,
                                        offRect,0,SColor(255,255,255,255),true);

Здесь device->getCursorControl()->getPosition() - текущие координаты курсора, buttonRect - переменная типа rect<s32>, в которой хранится положение рисунка на экране, isPointInside - метод класса rect, проверяющий нахождение переданной точки в области, ну а про draw2DImage читай выше.

Цитата:

Сообщение от razor21 (Сообщение 1199828)
Третий: как в Irrlicht'e обрабатывать команды с клавиатуры, т.е. мне надо сделать так: чтобы при нажатии клавиши 'W' или стрелки ВВЕРХ этот рисунок передвигался вверх, при нажатии клавиши 'S' или стрелки ВНИЗ рисунок двигался вниз, и соответственно с клавишами 'A' и 'D' или стрелками ВЛЕВО и ВПРАВО.

Абсолютно также при помощи наследования от IEventReceiver и переопределения метода bool OnEvent(SEvent event).
Пример см. в 05.UserInterface. Там, правда, он используется для обработки событий от интерфейса, но абсолюто также его можно использовать для обработки сообытий от кнопок и мыши. Вот пример:
Код:

bool BattleEventReceiver::OnEvent(SEvent event)
{
        if (event.EventType == irr::EET_KEY_INPUT_EVENT)
        {
                if (event.EventType == EET_KEY_INPUT_EVENT)
                switch (event.KeyInput.Key)
                {
                case irr::KEY_SPACE:
                        if (!event.KeyInput.PressedDown) {
                                //Нажата клавиша пробела
                                //Константы остальных см. в хелпе
                        }
                        return true;
        } else if (event.EventType == EET_MOUSE_INPUT_EVENT) {
                switch (event.MouseInput.Event) {
                        case irr::EMIE_LMOUSE_PRESSED_DOWN:
                                //Нажата левая кнопка мыши
                                //в event.MouseInput позиция указателя
                                //Константы остальных см. в хелпе
                        return true;
                }
        }
        return false;
}


razor21 19.11.2006 19:27

Цитата:

Сообщение от pokibor (Сообщение 1200199)
А вообще см. пример 06.2DGraphics из комплекта примеров, идущего с Irrlicht.

Спасибо!
Цитата:

Сообщение от pokibor (Сообщение 1200199)
А вообще см. пример 06.2DGraphics из комплекта примеров, идущего с Irrlicht.

Смотрел. Дык там ведь нет про события мыши! Из того примера я научился рисунки рисовать, но про события с клавы и мыши там нет.
pokibor, пожалуйста можно чуток подробнее про первое и, если можно, по понятнее. :)

razor21 19.11.2006 19:41

Цитата:

Сообщение от pokibor (Сообщение 1200199)
А вообще см. пример 06.2DGraphics из комплекта примеров, идущего с Irrlicht.

Спасибо!
Цитата:

Сообщение от pokibor (Сообщение 1200199)
А вообще см. пример 06.2DGraphics из комплекта примеров, идущего с Irrlicht.

Смотрел. Дык там ведь нет про события мыши! Из того примера я научился рисунки рисовать, но про события с клавы и мыши там нет.
pokibor, пожалуйста можно чуток подробнее про первое и, если можно, по понятнее. :)

pokibor 19.11.2006 21:06

Я ж тебе сказал: пример 05.UserInterface. Там ты поймешь, как наследовать обработчик, и какой метод ему переопределять. Как в этом же методе можно ловить события мыши, я тебе показал в самом нижнем коде выше. Константы для различных клавишь и событий от мыши см. в хелпе. event.KeyInput.PressedDown определяет, нажата клавиша или отпущена. Для мыши нажатие и отпуск кнопок являются различными событиями. event.MouseInput.X и event.MouseInput.Y - координаты курсора мыши в момент нажатия. event.MouseInput.Wheel - на сколько крутанулось колесико мыши (поворот колесика - отдельное событие).
Итак, в итоге ты должен научится отлавливать любые события. Ну а дальше при возникновении события нажатия кнопки мыши ты проверяешь, не в нужном ли тебе rect'е находится курсор и меняешь передаваемый в отрисовку rect. Вроде все понятно изложил, ты главное 05.UserInterface разбери - сразу отпадет большая часть вопросов.

Fulcrum 20.11.2006 05:06

Блин... аж стыдно стало, это был крик души, а не статья.

Насчёт С#. Покибор, если интересует живое обсуждение применения данного языка -

http://www.kriconf.ru/2007/rec/KRI_2...ming_forum.ogg

Правда там обсуждается многие аспекты но С# обсуждался слишком часто.

Jupiter 20.11.2006 05:16

Кстати, на sheppard.ru была интересная идея по созданию своего 3-d движка, заключающаяся в том, чтобы спереть оный у Самого Кармака, ибо код движка второй кваки рассекречен ... Самим!

Fulcrum 20.11.2006 06:16

Цитата:

Кстати, на sheppard.ru была интересная идея по созданию своего 3-d движка, заключающаяся в том, чтобы спереть оный у Самого Кармака, ибо код движка второй кваки рассекречен ... Самим!
Привет из 2006. Рассекресен код Quake 3. Хотя может и нет. У меня есть по крайней мере %)) Только не читал пока нормально...

Jupiter 20.11.2006 06:33

Цитата:

Сообщение от Fulcrum (Сообщение 1200976)
Привет из 2006. Рассекресен код Quake 3. Хотя может и нет. У меня есть по крайней мере %)) Только не читал пока нормально...

Ой, а мы и не знали! Но я просто разместил объяву, че за предъявы! Просто программирование игр не по моей части :).

Fulcrum 20.11.2006 10:22

Цитата:

Ой, а мы и не знали! Но я просто разместил объяву, че за предъявы! Просто программирование игр не по моей части.
Не бань меня :плакаит:


А по какой вы части если не секрет. Уж не сетевое ли программирование часом?

razor21 20.11.2006 14:33

pokibor
ОК! Спасибо!

STOLEN 20.11.2006 21:00

Люди плиз подскажите, подробно как установить физический движок ODE на GLScene. Просто у меня возникли неожиданные траблы с установкой...

razor21 21.11.2006 19:06

pokibor
Неудивительно, но у меня опять возник вопрос, теперь более глобальный :). После того, как я выучил самые основы Irrlicht я бы хотел попробовать создать такую ситуацию: появляется окно, в котором написано мол привет, нажми на эту кнопку и ты начнешь играть (это-то я могу), далее после того как юзер кликает по кнопке появляется город и чувачоg, которым надо управлять в городе. Создать кнопки надписи, загрузить карту города и рисунок человека я смогу, НО проблема у меня вот в чем: как это делается??? Я имею ввиду, что после того, как сделан клик по кнопке появился город и чел. Ну я надеюсь вопрос понятен? Ну вот как делается в играх: дано меню, кликаешь по "Новая игра!" и появляется сама игра.

pokibor 22.11.2006 00:21

Цитата:

Сообщение от razor21 (Сообщение 1203341)
pokibor
Неудивительно, но у меня опять возник вопрос, теперь более глобальный :). После того, как я выучил самые основы Irrlicht я бы хотел попробовать создать такую ситуацию: появляется окно, в котором написано мол привет, нажми на эту кнопку и ты начнешь играть (это-то я могу), далее после того как юзер кликает по кнопке появляется город и чувачоg, которым надо управлять в городе. Создать кнопки надписи, загрузить карту города и рисунок человека я смогу, НО проблема у меня вот в чем: как это делается??? Я имею ввиду, что после того, как сделан клик по кнопке появился город и чел. Ну я надеюсь вопрос понятен? Ну вот как делается в играх: дано меню, кликаешь по "Новая игра!" и появляется сама игра.

Ну сперва тебе нужно подумать о том, в какой момент в память будут загружены "город и чел", и вообще все необходимые тебе каркасы и текстуры. Либо они будут загружены при старте игры, либо после нажатия на кнопку, когда в них появится необходимость. В своей игре я решил эту проблему так: модели всех юнитов грузятся с текстурами при старте игры, а относящаяся к конкретной карте информация (skybox, текстуры ландшафта) - только при старте этой карты. Не могу сказать, что подход правильный, но мне уже что-либо переделывать поздно :sml:. учти, что загрузка ресурсов - процесс не такой быстрый, так что думай, принимая решение.
Теперь по поводу кода. Тут нужно сделать для удобства две отдельные функции:
[code]
void Меню (IrrlichtDevice *Device);//Отвечает за обработку меню
void Игра (IrrlichtDevice *Device);//Отвечает за игру
[code]
Певая функция будет, собственно, рисовать в цикле рендера твое меню, назначит Device'у перед началом рисования обработчик и прочее. В общем, выглядить она будет примерно так:
Код:

void Меню (IrrlichtDevice *Device) {
  Загузить_Или_Создать_Все_Элементы_Меню();
  Device->setEventReceiver(new Обработчик_Событий_Для_Меню());
  while (Не_Надо_Выходить) {
    Нарисовать_Меню();
  }
}

Обработчик же при клике на кнопке "Начать Игру" будет вызывать еще одну функцию:
Код:

void Начать_Игру() {
  for each Элемент_Интерфейса_Меню {
    Элемент_Интерфейса_Меню->setVisible(false);
    //Куда разумней сделать элементы невидимыми, чем удалять, а
    //при выходе из игры назад в меню создавать их.
    //Впрочем, это зависит от того, какие у тебя это
    //элементы и сколько их...
  }
  //Обработчик событий
  delete Device->getEventReceiver();
  Device->setEventReceiver(NULL);
  //Теперь элементы интерфейса невидимы, так как твои рисунки
  //рисуются в цикле рендера меню, а Receiver вызывает обработчики
  //в том же потоке, то, пока мы не выйдем из этой функции,
  //они рисоваться не будут
  //И запускаем обработку игры
  Игра(Device);
  //Теперь, когда мы выйдем из игры, нужно опять показать
  //все элементы меню
  for each Элемент_Интерфейса_Меню {
    Элемент_Интерфейса_Меню->setVisible(true);
  }
  //И восстанавливаем обработчик меню
  Device->setEventReceiver(new Обработчик_Событий_Для_Меню());
}

Ну и осталось написать отвечающую за битву функцию. Буду считать, что ты все, что нужно для битвы, грузишь непосредственно в ней. Если нет, то просто передавай в нее что нужно.
Код:

void Игра (IrrlichtDevice *Device) {
  Загрузить_Все_Каркасы_И_Текстуры_Игры();
  Device->setEventReceiver(new Обработчик_Событий_Для_Игры());
  while(Не_Нужно_Выходить_Из_Игры) {
    Рисуем_И_Обрабатываем_Все_Что_Нужно_Для_Игры();
  }
  //Мы выходим из игры
  Device->getSceneManager()->clear();//Очищаем сцену от всех node'ов
  //Теперь удаляем анимированные каркасы, простые каркасы и текстуры
  for each Анимированный_Каркас
  {
    Device->getSceneManager()->getMeshCache()->removeMesh(Анимированый _Каркас);
  }
  for each ПростойКаркас
  {
    ПростойКаркас->drop();
  }
  for each Текстура
  {
    Device->GetVideoDriver()->removeTexture(Текстура);
  }
  //Обработчик событий
  delete Device->getEventReceiver();
  Device->setEventReceiver(NULL);
  //Ну и в итоге у нас чистая сцена, память очищена - и мы
  //спокойно возвращаемся в меню
}


razor21 22.11.2006 15:05

pokibor
Большое тебе спасибо! Но у меня по приведенному тобой коду есть несколько вопросов.
Первый: в функции void Menu (IrrlichtDevice *Device) есть цикл, так вот у меня вопрос связанный с его условием выполнения, т.е. что такое "Не_Надо_Выходить".
Второй: Элемент_Интерфейса_Меню, я так понимаю, это может быть button, static text, scroll bar, да? Тогда писать надо так:
Код:

for each button
{  button->setVisible(false);
}
 for each staticText
{ static->setVisible(false);
}

Или все элементы можно скрыть так:
Код:

for each button
{ button->setVisible(false);
  static->setVisible(false);
  scroll->setVisible(false);
}

Как правильно?
И наконец :) третий вопрос: в функции void Game(IrrlichtDevice *Device) тоже есть цикл, объясни, что писать в его условном выражении.
Спасибо!

pokibor 22.11.2006 15:49

Странный вопрос. Не_Надо_Выходить - это некое условие, как его написать - твое дело. Например, если у тебя будет некая переменная is_exit, которая по умолчанию false, а когда пользователь щелкнет на кнокпе "Выход" станет true - то пиши while (!is_exit). Вообще, ты как-то слишком буквально понимаешь приведенный выше псевдокод.
Теперь по поводу второго вопроса:
setVisible в Irrlicht определено в интерфейсе IGUIElement, от которого наследуют все конкретные элементы интерфейса. А как ты их будешь перебирать (тут некоторый пробел в моих знаниях... если не ошибаюсь, в стандарте C++ никаких for each нет, она введена была в .NET, и к Win32-приложениям отношения иметь не должна) - твое дело. Хочешь - пихать ссылки на все создаваемый тобой элементы интерфейса в один массив или вектор на IGUIElement *, хочешь - разделяй по типам, хочешь - вообще заводи отдельные переменные для каждого добавляемого элемента и вручную прописывай setVisible им всем.

razor21 22.11.2006 19:32

pokibor
Большое спасибо! Теперь я понял, как энто все реализуется! Еще раз спасибо!
Кста, как полноэкранный режим врубить?

pokibor 22.11.2006 21:11

Цитата:

Сообщение от razor21 (Сообщение 1205034)
Кста, как полноэкранный режим врубить?

Кошмар! Ты хоть хелпом пользуешься и примеры разбираешь? В createDevice есть соответствующая переменная:
Код:

IrrlichtDevice* irr::createDevice (
  video::E_DRIVER_TYPE  deviceType = video::EDT_SOFTWARE, 
  const core::dimension2d< s32 > &  windowSize = core::dimension2d< s32 >(640, 480), 
  u32  bits = 16, 
  bool  fullscreen = false,  //Вот и оно. Что передать, надеюсь, сам догадаешься
  bool  stencilbuffer = false, 
  bool  vsync = false, 
  IEventReceiver *  receiver = 0, 
  const char *  sdk_version_do_not_use = IRRLICHT_SDK_VERSION
 )


razor21 23.11.2006 13:35

Бафое спасибо!

ZaVok 27.11.2006 17:03

Ну чтож, сюда, так сюда. Шейдеры говорите? А можно поподробней?
Я думал, что шейдеры только и умеют, что воду красивую делать, да кубики блестящие рисовать :) а на счет дырок от пуль я не знаю. Можете мне, остолопу объяснить, как такое сделать? (речь идёт о ирлихте (для тех, кто не в теме)) желательно исходничком :)

pokibor 27.11.2006 21:00

Нет, не можем. Потому что это один из тех вопросов, по которым впору книжки писать. Так что вооружайся книжками и статьями из Интернета - и впреред. Как шейдеры в Irrlicht использовать, смотри идущий с Irrlicht пример 10.Shaders, а вот как их писать - учись. Могу лишь сказать, что тебе неплохо бы сразу выбрать, какую библиотеку ты будешь использовать - Direct3D или OpenGL (в Irrlicht, как ты должен знать, можно использовать любую из них). В первом случае после изучения основ принимайся за HLSL, во втором - за GLSL. Ну а некоторую общую информацию по шейдерам смотри http://forum.igromania.ru/showpost.p...&postcount=594.
Еще тебе, кстати, придется с версией определится, но про возможности каждой версии вершинных и пиксельных шейдеров узнаешь в процессе изучения онных.

DremLIN 28.11.2006 12:35

Вопрос по irrLight'у:

Как сделать поверхность земли не по карте высот (*.bmp), а взять значение высоты конкретной ячейки из внешнего массива?

TerrainNode - этого не позволяет :(

pokibor 28.11.2006 12:42

Цитата:

Сообщение от DremLIN (Сообщение 1220556)
Вопрос по irrLight'у:
Как сделать поверхность земли не по карте высот (*.bmp), а взять значение высоты конкретной ячейки из внешнего массива?
TerrainNode - этого не позволяет :(

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

ZaVok 28.11.2006 12:44

Так почему же ты считаешь, что шейдерами делать следы от пуль в стенах проще? Испокон веков это делали спрайтами, а вот теперь ты предлагаешь делать их шейдерами, утверждая что так проще. Проще кому? Компьютеру при расчётах? отлично, но лично я пока за этим не гонюсь :). Мне бы как-нибудь попроще для написания (то есть проще в реализации). есть-ли какая-гибудь возможность определить вектор нормали того полигона, с которым происходит коллизия?

pokibor 28.11.2006 13:42

Цитата:

Сообщение от ZaVok (Сообщение 1220576)
Так почему же ты считаешь, что шейдерами делать следы от пуль в стенах проще?

Я не говорил, что проще. Я говорил, что это будет работать быстрее, а потому правильнее.

Цитата:

Сообщение от ZaVok (Сообщение 1220576)
Испокон веков это делали спрайтами, а вот теперь ты предлагаешь делать их шейдерами, утверждая что так проще.

Ты не прав, испокон веков никаких следов от пуль в стенах не было и в помине, все движки были 2D, а любому пользователю хватало 640 Kb оперативки.

Цитата:

Сообщение от ZaVok (Сообщение 1220576)
Проще кому? Компьютеру при расчётах? отлично, но лично я пока за этим не гонюсь :).

Я тебе предложил несколько вариантов на выбор. А без изучения шейдеров ты все равно далеко в игровом программировании не уедешь.
Цитата:

Сообщение от ZaVok (Сообщение 1220576)
Мне бы как-нибудь попроще для написания (то есть проще в реализации). есть-ли какая-гибудь возможность определить вектор нормали того полигона, с которым происходит коллизия?

Насколько я понимаю, для определения коллизии ты используешь getCollisionPoint? Так вот, в него последним параметром по ссылке идет переменная типа triangle3df, в которую записывается, с каким треугольником (т.е. собственно полигоном) столкнулся луч. А у треугольника есть метод getNormal(). Вот тебе и нормаль. Ты хоть хелп читай в отношении тех функций и классов, которыми пользуешься.

ZaVok 30.11.2006 19:25

А это правда, что у ирлихта большая нелюбовь к 3ds файлам новой версии 3DMax-а? Есть-ли способ их подружить, если это не сложно конечно? А то меня как-то не прельщает конвертить файлы :(
А какой формат файлов у ирлихта самый "любимый"?

pokibor 30.11.2006 20:50

Цитата:

Сообщение от ZaVok (Сообщение 1226816)
А это правда, что у ирлихта большая нелюбовь к 3ds файлам новой версии 3DMax-а? Есть-ли способ их подружить, если это не сложно конечно? А то меня как-то не прельщает конвертить файлы :(
А какой формат файлов у ирлихта самый "любимый"?

Нет, неправда. Правда в том, что 3d max конветит модели в 3ds файлы (особенно анимацию) будто левой пяткой через правое плечо, потму лучше с ними не связываться. Я лично использую x-файлы, но с ними тоже есть некоторые проблемы - во первых, Irrlicht версии 0.14 не понимал, если в x-файле было больше одного анимированного каркаса, во-вторых, он понимал только текстовые x-файлы. Как с этим в более поздних версиях не знаю - я хоть и перевел игру на 1.0, но ее возможности относительно каркасов не изучал. Но могу сказать, что описаные выше ограничения вовсе не так критичны. Модели по-любому во всех играх приводят к одному каркасу (в крайнем случае пихни каждый каркас в отдельный файл, кроме того если каркас не анимирован - проблем нет, а может уже и баг с анимацией исправили), а текстовый файл... ну если считаешь, что место много жрет - жми зипом, благо Irrlicht может файлы из зипов вытаскивать.
Экспортер для 3D Studio Max в x качай здесь: http://www.andytather.co.uk/Panda/di...downloads.aspx.

DremLIN 01.12.2006 01:06

Перевернуть координаты XYZ -> XZY
 
Имеется ли способ привести координаты ирлихта в соответствие с привычным:
X - горизонтальная ширина (вправо-влево от зрителя)
Y - горизонтальная глубина (ближе-дальше от зрителя)
Z - вертикальная высота
Чтобы где нибудь в заголовке один раз прописать и потом пользоваться...

ZaVok 01.12.2006 06:13

А как на счёт My3D? тем более, что этот эксопртер есть в поставке с ирлихтом.

pokibor 01.12.2006 09:21

Цитата:

Сообщение от DremLIN (Сообщение 1228122)
Имеется ли способ привести координаты ирлихта в соответствие с привычным:
X - горизонтальная ширина (вправо-влево от зрителя)
Y - горизонтальная глубина (ближе-дальше от зрителя)
Z - вертикальная высота
Чтобы где нибудь в заголовке один раз прописать и потом пользоваться...

Вроде нет, привыкай. Тем более что координаты Irrlicht и есть привычные, они соответствуют координатам Direct3D и OpenGL. А то что в 3D MAX вставили другую систему координат - это вопрос к его авторам. Так что либо в 3D MAX систему координат меняй (там это наверняка можно, правда не знаю, как), либо просто привыкни к тому, что координаты Y и Z из 3D Max меняются местами.
Кстати, знаешь, почему Z-буффер так назван? Потому что координата Z отродясь уходила вглубь сцены. Почему в 3D MAX решили выпендрится - загадка.
P.S. Хотя можешь, конечно, воспользоватся C'шным препроцессором. Например, чтобы задавать вектора в удобной тебе форме, определить макрос
Код:

#define vector3df_max(X,Y,Z) vector3df(X,Z,Y)
и так далее...

Цитата:

Сообщение от ZaVok (Сообщение 1228315)
А как на счёт My3D? тем более, что этот эксопртер есть в поставке с ирлихтом.

А никак. Формат какой-то непонятный, когда я пробовал его использовать - он не понимал анимацию и вообще смысла в каком-то неизвестном формате я не вижу. X, 3DS - известные форматы. MD2 - в общем-то, тоже. А My3D откуда взялся - непонятно.

DremLIN 01.12.2006 19:57

Скорость перемещений камеры FPS
 
Помогите разобраться пожалуйста

Масштаб поверхности 1:1:1
FPS-камера управляемая клавишами-стрелками летает как угорелая поймать интересующий меня объект, а тем более рассмотреть его со всех сторон практически невозможно...

Хочу замедлить камеру....

pokibor 01.12.2006 20:18

Цитата:

Сообщение от DremLIN (Сообщение 1230050)
Помогите разобраться пожалуйста
Масштаб поверхности 1:1:1
FPS-камера управляемая клавишами-стрелками летает как угорелая поймать интересующий меня объект, а тем более рассмотреть его со всех сторон практически невозможно...
Хочу замедлить камеру....

Млин, читай хелп! В функции addCameraSceneNodeFPS третим параметром идет moveSpeed (по умолчанию = 500.0). Догадываешься, за что этот параметр отвечает? Будут еще подобные вопросы - десять раз перечитай параметры всех функций и классов, так или иначе касающихся вопроса, а потом только задавай. :mad:

ZaVok 02.12.2006 11:34

кто-нибудь знает физический движок newton?
Если знаете, подскажите пожайлуста, как сделать следующее.
У этого невтона есть пример для ирллихта, в котором можно полетать камерой, и постреляться ящичками. после небольшой модификации, я сделал так, чтоб ящички стрелялись "очередью". Таким образом очень быстро настреливается предел в 512 ящиков, и игра вылетает.
Чтоб она не вылетала я хочу удалять первый кубик, и (они там как я понял хранятся в массиве) смещать их в массиве на один влево (надеюсь, понятно обьяснил). но чего-то у меня ничего не выходит.
Посмотрите пожайлуста этот пример, и объясните как это сотворить.

BlueSky 04.12.2006 08:38

Недавно наткнулся на самописный модуль для иррлихта, позволяющий в нем использовать TrueType шрифты.
Одна из ссылок: http://www.zgock-lab.net/IrrFreeType.zip
Хотя я нашел "нашу" разработку. Правда еще не пробовал ею пользоваться - мне еще до этого как до москвы в позе зю. :( Движок оказался хорошим, мощным, но документация рассчитана явно не на новичка, а русскоязычные ресурсы по этому движку практически отсутствуют. :(

pokibor 04.12.2006 09:40

Цитата:

Сообщение от BlueSky (Сообщение 1238033)
Недавно наткнулся на самописный модуль для иррлихта, позволяющий в нем использовать TrueType шрифты.
Одна из ссылок: http://www.zgock-lab.net/IrrFreeType.zip

Смысл? Поставляемая с Irrlicht утилита IrrFontTool позоволяет строить по этим самым TrueType шрифтам понимаемые Irrlicht битмепы. Сдается мне, данная библиотека делает то же самое, только "на лету", вот только битмеп редактировать проще, чем TrueType, а если кажется, что места многовато занимает - спокойно можно жать хотя бы тем же png, зато будет некоторая экономия во времени загрузки программы.
Цитата:

Сообщение от BlueSky (Сообщение 1238033)
Движок оказался хорошим, мощным, но документация рассчитана явно не на новичка, а русскоязычные ресурсы по этому движку практически отсутствуют. :(

Это ж какой должна быть документация, чтобы тебе понравится? Документация по Irrlicht как раз таки отличная, а учится нужно не по ней, а по примерам, с Irrlicht идущим. Вот в них, в комментариях, все так подробно описано, что и новичок поймет. Если этот новичок C++ хорошо знает и основы трехмерной графики, конечно, в противном случае ему движок осваивать бесполезно - все равно ничего путного не напишет.
P.S. А без знания английского языка (хотя бы технического) в геймдев вообще бесполезно лезть.

ZaVok
Тут подумал - если физика интегрируется в Irrlicht, то вполне может быть, что, удалив node в Irrlicht, ты удалишь его и из физики. А удалить node в Irrlicht можно методом ISceneManager::addToDeletionQueue(ISceneNode *node);

BlueSky 05.12.2006 00:41

Там в хелпе сказано, что можно не заморачиваться битмапами, а просто использовать любой TrueType шрифт. Что, в общем-то, дает гибкость в поддержке любых языков, если использовать что-нить юникодное, например arial_uni.

Ситуация как раз в том, что я не проггер, о трехмерной графике знаю только основы и то я уже начинаю в этом сомневаться. Единственное, с чем нет проблемы - это с английским, как-никак все-таки кандидатский минимум дает о себе знать. :) После его сдачи технический английский не знать практически невозможно.
А что я хочу видеть в хелпе для новичков? Туториалы, это, конечно, хорошо, но можно было начать немного по-другому, имхо. Хотя, конечно, может быть что я просто не могу нормально разобраться в доке, ибо ся только читать умею более-менее, а сам испорчен кандидатским зачетом по делфям.
Тогда вопрос - где бы надыбать ссылку на что-нить начальное или среднее по применению namespaces или как там оно правильно называется? Главное, чтобы не шлак был, а что-то нормальное. И, желательно, на русском (ну ненавижу я английский, просто ненавижу :/ ).

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

pokibor 05.12.2006 09:47

Цитата:

Сообщение от BlueSky (Сообщение 1240977)
Там в хелпе сказано, что можно не заморачиваться битмапами, а просто использовать любой TrueType шрифт. Что, в общем-то, дает гибкость в поддержке любых языков, если использовать что-нить юникодное, например arial_uni.

:lol:
Кто тебе мешает из того же юникодного создать битмап с поддержкой всех нужных языков? Битмап создается нажатием одной кнопки, так что "заморочкой" это назвать никак нельзя.
Цитата:

Сообщение от BlueSky (Сообщение 1240977)
Ситуация как раз в том, что я не проггер, о трехмерной графике знаю только основы и то я уже начинаю в этом сомневаться.

Если ты не программист - зачем тебе тогда сдался C++ вообще и Irrlicht в частности? Вообще-то движки являются чем-то вроде вершины программистской мысли. Чтобы разобраться с Irrlicht, нужно как минимум хорошо знать C++ (namespace'ы, ссылки, наследование, виртуальные функции - это все должно у тебя от зубов отлетать). Другие хорошие (т.е. не Blitz и прочий мусор) движки - не исключение, они тоже требуют отличного знания языка (не говоря уже о том, что без него тебе от Open Source не будет никакого толка).
Цитата:

Сообщение от BlueSky (Сообщение 1240977)
Единственное, с чем нет проблемы - это с английским, как-никак все-таки кандидатский минимум дает о себе знать. :) После его сдачи технический английский не знать практически невозможно.
...
(ну ненавижу я английский, просто ненавижу :/ )

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

Сообщение от BlueSky (Сообщение 1240977)
А что я хочу видеть в хелпе для новичков? Туториалы, это, конечно, хорошо, но можно было начать немного по-другому, имхо. Хотя, конечно, может быть что я просто не могу нормально разобраться в доке, ибо ся только читать умею более-менее, а сам испорчен кандидатским зачетом по делфям.

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

Сообщение от BlueSky (Сообщение 1240977)
Тогда вопрос - где бы надыбать ссылку на что-нить начальное или среднее по применению namespaces или как там оно правильно называется? Главное, чтобы не шлак был, а что-то нормальное. И, желательно, на русском .

Тут кидать нечего. namespace - пространство имен (ты ж английский знаешь?). Существуют они для того, чтобы групировать функции и классы в одном логическом объекте. Внутри одного namespace'а названия всех входящих в него функций и классов должны быть уникальными. Если какая-то функция или класс объявлена внутри namespace'а, то для ее использования нужно перед ней писать имя namespace'а и после него два двоеточия. namespace'ы могут быть вложенными друг в друга. Чтобы не писать каждый раз перед объектом из namespace'а его имя, можно один раз написать using namespace <имя namespace>; и дальше писать имена объектов из этого namespace без всяких префиксов.
Например, все интерфейсы irrlicht включены в один namespace irr. Непосредственно в этот namespace входят такие интерфейсы, как IEventReceiver, IrrlichtDevice и прочие "общие" объекты. В irr вложе несколько namespace'ов: core содержит все основные классы трехмерной графики, такие как vector2d, vector3d, maxtrix4 и прочие, а также функции их обработки; scene - все интерфейсы, используемые для работы с трехмерной сценой, такие как IMesh, ISceneNode при прочие. Ну и так далее.
потому если не делать никаких using, то тебе придется везде писать:
irr::IrrlichtDevice
irr::scene::ISceneNode


а если включить все namespace'ы irrlicht:
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

, то можно писать без префиксов:
IrrlichtDevice
ISceneNode

Надеюсь, понял.

Цитата:

Сообщение от BlueSky (Сообщение 1240977)
P.S. А может с такими пожеланиями как у меня будет проще заюзать какой-то из готовых опен-сорс движков, основанных на иррлихт, в которых уже прикручено все, что для счастья нужно?

Irrlicht сам по себе есть отличный Open Source - движок. Никаких "движков, основанных на нем" нет.

BlueSky 05.12.2006 14:15

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

pokibor 05.12.2006 15:17

Цитата:

Сообщение от BlueSky (Сообщение 1241797)
А вот и есть движки использующие иррлихт в качестве рендерера. С прикрученными уже либами для работы с сетью, звуком и скриптовым языком. На одном из таких движков писаны серьезные коммерческие игры. Ссылка была где-то с оффсайта иррлихта. Попозже будет время поискать и я ссылочку выложу.

Это просто "Irrlicht с прикрученными либами". Движок подразумевет собственную структуру и взаимосвязь компонентов. Для Irrlicht уже выложена звуковое дополнение, а работа с сетью, имхо, есть штука достаточно индивидуальная, чтобы ее как-то универсализировать; ее я рекомендую делать на winsock (даже не на DirectPlay!) без всяких сторонних примочек.
Что же касается скриптового языка... а зачем оно надо? C++ ни один язык не обойдет по функциональности, так что скриптам остаются разве что рантаймовые задачи(например, скрипты AI или уровень, описаный скриптами). Но для реализации таких штук нужно как минимум неплохо знать алгоритмы синтаксического анализа, даже если язык какой-то уже есть (иначе как ты будешь разбирать предложения этого языка? Собственно разбирать их, конечно, и сторонняя функция может, но вот понимание когда какое правило срабатывает и в какой последовательности конструкции языка попадают в стек необходимо).

ZaVok 06.12.2006 17:10

BlueSky ты про RABCAT говоришь? Очень жаль, но их страницы я так и не нашёл.

Я хочу спросить, можно-ли в один node загрузить два отдельно текстурированных меша?

pokibor 06.12.2006 18:20

Цитата:

Сообщение от ZaVok (Сообщение 1244914)
Я хочу спросить, можно-ли в один node загрузить два отдельно текстурированных меша?

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

ZaVok 06.12.2006 19:57

просто с другом хотим сделать игру, с рандомальной генерацией уровней.
на словах это выглядит так:
с помощью хитрого алгоритма генерим лабиринт и сохраняем его в массив, таким образом, что "0"-это пустая комната, а "1" - комната забитая пространством(то-есть стеной). объекты (меши) будем грузить из файла, так как хотим , чтоб стены были у нас фигурные :) Но создавать массив из node не очень хотелось, но как я погляжу, всё же придется.

Так же хотим сделать игру, с демонтажем стен. То есть, с имх уничтожением. Но вот в чем проблема, не пересчт=итывать ведь нам каждый раз дерево коллизий? МОжно в ирлихте создать дерево коллизий для каждого обьекта карты в отдельности, чтоб потом с ним было удобней работать?
А так же, ну очень нужен алгоритм генерации лабиринтов. Тот что мы сделали, выдает какую-то странную лабиринту. :(. три раза подряд сделал одну и ту же карту. Нам поможет даже не сам программный код, а сам алгоритм.

pokibor 06.12.2006 20:31

Цитата:

Сообщение от ZaVok (Сообщение 1245378)
объекты (меши) будем грузить из файла, так как хотим , чтоб стены были у нас фигурные :) Но создавать массив из node не очень хотелось, но как я погляжу, всё же придется.

Тут есть другой вариант: поверхность является одним каркасом и генерится в программе (это можно сделать, например, холмами - HillPlaneMesh, хотя тебя тут больше вершины, а не холмы интерисуют), а текстуры на этом деле шейдером рисуются.
Цитата:

Сообщение от ZaVok (Сообщение 1245378)
Так же хотим сделать игру, с демонтажем стен. То есть, с имх уничтожением. Но вот в чем проблема, не пересчт=итывать ведь нам каждый раз дерево коллизий?

В вашем случае проще сделать коллизии самостоятельно, а не пользоваться встроенными. У вас же структура уровня дискретная! Заодно это и быстрее работать будет.
Цитата:

Сообщение от ZaVok (Сообщение 1245378)
А так же, ну очень нужен алгоритм генерации лабиринтов. Тот что мы сделали, выдает какую-то странную лабиринту. :(. три раза подряд сделал одну и ту же карту. Нам поможет даже не сам программный код, а сам алгоритм.

Возможно, вы просто randomize (то бишь srand) сделать забыли.
А вообще можете использовать любые алгоритмы генерации шума, например http://freespace.virgin.net/hugo.eli...s/m_perlin.htm.

DremLIN 07.12.2006 00:11

Самопальный Mesh (Vertex & Indices)
 
Просьба не бить ногами, а помочь мне ради бога разобраться как сделать сабж.

Хочу получить четырехугольную пирамиду.
Создаю (как в уроке 3) пять вершин (Vertex):
000, 200, 202, 002, 121
начинаю их соединять (строю индексы Indices):

u16 Indices[] = { 0,4,1, 1,4,2, 2,4,3, 3,4,0 };

ну и так далее...

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

И вообще простроение самопального меша в иррлихте программным способом сильно отличается от привычного в 3дМаксе.

Хотелось бы разобраться, чтобы научиться делать сложные фигуры, состоящие из простых и т.д.

В хелпе ничего про это ненаписано мож ссылочку кто знает где почитать? А?

pokibor 07.12.2006 00:19

Цитата:

Сообщение от DremLIN (Сообщение 1246131)
Просьба не бить ногами, а помочь мне ради бога разобраться как сделать сабж.
Хочу получить четырехугольную пирамиду.
Создаю (как в уроке 3) пять вершин (Vertex):
000, 200, 202, 002, 121
начинаю их соединять (строю индексы Indices):
u16 Indices[] = { 0,4,1, 1,4,2, 2,4,3, 3,4,0 };
ну и так далее...
Вопрос: Имеет ли принципиальное значение в каком порядке обходить вершины, или нет. (замечено, что при различных комбинациях индексов может вообще не получиться никакой фигуры... только рваные части в лучшем случае)

Пока что мне не приходилось осваивать создание каркаса с нуля, но, основываясь на опыте компьютерной графики, могу сказать: порядок обхода имеет огромное значение. От него, к примеру, зависит нормаль. Хотя в Irrlicht есть возможность задавать нормаль вершинам вручную (хм... вообще, такая возможность есть везде, конечно), но нормаль по умолчанию в любом случае зависит от порядка обхода. А от нормали, между прочим, зависит видимость полигонов с той или иной стороны.

Цитата:

Сообщение от DremLIN (Сообщение 1246131)
И вообще простроение самопального меша в иррлихте программным способом сильно отличается от привычного в 3дМаксе.
Хотелось бы разобраться, чтобы научиться делать сложные фигуры, состоящие из простых и т.д.

Ну тут, пожалуй, проще научится на личном опыте...

BlueSky 07.12.2006 04:03

Вот ссылочка на RABCAT: http://www.rabcat.com/ (РС игры на иррлихте для консолей).
А вообще прожекты мона смотреть тут: http://irrlicht.sourceforge.net/scre...-projects.html
Хотя там ссылочка на рабкат не рабочая получается. :(
Ща вот пытаюсь соорудить себе экзампл сам. :) Т.е. встает какая-то проблема - лезу по стандартным экзамплам в поисках того что мне нужно и пытаюсь разобраться, а не тупо копи-пастить. В результате порядок следования получается намного более интересным и логичным. Получается типа как мини игру делаю. :) Обстоятельно, логично и по порядку.
Если кому-то интересно, то могу потихоньку делиться своими наработками с елико возможно подробными комментами на русском. Авось кому поможет освоиться. Так что если кого-то действительно интересует, то пишите тут, тут же и буду выкладывать куски кода, заодно, скорее всего, буду на http://www.elite-games.ru/conference...f03ef2f42757a0 выкладывать их же параллельно (модеры, не сочтите за рекламу другого сайта, за флуд и за оффтоп).

ZaVok 08.12.2006 06:10

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

(ПС я только что проснулся, по клавишам ещё плохо попадаю, но вроде всё нормально написано.)

pokibor 08.12.2006 09:34

Цитата:

Сообщение от ZaVok (Сообщение 1249341)
А какие у ирлихта возможности по созданию воды?
Просто та вода из примера, это не вода, а какой-то обман. план колыхающийся. Даже если наложить текстурку воды, получится убожество, которое сейчас водой не считают. А ведь хочется чтоб с отражениями, преломлениями...
(ПС я только что проснулся, по клавишам ещё плохо попадаю, но вроде всё нормально написано.)

Изучай шейдеры. Всю воду сейчас делают ими, если ты не в курсе.

BlueSky 09.12.2006 04:48

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

pokibor 09.12.2006 10:46

Цитата:

Сообщение от BlueSky (Сообщение 1252215)
Кстати вот что по поводу шрифтов. Скачивает твою гаму какой-нить японец, а гама сетевая и чат в ней встроен. Хочет бедный японец пообщаться со своими сородичами на родном языке, а ему фигу с маслом. И будет он тебе мозг долбать, чтобы ты сделал шрифт с иероглифами. И тут ты начинаешь долбаться мозгом, ибо ты иероглифов не знаешь...
Так а не проще ли сразу прикрутить какой-нить юникодный шрифтец и не мучаться? По ходу вообще можно без проблем обеспечить возможность юзверям самим использовать понравившийся шрифт. Разве это плохо?

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

BlueSky 09.12.2006 16:32

В eve-online шрифт чата можно использовать абсолютно любой и этот шрифт никак не касается остальных элементов интерфейса, что, я считаю, очень даже правильно. Так что тотальная замена всех шрифтов и не предлагалась.

DremLIN 09.12.2006 20:18

Самопальный Mesh (editing runtime)
 
Кто нибудь знает как изменить свойства меша в runtime (тоесть во время работы программы)?

Согласно документации свойства меша изменяются только на этапе создания, а после добавления в мешбуфер и создания на его основе узла сцены (SceneNode) - фигвам.

Или я ошибаюсь?

pokibor 10.12.2006 01:43

Цитата:

Сообщение от DremLIN (Сообщение 1254208)
Кто нибудь знает как изменить свойства меша в runtime (тоесть во время работы программы)?
Согласно документации свойства меша изменяются только на этапе создания, а после добавления в мешбуфер и создания на его основе узла сцены (SceneNode) - фигвам.
Или я ошибаюсь?

Ошибаешься. Хотя это смотря что ты понимаешь под свойствами меша. На этапе выполнения можно как создать меш с нуля, так и изменить что-то у существующего: координаты вершин, другие их свойсства (нормали, текстурные координаты, ...), разве что нельзя новые добавить (хотя если создать свой класс Mesh и свой SceenNode - можно и такую фишку предусмотреть). Говори подробнее, что тебе нужно изменить.

DremLIN 10.12.2006 15:26

Цитата:

Сообщение от pokibor (Сообщение 1255350)
Ошибаешься. Хотя это смотря что ты понимаешь под свойствами меша. На этапе выполнения можно как создать меш с нуля, так и изменить что-то у существующего: координаты вершин, другие их свойсства (нормали, текстурные координаты, ...), разве что нельзя новые добавить (хотя если создать свой класс Mesh и свой SceenNode - можно и такую фишку предусмотреть). Говори подробнее, что тебе нужно изменить.

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

Схема поверхности у меня такая (Классы все самописные):
Базовый меш тайла 1х1.
Меш блока (квадрата) поверхности земли, в "MeshBuffers" которого находятся 10 000 (100х100) базовых мешей тайлов, каждый в своей позиции.
Из меша поверхности земли формируется OctTreeSceneNode и далее в runtine работаем уже с OctTreeSceneNode, в качестве минимального куска поверхности, по необходимости подгружая и выгружая другие куски...

pokibor 10.12.2006 17:00

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

DremLIN 10.12.2006 21:50

Цитата:

Сообщение от pokibor (Сообщение 1256925)
Ну так тебе нужно только изменить позиции затронутых взрывом вершин, а также их текстурные координаты. Разумеется, в текстуре должно быть все необходимое.

Если я правильно понял, то в SceneNode невозможно использовать индивидуальные материалы, назначенные мешам, точнее мешбуферам?

Выдержка из доки:
Цитата:

irr::scene::IMeshBuffer Class Reference
Struct for holding a mesh with a single material.

что мой електронный переводчик перевел отвольного так:
IMeshBuffer - Структура для хранения сетки с единственным материалом.


А я назначаю материалы отдельным мешбуферам, но похоже напрасно я это делал. Из вышеприведенной цитаты, следует понимать, что при создании SceneNode все ранее назначенные мешам материалы будут заменены на материалы SceneNode?

И единственный способ все-таки сменить текстуру - это поменять текстурные координаты Vertex' ов (TCoords), чтобы они указывали на другой графический блок в ранее загруженном графическом файле?

Других способов нет?

pokibor 10.12.2006 23:35

А зачем тебе другие? Этот - самый простой. Ты соеденяешь все возможные текстуры в один большой рисунок, накладываешь его как текстуру, и получаешь возможность быстро изменить что угодно. В случае, если у тебя вся земля представляет собой один каркас, такой вариант оптимальный.

DremLIN 11.12.2006 00:00

Я абсолютно не в рубаюсь в Vertex'совые TCoord и иже с ними... :(
И разобраться немогу, хотя бьюсь уже несколько дней .....

Вот например:

pMeshBuffer->Vertices[0] = S3DVertex(0,0,0, -1,-1,-1, clr, 0, 1);
последние 0 и 1 что означают?
В доке:
irr::video::S3DVertex::S3DVertex (
f32 x,
f32 y,
f32 z,
f32 nx,
f32 ny,
f32 nz,
SColor c,
f32 tu,
f32 tv
) [inline]

и все ...
них...чего не понятно... что за tu? что за tv?


Есть другой способ: Добрый человек .::jimon::. подсказал как использовать материал, назначенный в IMeshBuffer'ах в IMeshNod'ах.
Нужно всеголишь установить флаг:

IMeshSceneNode*->setReadOnlyMaterials(true);

там были еще кое какие заморочки, но я разобрался. Так что пока все окей.

pokibor 11.12.2006 00:41

tu и tv как раз текстурные координаты и есть.
x,y,z, - позиция вершины
nx,ny,ny - координаты вектора нормали
c - цвет вершины
Вроде все понятно...

DremLIN 11.12.2006 07:31

Цитата:

Сообщение от pokibor (Сообщение 1258826)
tu и tv как раз текстурные координаты и есть.
x,y,z, - позиция вершины
nx,ny,ny - координаты вектора нормали
c - цвет вершины
Вроде все понятно...

про позицию вершины - понятно,
про цвет - тоже,
про вектор нормали - относительно понятно,

что tu и tv текстурные координаты - тоже понятно, но вот почему 0 и 1 - непонятно, за что они отвечают и как их использовать - непонятно.

в треугольнике - 3 вершины. У каждой свои tu и tv текстурные координаты. Как, в какой вершине, выставлять эти значения?

В общем - плаваю я в этом вопросе....

pokibor 11.12.2006 08:08

Цитата:

Сообщение от DremLIN (Сообщение 1259083)
про позицию вершины - понятно,
про цвет - тоже,
про вектор нормали - относительно понятно,
что tu и tv текстурные координаты - тоже понятно, но вот почему 0 и 1 - непонятно, за что они отвечают и как их использовать - непонятно.
в треугольнике - 3 вершины. У каждой свои tu и tv текстурные координаты. Как, в какой вершине, выставлять эти значения?
В общем - плаваю я в этом вопросе....

Тогда тебе не помешает прочитать основы трехмерной графики, но вкратце я тебе объясню. Как ты правильно заметил, у нас есть треугольник, у него три вершины, у каждой из них свои текстурные координаты. Также у нас есть текстура размером N*M пикселей. Задача - отрендерить этот треугольник. Мы считаем координаты, в которые переходят вершины треугольника на экране монитора (если треугольник вообще виден, конечно; т.е. мы проэцируем его на экран монитора той или иной формой проэкции), и получаем уже двухмерный треугольник. Далее для каждого попадающего в этот двухмерный треугольник пикселя мы получаем его текстурные координаты, интерполируя координаты вершин (т.е. чем ближе пиксель к одной из вершин, тем ближе его координаты будут к этой вершины до полного равенства, если пиксель попадает в вершину). Ну а дальше просто смотрим, какой цвет соответствует данным текстурным координатам на текстуре. Тут берется дробная часть текстурных координат, у пикселя (0,0) и координаты считаются (0,0), а у пикселя (N,M) - (1,1). В общем, вроде должно быть понятно. Ну а формулы и подробней про все это см., например, в книгах по OpenGL и Direct3D: http://forum.igromania.ru/showthread.php?t=23543.

EMINEM-312 11.12.2006 08:19

Цитата:

Сообщение от pokibor (Сообщение 392305)
Сразу осмелюсь остудить горячие головы, считающие, что они придумали генеальный сюжет и сейчас вот создадут по нему суперигру (сам таким был...) - ничего не выйдет, сюжет сам по себе для игры ничего не стоит.

Абсолютно согласен. Даже если вы и придумали своего рода уникальную концепцию у вас не получиться воплотит её в жизнь.
Смотря что если ВЫ - это Питер Молинье.

BlueSky 12.12.2006 05:54

Может кто расскажет или ссылкой плюнет как правильно сглаженные модельки в 3DS формате в иррлихт запихивать? А то что-то все дюже квадратное получается.

pokibor 12.12.2006 13:23

Срочно нужна помощь по хоть какому-нибдь совмещению DirectShow и полноэкранного режима окна. Нужно, чтобы в окне на определеном месте (т.е. полноэкранный режим IVideoWindow не предлагать) играл ролик, при этом окно могло находится в полноэкранном режиме. Я пробовал уже и делать окно IVideoWindow дочерним к нужному (при этом выстакивала Protection Error), и использовать Windowless-режим VMR9 (при этом изображение просто не показывается в окне, хотя в оконом режиме все в порядке)... В общем, жду помощи.

Evil.Hard 13.12.2006 02:17

След от взрыва лучше делать через вершиный шейдер мне кажется )))
Насчет видео:
В сэмплах директикса есть исходник PlayWnd
В нем покопайся - я по нему делал...

pokibor 13.12.2006 08:32

Цитата:

Сообщение от Evil.Hard (Сообщение 1265061)
В сэмплах директикса есть исходник PlayWnd
В нем покопайся - я по нему делал...

Уже капался. Толку - 0. Там используется IVideoWindow, а у меня задача - заставить видео рендерится в определенном прямоуголннике внутри окна. Если сделать IVideoWindow дочерним по отношению к этому окну, то при переводе окна в полноэкранный режим выскакивает Protection Error.
Вариант свернуть это окно на время проигрывания видео и воспользоваться полноэкранным режимом IVideoWindow я оставил на крайний случай, так как не смогу, например, сделать видеовставки прямо в миссиях (а мне хотелось бы сделать как в Tiberium Sun - там порой на месте миникарты видеовставка играла.
В общем, вся загвоздка в полноэкранном режиме...

Evil.Hard 13.12.2006 18:43

Ты создаешь дочернее окно в то время когда у тебя находиться уже одно окно в полноэкранном режиме )
Поетому косяки у тебя.
ТАк наврядли что то получиться сделать.
ЛУчше попробывать рендерить видео в этом же окне.
Где то видел пример как рендерить видео на кубе чтоль (может тебе так и надо попробывать сделать.

pokibor 13.12.2006 18:53

Цитата:

Сообщение от Evil.Hard (Сообщение 1266606)
ЛУчше попробывать рендерить видео в этом же окне.
Где то видел пример как рендерить видео на кубе чтоль (может тебе так и надо попробывать сделать.

Да это как раз без проблем - windowless-режим и есть. А вот как заставить его работать в полноэкранном режиме - в том и вопрос.

ZaVok 14.12.2006 08:48

Evil.Hard наверное имеет ввиду пример Render to Texture.

А можно накладывать анимированную текстуру на объекты?

pokibor 14.12.2006 10:12

Цитата:

Сообщение от ZaVok (Сообщение 1268080)
Evil.Hard наверное имеет ввиду пример Render to Texture.

Нет, мы вообще-то о DirectShow говорим. Он имел ввиду пример Texture3D9 из примеров DirectShow.
Цитата:

Сообщение от ZaVok (Сообщение 1268080)
А можно накладывать анимированную текстуру на объекты?

Конечно, можно. Только что ты понимаешь под анимированной текстурой? Если просто "запихнуть, а там Irrlicht сам разберется", то все не так просто. Тебе нужно реализовать это все самому. Я, например, уже сделал возможность создания анимированной текстуры при помощи пиксельных шейдеров (это, вообще говоря, элементарно), а теперь занимаюсь делом посложнее - хочу перевести вышеупомянутый пример под Irrlicht и сделать такую текстуру из видеофайла.
---
Все! Проблема решена. Я сделал класс, который генерит в Irrlicht текстуру на основе видеофайла, то есть гипотетически можно ренедерить видео прямо на юнита, например. Кого интерисует, как такое сделать - спрашивайте, помогу.

ZaVok 15.12.2006 18:52

Кто-нибудь знает, как в Newton-е делать Character'а?
Ну аналог FPSCamer-ы c коллизией в ирлихте. Ирлихтовский вариант меня не устраивает, часто бывает так, что персонаж застревает в полу,
и не поднимается по лесенкам. У Newton-а есть конечно пример, как это сделать, но я в нем не смог разобраться, потому что пример пользует для вывода картинки на экран какие-то сторонние библиотеки, все процедуры свалены в кучу... вобщем нечитабельно это для меня ещё.

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

Skeletron 15.12.2006 20:47

Люди, кто знает как и хочет помочь в создании игры. Пишем вдвоем 3D RTS на С++. Есть ландшафт, UI, юниты и основы AI, вражеский AI в разработке. Нужна графика и сценарий. Если есть кто-то кто программирует на C++ под DirectX, и имеет недюжинный опыт, то откликнитесь. И вопрос, как лучше делать AI врага в игре : шаблоны, нейронные сети, конечный автомат?

pokibor 15.12.2006 21:22

Цитата:

Сообщение от Skeletron (Сообщение 1272862)
Люди, кто знает как и хочет помочь в создании игры. Пишем вдвоем 3D RTS на С++. Есть ландшафт, UI, юниты и основы AI, вражеский AI в разработке. Нужна графика и сценарий.

Даже странно как-то. Обычно у начинающих разработчиков что-то, а сценарий готов в первую очередь :sml: . Впорочем, подход хороший. Потому что обычно новички дальше сценария так и не уходят.
Цитата:

Сообщение от Skeletron (Сообщение 1272862)
Если есть кто-то кто программирует на C++ под DirectX, и имеет недюжинный опыт, то откликнитесь.

Я имею, хотя пишу не непосредственно под DirectX, а использую движок Irrlicht. По сценарию можете вдохновение черпать в теме по моей игре: .http://forum.igromania.ru/showthread.php?t=23913. Там есть предыстория. Только чур не воровать внаглую :sml: .
Цитата:

Сообщение от Skeletron (Сообщение 1272862)
И вопрос, как лучше делать AI врага в игре : шаблоны, нейронные сети, конечный автомат?

Хороший вопрос. Мы сейчас у себя делаем на основе CBR (возможность обучения) + нечеткая логика, если CBR результатов не принес. шаблоны отпадают сразу - так делают в каждой второй стратегии, и я считаю это примитивным. Нейронные сети слишком сложно - во первых, такому сложному делу вы их не сможите научить, во вторых даже если сможите - они будут работать крайне медлено. Конечный автомат... Практически шаблоны. И то, и другое по сути скриптовый способ, и мнение мое по этому поводу соответсвующее.
Итак, я рекомендую обратить внимание на CBR и нечеткую логику. Возможно также попробовать сделать многоагентную систему, но это скорее уже не к AI противника имеет отношение, а к индивидуальному AI юнита. Хотя как раз его и конечным автоматом можно сделать. но многоагентная система интереснее - например, сделать так, чтобы он мог "общаться" с близлежащими своими. Если "свой" видит врага, а юнит нет, то "свой" ему может сказать об этом. Таким образом, если выстроится цепочка юнитов и враг подойдет с фланга, то о нем узнает вся цепочка, а не только стоящие рядом с местом нападения юниты.
P.S. Как вы понимаете, присоединится я к вам не могу - у меня свой проект есть. Но если будут вопросы - обращайтесь.

BlueSky 17.12.2006 01:52

Народ, есть вопрос. Ковырялся в хелпе, но так и не нашел, можно ли как-то выводить кроме старых добрых фпс еще и кол-во полигонов в сцене? Нужно сие счастье для контроля и оптимизации.

ZaVok 17.12.2006 08:49

я конечно не уверен, но можешь попробовать:
Цитата:

int fps = driver->getFPS();
if (lastFPS != fps)
{
wchar_t tmp[1024];
swprintf(tmp, 1024, L"Newton Example [fps:%d] [triangles:%d]",
fps, driver->getPrimitiveCountDrawn());
device->setWindowCaption(tmp);
lastFPS = fps;
}
Этим кодом прога выводит FPS и количество полигонов.
Я код взял из примера для Newton-а, с выводом графики на иррлихте.
Ты конечно умный человек, но на всякий случай(а так же для потенциальных читателей) скажу, что этот код нужно засовывать в цикл, в котором ты выводишь графику на экран.

BlueSky 17.12.2006 20:04

Таки спасибо большое, осталось теперь ньютон прикрутить. :)

BlueSky 18.12.2006 08:30

Господа, просьба к вам не бросать в меня тухлыми помидорами, называть нубом и ламером можно (ну не программер я, не программер). :)
Однако не мог бы кто-нибудь плюнуть в меня ссылочкой или отписать как же все-таки правильно пользоваться иррлихтовским хелпом?
У меня сейчас встала проблема вычитать конфиг-файл. Хочу для этого пользоваться ирллихтовскими классами.
Я так понимаю мне для этого нужно воспользоваться вот этим:
Код:

virtual s32 irr::io::IReadFile::read  (  void *  buffer, 
s32  sizeToRead
)  [pure virtual]
Reads an amount of bytes from the file.

Не мог бы кто-нибудь подробно описать что и откуда мы берем из хелпа, как записываем и как применяем (типа вот в хелпе записано вот так, значит нам нужно это вызывать вот таким образом, и писать вот так)? Потому что по ходу я попросту не понимаю как пользоваться хелпом и из-за этого ничего толком не могу сделать и слегка нервничаю.

pokibor 18.12.2006 09:51

Цитата:

Сообщение от BlueSky (Сообщение 1280613)
Господа, просьба к вам не бросать в меня тухлыми помидорами, называть нубом и ламером можно (ну не программер я, не программер). :)

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

Сообщение от BlueSky (Сообщение 1280613)
Однако не мог бы кто-нибудь плюнуть в меня ссылочкой или отписать как же все-таки правильно пользоваться иррлихтовским хелпом?

Ну для начала выучить английский хоть на техническом уровне, потом открыть файл с хелпом и, прочитав меню, кликнуть на нужном тебе разделе. Или тебе еще подробнее? :Grin:
Цитата:

Сообщение от BlueSky (Сообщение 1280613)
У меня сейчас встала проблема вычитать конфиг-файл. Хочу для этого пользоваться ирллихтовскими классами.

Честно говоря, я не совсем понимаю, зачем ими пользоваться, когда в C++ есть функции, делающие то же самое и даже больше? Единственный вариант - для обеспечения кроссплатформенности кода, но функции fwrite/fread (как раз и предназначенные для чтения двоичных файлов) входят в стандартные библиотеки!
Кстати, обычно под "конфигом" понимают текстовый файл, а не двоичный, посему пользоватья функциями для чтения двоичных файлов не совсем удобно.
Цитата:

Сообщение от BlueSky (Сообщение 1280613)
Я так понимаю мне для этого нужно воспользоваться вот этим:
Код:

virtual s32 irr::io::IReadFile::read  (  void *  buffer, 
s32  sizeToRead
)  [pure virtual]
Reads an amount of bytes from the file.

Не мог бы кто-нибудь подробно описать что и откуда мы берем из хелпа, как записываем и как применяем (типа вот в хелпе записано вот так, значит нам нужно это вызывать вот таким образом, и писать вот так)? Потому что по ходу я попросту не понимаю как пользоваться хелпом и из-за этого ничего толком не могу сделать и слегка нервничаю.

Скорее ты не понимаешь, что такое файл и как им пользоваться без помощи виндосовского "Блокнота", ибо фразы "Reads an amount of bytes from the file" достаточно. Как я уже говорил, движок (и, соответственно, хелп) не предназначен для использования лицами, не достигшими вменяемого знания программирования вообще и C++ в частности, и потому в них не будет ничего разжовываться.
Но на твой вопрос отвечу. Очевидно, что данная функция (точнее, метод интерфейса IReadFile) читает из файла несколько байт (их количество определяется переменной sizeToRead) начная с текущей позиции указателя и записывает их в буффер, ссылка buffer на которою сюда также передается. Очевидно, что под буффер нужно выделить память не меньшую, чем количество запрашиваемых байт.
Если ты не понял ничего из написаного выше мною (а так, скорее всего, и есть) и не знаешь, что такое интерфейс, за чем он нужен и как выделять память в указатель (а также что за тип такой void), то я не буду устраивать тебе тут курс языка C++, а пошлю в http://forum.igromania.ru/showthread.php?t=23543, где ты сможешь скачать нормальную книгу и изучить-таки C++. А иначе скоро пойдут вопросы "а что такое виртуальные функции", "а как наследовать от класса" и им подобные.

BlueSky 18.12.2006 12:03

Цитата:

Сообщение от pokibor (Сообщение 1280675)
А нельзя сперва научится и стать программером, а потом уже приниматься за изучение движка, который, вообще-то и не предназначен для простых смертных?

Спасибо за отзыв, вот только ему не хватает немножко отзывчивости. :(
Что такое файл и как им пользоваться, я знаю.
Код:

FILE *configFile = fopen("config.cfg", "r");
char configValues [1001];
memset(configValues, 0, 1001);
fscanf(configFile, configValues);
fclose(configFile); //тупо, но эффективно, 2 минуты на набор кода

Код соорудить не было для меня проблемой, все-таки паскаль и делфи дали о себе знать. Так что опыт программирования у меня есть, но программистом я, к моей вящей радости, не являюсь.
Цитата:

Ну для начала выучить английский хоть на техническом уровне, потом открыть файл с хелпом и, прочитав меню, кликнуть на нужном тебе разделе. Или тебе еще подробнее? :Grin:
Кандидатский экзамен по английскому считается? (ВУЗ - БелГосУинвер Информатики и Радиоэлектроники (старый добрый МРТИ), специальность - микроэлектроника, наверное даже техническая :) )
Хелп открываю, читаю. Что выполняет каждая функция - написано вполне понятно на вполне читабельном аглицком. Понятно какие параметры даже туда запихивать, какого типа они дожны быть, а вот как их вызывать - совершенно непонятно.
Цитата:

Честно говоря, я не совсем понимаю, зачем ими пользоваться, когда в C++ есть функции, делающие то же самое и даже больше? Единственный вариант - для обеспечения кроссплатформенности кода, но функции fwrite/fread (как раз и предназначенные для чтения двоичных файлов) входят в стандартные библиотеки!
Кстати, обычно под "конфигом" понимают текстовый файл, а не двоичный, посему пользоватья функциями для чтения двоичных файлов не совсем удобно.
Затем, чтобы не городить велосипед и пользоваться тем, что предоставляет движок. Если понадробиться, я его побайтно считаю и расковыряю что мне и куда нужно, но хотелось бы по-нормальному использовать всю мощь движка.
А вообще просто попался именно этот пример для вопроса. Минут 15 до написания поста был бы другой пример.
Цитата:

Скорее ты не понимаешь...
См выше. Если мне будет нужно, то буду как старом добром паскале выделять память поэлементно и с нею возиться, это не проблема - благо паскаль научил тому, что такое динамические типы данных...
В результате получил ответ на совершенно другой вопрос. Еще и скрепленный изрядной долей негодования от "гуру", вместо того, чтобы уточнить или разобраться, что спрашивают, ладно, всякое бывает, и даже посты в топике не соответсвуют теме оного, и с ноги можно не той встать и т.п.
Переформулирую и оконкретизирую вопрос с учетом вышенаписанного.
Не мог бы кто-нибудь кратко и внято (желательно с минимумом сленговых словечек и профжаргона) объяснить как вызовы функций сообразуются с их описанием в ирллихтовском хелпе? Или ссылкой в меня плюнет. А то на дотнет прийдется перейти, чего бы мне карйне не хотелось бы. :(

L'ombre 18.12.2006 13:01

Цитата:

Сообщение от BlueSky (Сообщение 1280835)
Что такое файл и как им пользоваться, я знаю.

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

Сообщение от BlueSky (Сообщение 1280835)
fscanf(configFile, configValues);

этот вызов не делает ничего;
из этой ссылки должно быть понятно почему - http://www.cplusplus.com/ref/cstdio/fscanf.html
собственно сам вопрос -
Цитата:

Сообщение от BlueSky (Сообщение 1280835)
как вызовы функций сообразуются с их описанием в ирллихтовском хелпе?

- функция делает то, что про неё написано в описании..
(что именно из "Reads an amount of bytes from the file." непонятно?)

mag_TbMbI 18.12.2006 13:54

А может кто-нибудь ответить на вопрос
что такое движок и какие функции он должен обеспечивать?

pokibor 18.12.2006 14:36

BlueSky
:lol:
Ой, ржу!
С тобой, о великий программист, все ясно! Я-то думал, ты вообще ничего не понимаешь в программировании (ну ошибся, начал учить что-то раньше времени - всякое бывает), а оказывается, ты, что-то понимая, умудрился сесть за построенный на интерфейсах C++ - движок абсолютно без знания объектно-ориентированного программирования (это слегка описывает твое понимание программирования как "нулевое")! Потому что если бы ты его хоть немного знал, то вопроса "как вызовы функций сообразуются с их описанием в ирллихтовском хелпе" (тем более, после того, как я тебе сказал, что это не функция, а метод интерфейса) не могло возникнуть в принципе. Короче, все, что я написал, остается в силе. И ссылка то же. Читай, что такое классы (интерфейс - полностью абстрактный класс), для чего они и с чем их едят. А потом садись за движок, требующий этих знаний.
P.S. Уж не знаю, как ты на Дельфи писал (все-таки Object Pascal тоже объектно ориентированный язык), но объектная половина языка явно прошла мимо тебя.

Цитата:

Сообщение от mag_TbMbI (Сообщение 1281053)
А может кто-нибудь ответить на вопрос
что такое движок и какие функции он должен обеспечивать?

Точного определения не существует. В моем понимании движок - грамотно спроектированная и структурированная совокупность классов/интерфейсов/функций, предназначенная для решения некого набора задач разработческого характера. Какие функции он должен обеспечивать зависит от того, какая задача перед ним поставлена (т.е. для разработок в какой области он предназначен).

BlueSky 19.12.2006 01:06

Ну заменить fscanf на fread и все будет работать. Это не суть важно, хотя мне не совсем понятно зачем было в Сях городить такой огород с вводом-выводом.
Перефразировать вопрос больше не буду, ибо вы напрочь не хотите его понимать - для вас это "слишком низкий уровень".
А сейчас начнутся крики наподобие "все ламеры руки прочь от ООП", "побойся Страуструпа" и т.п.
Однако это не изменит того, что ООП - это просто чуть более удобная организация процесса программирования как такового, с возможностью абстрагироваться от основ, чтобы, потеряв в производительности (с современными мощностями это, обычно, не так уж и страшно, хотя видеть тот же Х3, тормозящий на хай-энд железе просто противно, хотя игра красивая, ничего не скажешь), увеличить простоту создания программ и скорость их создания.
Что у нас там есть в ООП:
1. Инкапсуляция
2. Наследование
3. Полиморфизм
Итак.
1. Есть переменные глобальные и локальные. Использование только локальных переменных и переопределение их внутри функций и процедур в зависимости от типа, который нужен, а также хранение функций и процедур вне основной программы, даст эффект инкапсуляции.
2. Вызовы одной одной функции в другой, с добавлением своих функций, а другой в третьей, с добавлением своих функций, дает нам наследование, как таковое.
3. Самый простой и доступный пример - функция сортировки, которая получаемое множество данных преобразует к одному виду, после чего им оперирует, а на выходе выполняет обратное преобразование, так получаем полиморфизм.
Вот и весь хваленый ООП. Так что можно называть как душе угодно, главное понимать, как это работает.
А теперь можете реветь тут как раненые белуги, называть меня последним законченным ламерюгой, ничего не понимающим в программировании, а уж тем более в ООП. Разрешаю. Даже с удовольствием почитаю как-нибудь на досуге.
Только не забывайте, что ООП - это всего лишь частный случай системного подхода, не больше и не меньше.
P.S. А за ссылочку на книги - спасибо.

pokibor 19.12.2006 10:18

Цитата:

Сообщение от BlueSky (Сообщение 1283498)
Ну заменить fscanf на fread и все будет работать.

О, да! Еще как! :lol: Вот только для fread необходимо 4 аргумента, а не 2. Так что работать все равно не будет. И у меня складывается впечатление, что ты сейчас, стремясь показать свои знания, быстренько пытаешься найти что-то, похожее на правильный ответ на вопрос, тогда как сам подобного кода никогда не писал.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
Это не суть важно, хотя мне не совсем понятно зачем было в Сях городить такой огород с вводом-выводом.

"В Сях" никакого огорода нет! Наоборот, есть максимально гибкая концепция, сильно упрощающая ввод/вывод и обеспечивающая дополнительные возможности.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
Перефразировать вопрос больше не буду, ибо вы напрочь не хотите его понимать - для вас это "слишком низкий уровень".

Напротив, мы прекрасно поняли: ты не знаешь, что такое "интерфейс", "класс" и как ими пользоваться. Уровень действительно низкий, потому что для решения проблемы нужно провести следующую цепочку рассуждений:
IReadFile - интерфейс и Irrlicht вообще построен на интерфейсах, значит, скорее всего, объект с таким интерфейсом нужно откуда-то получать, а не создавать самому. Откуда можно получить файл? Из файовой системы. Глаза сами бегут к интерфейсу IFileSystem в хелпе. А откуда получать файловую систему - основополагающий объект? Очевидно, из "главного интерфейса" - IIrrlichtDevice. Так что все в хелпе есть, нужно только обладать базовыми знаниями ООП и уметь читать.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
А сейчас начнутся крики наподобие "все ламеры руки прочь от ООП", "побойся Страуструпа" и т.п.

Ничуть. Единственный крик - "ламер, учись!".
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
Однако это не изменит того, что ООП - это просто чуть более удобная организация процесса программирования как такового, с возможностью абстрагироваться от основ, чтобы, потеряв в производительности (с современными мощностями это, обычно, не так уж и страшно, хотя видеть тот же Х3, тормозящий на хай-энд железе просто противно, хотя игра красивая, ничего не скажешь), увеличить простоту создания программ и скорость их создания.

И с какой такой стати ООП тормозит, а? Компиляторы оптимизируют его так, что разницы в скорости нет никакой. Да и откуда ей взятся? Класс? Да это просто автоматическая передача в функцию некой структуры (записи по терминалогии Паскаля). Виртуальные функции? Switch в чистом виде. То есть ООП упрощает процесс программирования, нисколько не тормозя его. И не надо сваливать нежелание программистов заниматься оптимизацией на ООП. Но главное достоинство ООП - серьезнейшее облегчение повторного использования кода (для чего все это и придумывали).
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
Что у нас там есть в ООП:
1. Инкапсуляция
2. Наследование
3. Полиморфизм

Теория... Ты на практике хоть что-то из этого использовал? Видимо, нет.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
1. Есть переменные глобальные и локальные. Использование только локальных переменных и переопределение их внутри функций и процедур в зависимости от типа, который нужен, а также хранение функций и процедур вне основной программы, даст эффект инкапсуляции.

Да ладно! А как же private и protected-функции? Класс, как я уже говорил, можно представить как структуру и набор функций, в которые эта структура передается по умолчанию. Так вот - в структурах все переменные открыты и полностью доступны (public), то есть эффекта инкапсуляции невозможно добится без поддержки языком ООП.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
2. Вызовы одной одной функции в другой, с добавлением своих функций, а другой в третьей, с добавлением своих функций, дает нам наследование, как таковое.

И так мы вызываем функции друг в друге, пока не запутаемся что там к чему относится. Не забыл, что у нас нет private и protected-функций? А ведь основной смысл наследования - это полиморфизм и возможность использования в качестве ссылки на родителя ссылки на ребенка. У тебя же это выливается в кучу струтур с частично одинаковыми параметрами, причем в функции тебе придется делать case для каждой такой струтуры (на паскале, в C все несколько проще за счет адресной арифметики).
Вывод - механизм наследования делает за тебя часть работы, а на некоторых языках программирования еще и оптимизирует код. Ну и разумеется про естественное упрощение восприятия кода забывать не следует.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
3. Самый простой и доступный пример - функция сортировки, которая получаемое множество данных преобразует к одному виду, после чего им оперирует, а на выходе выполняет обратное преобразование, так получаем полиморфизм.

Что за чушь? Полиморфизм как раз и включает в себя интерфейсы, абстрактные классы и виртуальные функции. Похоже, для тебя это все пустой звук. Да, полиморфизм в не ООП-коде сводится к обычному switch'у, но использовать его, опять же, естественнее и удобнее. А на интерфейсах сейчас построенно огромное множется сложных систем, взять хотя бы тот же Irrlicht.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
Вот и весь хваленый ООП. Так что можно называть как душе угодно, главное понимать, как это работает.

И ты только что прекрасно продемонстрировал, что не понимаешь этого.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
А теперь можете реветь тут как раненые белуги, называть меня последним законченным ламерюгой, ничего не понимающим в программировании, а уж тем более в ООП. Разрешаю. Даже с удовольствием почитаю как-нибудь на досуге.

Насчет процедурного программирования не знаю, а в ООП ты действительно ничего не понимаешь.
Цитата:

Сообщение от BlueSky (Сообщение 1283498)
Только не забывайте, что ООП - это всего лишь частный случай системного подхода, не больше и не меньше.

ООП - основа всей современной концепции программирования, база языков типа Java и C# и простейший путь реализции сложной системы, над которой работает более одного человека. Но ты можешь ползать на четвереньках и утешать себя тем, что езда на автомобиле - лишь частный случай передвижения.

mag_TbMbI 20.12.2006 16:57

А почему собственно никто не горит желанием написать движок с нуля?

pokibor 20.12.2006 17:02

Цитата:

Сообщение от mag_TbMbI (Сообщение 1288048)
А почему собственно никто не горит желанием написать движок с нуля?

А зачем? Готовый движок (хороший движок, вроде Irrlicht) представляет собой надстройку над графическими библиотеками, просто ускоряющую процесс разработки без ограничения возможностей. Разработка собственного движка обернется затратой большого количества времени, а нечто лучше Irrlicht все равно не выйдет. К тому же прежде чем писать свой движок, изучить готовый точно будет не лишним!

STOLEN 20.12.2006 23:48

Цитата:

А почему собственно никто не горит желанием написать движок с нуля?
Почему не говорит? Чиай тему. Я раньше хотел написать нечто вроде движка. Считал, что так будет проще разобраться в скриптах! Но, разумеется не чего приличного не вышло и мне пришлось воспользоваться бесплатными двиглами! Кстати, если вы уже довольно хорошо разбираетесь в программировании, то поймете, что в написании собственного движка просто нет смысла. Если конечно вы не хотите написать комерчискую игру. Для свободных проектов можно спокойно использовать тот же Ittlicht. Тем более, что Ittlicht далеко не предел! Есть еще пару неплохих движков обладающие отличными возможностями для разработки своих собственных приложений. Кстати, если у тебя возникли проблемы то в сети ты можешь найти большое количиство уроков для каждого движка! Тем более, что на многих форумах обсуждаются решения многих проблем которые могут возникнуть с их освоением, а вот четкого листинга для написания собственного движка ты с большей вероятностью не найдешь. Да и на форумах тебе врят ли помогут решить многие проблемы. Есть еще одна проблема, по которой я бы не советовал тебе писать свой движок это огромное количиство глюков и ошибок! Пока ты будешь устранять ту или иную ошибку ты мог бы за это время спокойно написать неплохое приложение на уже готовом двигле. Если тебя не устраивает язык на котором написан движок, а в основном это С++ то тебе прямая дорога учиться и читься. Поверь мне не зная языка ты врят ли сможешь что написать. Лично я раньш рабтоя на Delphi сейчас полностью перешел на С. Осваивать его конечно по началу сложно, но потом язык предоставит тебе такие возможности, о которых ты реньше и мечтать не мог! Ну, конечно многие со мной могут и не согласиться...но это моя точка зрения. Удачи в написании игр!

mag_TbMbI 21.12.2006 12:58

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

STOLEN 21.12.2006 16:03

Цитата:

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

Roker 21.12.2006 17:34

Цитата:

Есть еще одна проблема, по которой я бы не советовал тебе писать свой движок это огромное количиство глюков и ошибок!
Огромное количество ошибок? Глюков? Если ты начинаешь процесс с грамотной постановки задачи, тщательно вырабатываешь требования, анализируешь, программируешь в терминах предметной области, а не на языке программирования, формируешь согласованную абстракцию ( классы ), придерживаешься концепции псевдокода, то поверь мне, друг, отладка занимает раз в десять меньше времени. Если ты сломя голову мчишься праграмировать, тебе обеспечена красная голова, баночки пепси и злобная концепция в виде обезумевшей девушки.

Цитата:

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

Цитата:

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


Цитата:

Ну чтож Си я потихоньку осваиваю...
Но вот по моему легче написать хороший движок а потом его дорабатывать.
Ты даже не знаешь С++ ( ОМГ, нафиг тебе Си? ООП - руль! ) а уже разглагольствуешь что проще(( Ты представляешь как сложно разработать архитектуру такой сложной системы?


Цитата:

Что у нас там есть в ООП:
1. Инкапсуляция
2. Наследование
3. Полиморфизм
Ты щас перечислил понятия, кардинально облегчающие труд программиста, и твоё легкомысленное отношение к ним неприемлимо, показательно и невежественно. Инкапсуляция или сокрытие деталей реализации - мощнейший инструмент управления сложностью. С помощь него ты можешь один раз спроектировать, написать, отладить класс и программировать в терминах проблемы а не низкоуровнего программирования. Написав, ты можешь вобще выкинуть из головы как он реализован, единственное, что нужно знать - интерфейсы, предоставляемые им. В это суть - интерфейсы - это чёрные ящики, получающие входные данные и выдающие результат, запомни - хороший класс - это то класс, при использовании методов которого ты не должен знать как они реализованы, тебе нужно только знать, что они делают. Следовательно название метода должно ПОЛЬНОСТЬЮ ОТРАЖАТЬ ЕГО СУТЬ. И метод должен выполнять одну ЕДИНСТВЕННУЮ задачу.

pokibor 21.12.2006 17:36

Цитата:

Сообщение от STK13 (Сообщение 1290761)
но думаю многие на этом форуме меня поддержат что разрабатывать самому движок не имеет смысла.

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

Roker 21.12.2006 18:43

Цитата:

Имеет, но только в том случае, если движок является конечным продуктом, а не промежуточным - для создания игры.
Библиотека, инструментарий являются конечным продуктом? Пойду напишу программу "STL".

mag_TbMbI 21.12.2006 18:49

И все-таки я попытаюсь, в свободное время, и убедюсь на собстенном опыте.

Xar 21.12.2006 21:37

Цитата:

Сообщение от pokibor (Сообщение 1290990)
Имеет, но только в том случае, если движок является конечным продуктом, а не промежуточным - для создания игры.

Похоже кое-кто забыл, что игры бывают очень разных жанров. И вот если тот же Irrlicht подходит для каких-то трёхмерных игровых ужастей, то для создания игры исключительно с 2D (спрайты и т.п), я думаю, проще будет не использовать весь этот громоздкий механизм, а написать свой простой движок и использовать его как душе угодно.
Цитата:

Сообщение от mag_TbMbI (Сообщение 1291248)
И все-таки я попытаюсь, в свободное время, и убедюсь на собстенном опыте.

А, если не секрет, для чего оно тебе?

mag_TbMbI 22.12.2006 16:34

Цитата:

А, если не секрет, для чего оно тебе?
Вообщето не серет. Хочу написать нормальнуб игру (для своего уровня), ну и попробовать сделать, что-то большое и сложное. Да и вообще любля я игры.

CMogilko 22.12.2006 22:52

Цитата:

что разрабатывать самому движок не имеет смысла
Имеет и ещё какой - для саморазвития. Это самый важный плюс, который переплюнет все если конечный результат не нужен кровь из носа.

STOLEN 01.01.2007 23:02

Недавно у меня возник один вопрос. Как уже было вышеупомянуто программирую я на Delphi (седьмая его версия). В программировании игр я новичек, но Delphi знаю достаточно хорошо (на мой взгляд). Что лучше подходит для программирования игр (начинающему) DirectX или же OpenGL? Подчеркиваю, что речь идет именно о программировании на Delphi. Во первых мне хотелось бы узнать где можно заполучить последнии версии данных библиотек и что нужно для первой и для второй. Во вторых насколько много информации (в лучшем случае книги) можно найти в интернете. Я например при поиске книг по DirectX на Delphi не нашел ни одной книги для скачивания. В основном все книги по прогаммировании на DirectX идут на С++. Так же напишите плиз о приимуществах и недостатках каждого из них. Помогите пожалуйста разобраться.

pokibor 02.01.2007 00:03

Цитата:

Сообщение от STK13 (Сообщение 1328670)
Недавно у меня возник один вопрос. Как уже было вышеупомянуто программирую я на Delphi (седьмая его версия). В программировании игр я новичек, но Delphi знаю достаточно хорошо (на мой взгляд). Что лучше подходит для программирования игр (начинающему) DirectX или же OpenGL?

Имхо без разницы. С учетом того, что ты начинающий - DirectX (по нему инфы побольше будет, и там комплект "Все в одном", то есть Direct3D - трехмерная графика, DirectSound - звуки и т.п.; в OpenGL это все отдельные библиотеки и по ним инфу чуть труднее найти), с учетом того, что на Delphi - OpenGL :sml:.
Цитата:

Сообщение от STK13 (Сообщение 1328670)
Подчеркиваю, что речь идет именно о программировании на Delphi. Во первых мне хотелось бы узнать где можно заполучить последнии версии данных библиотек и что нужно для первой и для второй.

Вот это самый интересный вопрос. Дело в том, что, насколько я понял, версии DirectX отдельно для Delphi не существует. Как-то можно на Delphi писать под DirectX, но как - для меня загадка. Где-то тут говорили, что есть даже книга "DirectX и Delphi" или что-то в таком духе, но больше я о возможности использования DirectX в Delphi ничего не слышал. С OpenGL все попроще будет (насколько я понимаю), но где достать его версию под Delphi (или как ее настроить) - не знаю. Поспрашивай у Fulcrum'а, он вроде специались в OpenGL (но он тебя скорее всего C++ пошлет учить, и прав будет).
Цитата:

Сообщение от STK13 (Сообщение 1328670)
Во вторых насколько много информации (в лучшем случае книги) можно найти в интернете. Я например при поиске книг по DirectX на Delphi не нашел ни одной книги для скачивания. В основном все книги по прогаммировании на DirectX идут на С++. Так же напишите плиз о приимуществах и недостатках каждого из них. Помогите пожалуйста разобраться.

Собственно из-за неочевидной настройки DirectX в Delphi таких книг крайне мало. Вряд ли ты что-то такое найдешь. Что касается достоинств/недостатков - сказать сложно... Говорят, что OpenGL быстрее DirectX, но скорее всего это только на видеокартах NVidia (да и то не известно, как тестировали - может задачи специально подбирали). По DirectX же, как я уже писал, побольше инфы будет. Ну и возможности у него, скорее всего, поболее будут в ближайшее время - вон, в DirectX 10 геометрические шейдеры обещают, про OpenGL я пока такого не слышал. К тому же GLSL (высокоуровневый язык написания шейдеров из OpenGL) больше ориентирован на сложные шейдеры, а HLSL (аналог из Direct3D) - на простые.

STOLEN 02.01.2007 14:54

Огромное спасибо! Блин, насколько я понимаю на Delphi вообще игр не поделаешь, даже самых простых. Остается только голимый GLScene! Жаль, просто эта среда разработки мне гораздо ближе чем С. Все же придется писать на С. Благо в сети есть достаточно много книжек по DirectX и С.
Цитата:

но он тебя скорее всего C++ пошлет учить, и прав будет
Да, я уже сам к этому постипенно пришел. Просто такой язык за два дня не выучишь. Придется долго и упорно сидеть и пробовать.
Цитата:

Как-то можно на Delphi писать под DirectX, но как - для меня загадка. Где-то тут говорили, что есть даже книга "DirectX и Delphi" или что-то в таком духе, но больше я о возможности использования DirectX в Delphi ничего не слышал.
Да, подобные книги есть. По моему их всего две. Причем обе из их невозможно найти для свободного скачивания, только заказывать по почте. Если кому интересно, то называется данная книга Искуство программирования DirectX и Delphi.

Fulcrum 04.01.2007 03:15

Цитата:

Поспрашивай у Fulcrum'а,
О_о

Цитата:

Что лучше подходит для программирования игр (начинающему) DirectX или же OpenGL?
С++

Цитата:

Во первых мне хотелось бы узнать где можно заполучить последнии версии данных библиотек и что нужно для первой и для второй.
- www.microsoft.com -> качаешь SDK

- OpenGL 1.0 и 1.1 есть во всех системах, чтобы программировать профессионально, используя расширения, качай NVIDIA OpenGL SDK на www.nvidia.com.

Последние версии библиотек 10.0 и 2.1.

Цитата:

Во вторых насколько много информации (в лучшем случае книги) можно найти в интернете.
Практически всю, это не шутка. Но сначала терпиливо изучай фундаментальные труды а не "доки". Я начинал с Херн, Бейкер "Компьютерная графика и стандарт OpenGL" ( первое издание, но сейчас есть третье ). Опять же С++, незнаю, что сложного. Главное - не синтаксис языка, а его идеи. Осознать это поможет "Язык программирования С++" за авторством трупа страуса и конечно же "Совершенный код" Стива Макконелла.

Цитата:

Так же напишите плиз о приимуществах и недостатках каждого из них.
Что именно интересует?

Цитата:

в DirectX 10 геометрические шейдеры обещают, про OpenGL я пока такого не слышал.
О_О

Новейшие расширения OpenGL:

- NV_fagment_program4

- NV_geometry_program4 О_о

- NV_vertex_program4

^___^

Цитата:

Да, я уже сам к этому постипенно пришел.
Проект дельфи закрыт, к тому же, дельфи, как и визуал барсик неисправимо калечит образ мышления программиста. Используй С++.

Цитата:

но он тебя скорее всего C++ пошлет учить, и прав будет
Спасибо, что сделал это за меня в гораздо более вежливой форме.



P. S.: STK, если есть конкретные вопросы под программирования OpenGL приложений - всегда рад помочь, на абстрактные я не отвечаю из принципа, на них должно сформировать собственное мнение, да. Да и с OpenGL Roker больше работает.

Fulcrum 05.01.2007 05:21

Блин, ты спрашивал как включить? Там где компоненты инклюдишь ( хз как в дельфи ) пишешь #include <GL/gl.h> #include <GL/glu.h> и линковщику даёшь прикурить, а в дельфе просто где модули включаешь, добавляешь ", OpenGL, " и в бой %) больше ничего не надо. То есть в дельфи просто в модкли добавляешь "OpenGL". Если надо, то тебе поможет "краснов Графика в проектах дельфи" - всё понятно, даже новичку. И статьи разные, например

http://www.mirgames.ru/articles/opengl/opengl1.html
http://www.mirgames.ru/articles/opengl/opengl2.html
http://www.mirgames.ru/articles/opengl/opengl3.html

Это можно сказать непрофисиональные статьи, но представление дадут, просто по дельфе ничо нет, только эти. Там сначал с++ код и сразу под ним дельфи.

Также, если не хочешь изучать фундаментальные книги советую "уроки от NEHE" - погугли. Есть русский вариант.

Также вот тебе ссылки на OpenGL книги:

"ОпенГЛ графика в проектах дельфи"

http://www.natahaus.ru/2006/05/01/m_...kh_delphi.html

и

"OpenGL программирование компьютерной графики" - один из фундаментальных трудов

http://www.natahaus.ru/2006/02/12/Op...j_grafiki.html


Удачи! О_о

fakl 10.02.2007 13:41

помогите мне в написании простейшего 2д движка и написания на нём простейшей 2д игры. знаю мало и не знаю с чего начать

pokibor 10.02.2007 15:07

Цитата:

Сообщение от fakl (Сообщение 1448708)
помогите мне в написании простейшего 2д движка и написания на нём простейшей 2д игры. знаю мало и не знаю с чего начать

Начни либо с изучения DirectDraw, либо со скачивания готового подобного движка.

fakl 10.02.2007 15:12

а что это вообще такое (DirectDraw) и где про него можно прочитать

fakl 10.02.2007 15:35

а просто в в примерах может ктото обьяснить как это вообще делается и действует а так же и про directdraw и наиболее легкий действия с ними для новичков хотящих понять саму суть программирования( если можно то по быстрее)

pokibor 10.02.2007 16:09

Если Вы не понимаете саму суть программирования, то сначала прогаммировать на C++ выучитесь, а потом только за игры садитесь.

fakl 10.02.2007 17:16

нет суть программирования я знаю я просто хочу помотреть как быстрее научится
напишите пожалуйста ссылки на полезные сайты по игровому прог

pokibor 10.02.2007 18:18

www.gamedev.ru, www.gamasutra.com
А вообще, написание игр требет не просто знания программирования, а хорошего знания объектно-ориентированного программирования и умения обучаться по хелпам и примерам.
Напиши, на каком языке ты пишешь и что знаешь сейчас, может лучше подскажу, с чего начать.

fakl 11.02.2007 12:26

я начинал с паскаля и заню его довольно хорошо сейчас занаю синтаксис делфи и VB

pokibor 11.02.2007 13:45

Цитата:

Сообщение от fakl (Сообщение 1451919)
я начинал с паскаля и заню его довольно хорошо сейчас занаю синтаксис делфи и VB

Тогда учи C++. Тебе нужно нормально знать ООП.

fakl 12.02.2007 14:05

откуда мне можно взять учебник по с++

pokibor 12.02.2007 14:36

Цитата:

Сообщение от fakl (Сообщение 1455082)
откуда мне можно взять учебник по с++

Поищи глазками по оглавлению форума! Найдешь http://forum.igromania.ru/showthread.php?t=23543.

fakl 12.02.2007 14:58

ведь можно написать движок и на делфи
расскажите саму суть движка

pokibor 12.02.2007 15:19

Цитата:

Сообщение от fakl (Сообщение 1455186)
ведь можно написать движок и на делфи

Можно. Но на C++ куда проще. Потому что весь хелп по тому же DirectDraw для C++ идет и на C++ по-нормальному реализовано ООП, есть шаблоны, перегрузка операторов и прочее.
Цитата:

Сообщение от fakl (Сообщение 1455186)
расскажите саму суть движка

Цитата из моего диплома:
Игровой движок (game engine) – ядро программной части игры или другого интерактивного приложения с графикой, обрабатывающейся в реальном времени, не имеющее привязки к конкретной игровой механике.

fakl 12.02.2007 15:49

это я знаю а хочу понять саму структуру движка как это всё происходит как там существуют запросы как в самом движке реализовать физику

pokibor 12.02.2007 16:01

Цитата:

Сообщение от fakl (Сообщение 1455325)
это я знаю а хочу понять саму структуру движка как это всё происходит как там существуют запросы как в самом движке реализовать физику

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

fakl 12.02.2007 16:16

в общем я уже писал простенькую игру по образцу, но понял так себе

fakl 12.02.2007 16:30

кстати я закачал учебник с++ но у него формат djvu как его открыть

pokibor 12.02.2007 17:12

Цитата:

Сообщение от fakl (Сообщение 1455438)
кстати я закачал учебник с++ но у него формат djvu как его открыть

По той ссылке прочитай внизу. Там все написано. И учись хотя бы бегло просматривать посты до конца. :mad:

fakl 14.02.2007 14:09

А ГДЕ МОЖНО СКАЧАТЬ САМ С++

pokibor 14.02.2007 14:18

Цитата:

Сообщение от fakl (Сообщение 1461013)
А ГДЕ МОЖНО СКАЧАТЬ САМ С++

http://forum.igromania.ru/showthread...on#post1210084

Это есть официально-бесплатно. А если нормальный Visual C++ - то у пиратов или в пиринговых сетях.

fakl 15.02.2007 10:53

кто нибудь скажите как установить GLSence на делфи (только на русском)

Roker 15.02.2007 11:01

Цитата:

кто нибудь скажите как установить GLSence на делфи (только на русском)
Дельфи - зло, учи С+++++.

Цитата:

А ГДЕ МОЖНО СКАЧАТЬ САМ С++
На сайте майкрософт, в разделе для девелопероф вас коварно поджидает VS Express 2005, мало чем уступающая професиональной версии.

fakl 15.02.2007 11:24

но всетаки я знаю делфи и пока просто нет времени на с++ так что кто знает как как установить GLSence на делфи (только на русском)

STOLEN 15.02.2007 23:32

Цитата:

так что кто знает как как установить GLSence на делфи
Что значит на русском? У тебя что делфи русифицирован :))
Вообще по стандартной установке есть много инфы и делается все это придельно просто! Держи ссылочку.
P.S Конечно я как и многие на этом форуме пошлю учить тебя С++ (хотя и сам знаю его не очень хорошо). А вообще если времени на С++ нету, то можешь попробовать связку DirectX SDK и Delphi...сейчас я именно это и пробую. Думаю последнии версии DirectX SDK ты найдешь без проблем. Да и возможностей у него гораздо больше чем у убогого GLScene. Правда придется раскошелиться на книжки по DirectX и Delphi...в инете подобной инфы практичиски не найти.

fakl 16.02.2007 10:30

большое
спасибо

Айдес 16.02.2007 23:22

Цитата:

Да и возможностей у него гораздо больше чем у убогого GLScene.
Логично, если знать, что GLScene - это надстройка(движок, архив библиотек, упрощающий конкретную работу с прогой) над OpenGL. Т.е. чтобы создать что-то использую лишь DirectX придётся сперва изогнуться и встать в позу главных программистов компаний наподобие id Software. Есть ли смысл в этом на начальных этапах обучения? Конечно нет! Правильней использовать движки(а ещё лучше SDK для конкретных игр - самый быстрый способ получить что-то, чем можно гордиться) и уже через них постигать более глубокие принципы. При всей моей любви к Делфи, в ней нет нормальных бесплатных движков на DirectX, посему следует обратиться к С++. Уж для него на opensource можно много чего найти, втч и часто упоминающийся здесь Irrlicht.

Цитата:

Правда придется раскошелиться на книжки по DirectX и Delphi...в инете подобной инфы практичиски не найти.
Да ну? Смотрим сюда
Исчерпывающая инфа по DirectX. А уж если после полного понимания описанных в книге вещей, не пропадёт желания дальнейшего изучения, то тут уже можно прикупить и западные книжки на эту тему, благо их довольно много.

STOLEN 18.02.2007 20:24

Цитата:

Да ну? Смотрим сюда
А тебе не кажется что книжка не по Delphi+DirectX а по С++????

Цитата:

к Делфи, в ней нет нормальных бесплатных движков на DirectX
ОМГ! А не судьба воспользоваться самим DirectX SDK???

Цитата:

а ещё лучше SDK для конкретных игр
Для моделеров и дизайнеров может и лучше, а вот для программистов нет!

KnupK 19.02.2007 18:23

А кто нибудь готовые двиги юзает?Например Blitz?


Часовой пояс GMT +4, время: 08:44.

Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.