|
|
#261 | ||
|
Юзер
Регистрация: 13.05.2006
Сообщений: 273
Репутация: 92
|
|
||
|
|
|
|
|
#262 | ||
|
Юзер
Регистрация: 10.06.2005
Адрес: Мир духов
Сообщений: 156
Репутация: 45
|
Если я неошибаюсь то сделать это так можно
Цитата:
Цитата:
__________________
--=THE ONE'S clan=-- Миром правят оптимисты а пессимисты там только зрители. --------------------------- Intel core 2 Duo E6300 GeForse 7600 GT на 256 mb 2X1=2Gb ОЗУ |
||
|
|
|
|
|
#263 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#264 | ||
|
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400 |
Цитата:
А теперь к вопросу об OpenGL. Товарищам, нагло посмевшим заявить о превосходстве DirectX 10 могу предложить посмотреть на следующие расширения: GL_EXT_geometry_shader4 EXT_gpu_shader4 NV_gpu_program4 Последний раз редактировалось Fulcrum; 15.11.2006 в 02:50. |
||
|
|
|
|
|
#265 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#266 | ||
|
Юзер
Регистрация: 21.01.2006
Сообщений: 114
Репутация: 66
|
Всем доброго времени суток!
Я собирался освоить возможности DirectX 8 для вывода 2D графики. И сразу же столкнулся с проблемой - существуют два способа вывода 2D: через D3DXSprite и через создание квадратных полигонов и текстурирования их - какой из этих способов выбрать? D3DXSprite кажется заметно проще, но, как я подозреваю, у второго способа больше возможностей, в плане вывода графики. Буду очень признателен за любые советы. P.S: Кроме советов из серии 'зачем осваивать DirectX, если есть хорошие бесплатные 2D движки?'
__________________
"I've done the math enough to know the dangers of a second guessing Doomed to crumble unless we grow and strenghten our communication." MJK |
||
|
|
|
|
|
#267 | ||
|
Юзер
Регистрация: 13.05.2006
Сообщений: 273
Репутация: 92
|
Блин, как я уже писал ранее хочу создать собственный игровой движок. По этой теме прочитал очень много литературы. Но практически во всех статьях и книгах описываются общие принцепы создания, а не сам процесс. Люди, кто нть из вас пробовал написать свой движок? Если кто нть может мне чем то помочь напишите плизз. А то сожусь каждый раз за Delphi и даже незнаю с чего мне начать...Заранее спасибо!
______________________________ Дополняю. Напишу поподробней о моей идее. Короче, хочу написать движок для начала для создания простенького квеста. Главное, чтобы можно было загружать игровые 3D модели и передвигаться. Ни каких мощьных эфектов пока ненадо! Последний раз редактировалось STOLEN; 19.11.2006 в 03:27. |
||
|
|
|
|
|
#268 | ||
|
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400 |
Цитата:
Цитата:
P. S: Чо то я тожа хочу поотвечать на вопросы в разделе "языги программирования". %)) Лавры Покибора мешают мне спать %) |
||
|
|
|
|
|
#269 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Цитата:
), и могу сказать: сперва досконально изучи возможности OpenGL или Direct3D (на основе чего ты там его создавать решил) - пойми, какие функции уже реализованы, а какие придется писать ручками. И не "содись каждый раз за Делфи" - тебе до начала кодирования еще много предстоит изучить и написать на русском языке . Программирование - это не только набивание кода!Давай! Мне интересно будет почитать то, что я еще не читал из него.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#270 | ||
|
Юзер
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112
|
pokibor
Вот возникли у меня вопросы к тебе по Irrlicht Engine. Так как я в Irrlicht'e ламер вопросы для тебя должны быть простыми. Первый: необходимо реализовать такую ситуацию: загрузил я из файла 1.bmp(10,70, 70,70) рисунок, как мне сделать так, чтобы при кликании мышкой по этому рисунку он менялся на рисунок этого же файла с координатами(80, 140, 140, 140) Координаты я написал примерно. Второй: почти как первый. Как сделать так, чтобы при наведении курсором мыши на рисунок он менялся. (использовать координаты и файл из первого вопроса). Третий: как в Irrlicht'e обрабатывать команды с клавиатуры, т.е. мне надо сделать так: чтобы при нажатии клавиши 'W' или стрелки ВВЕРХ этот рисунок передвигался вверх, при нажатии клавиши 'S' или стрелки ВНИЗ рисунок двигался вниз, и соответственно с клавишами 'A' и 'D' или стрелками ВЛЕВО и ВПРАВО. Подскажи, пожалуйста!
__________________
www.rodionovstepan.ru |
||
|
|
|
|
|
#271 | ||
|
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400 |
Цитата:
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 любой своей программы и выложи интерфейс любого класса включая объявление методов здесь. Если я смогу по имени класса и именам параметрофф панять "что это и что оно собой прдеставляет" то ты убийца Кармака иначе - утчи матчасть %)) Цитата:
|
||
|
|
|
|
|
#272 | ||
|
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400 |
Мля тупо метод назвал... уберите Active... просто Aeroplane.Autopilot();
И вобще я жестоко ступил... такого метода не должго быть... должен быть метод принимающий текущее состояние полёта: enum regimeFlight {MAIN_PILOT_MANAGER, AUTO_PILOT, ETC.} averangeCurrentRegimeFlight(AUTO_PILOT); то есть должен быть метод устанавливающий режим полёта а не отдельно автопилота... Цитата:
НО ОСНОВНУЮ ИДЕЮ: ПСЕВДОКОД Я ПОКАЗАЛ. |
||
|
|
|
|
|
#273 | |||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Fulcrum
Грандиозно! Надо бы кинуть на твой пост ссылку как на статью. Цитата:
Теперь о рисовании рисунка. В твоем случае его нужно рисовать методом 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. Цитата:
Код:
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); Цитата:
Пример см. в 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;
}
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
|||
|
|
|
|
|
#274 | ||
|
Юзер
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112
|
Цитата:
Цитата:
pokibor, пожалуйста можно чуток подробнее про первое и, если можно, по понятнее.
__________________
www.rodionovstepan.ru |
||
|
|
|
|
|
#275 | ||
|
Юзер
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112
|
Цитата:
Цитата:
pokibor, пожалуйста можно чуток подробнее про первое и, если можно, по понятнее.
__________________
www.rodionovstepan.ru |
||
|
|
|
|
|
#276 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Я ж тебе сказал: пример 05.UserInterface. Там ты поймешь, как наследовать обработчик, и какой метод ему переопределять. Как в этом же методе можно ловить события мыши, я тебе показал в самом нижнем коде выше. Константы для различных клавишь и событий от мыши см. в хелпе. event.KeyInput.PressedDown определяет, нажата клавиша или отпущена. Для мыши нажатие и отпуск кнопок являются различными событиями. event.MouseInput.X и event.MouseInput.Y - координаты курсора мыши в момент нажатия. event.MouseInput.Wheel - на сколько крутанулось колесико мыши (поворот колесика - отдельное событие).
Итак, в итоге ты должен научится отлавливать любые события. Ну а дальше при возникновении события нажатия кнопки мыши ты проверяешь, не в нужном ли тебе rect'е находится курсор и меняешь передаваемый в отрисовку rect. Вроде все понятно изложил, ты главное 05.UserInterface разбери - сразу отпадет большая часть вопросов.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#277 | ||
|
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400 |
Блин... аж стыдно стало, это был крик души, а не статья.
Насчёт С#. Покибор, если интересует живое обсуждение применения данного языка - http://www.kriconf.ru/2007/rec/KRI_2...ming_forum.ogg Правда там обсуждается многие аспекты но С# обсуждался слишком часто. |
||
|
|
|
|
|
#278 | ||
|
Юзер
Регистрация: 13.10.2006
Сообщений: 420
Репутация: 61
|
Кстати, на sheppard.ru была интересная идея по созданию своего 3-d движка, заключающаяся в том, чтобы спереть оный у Самого Кармака, ибо код движка второй кваки рассекречен ... Самим!
__________________
Настоящий Эгоист всегда счастлив. "Гомосексуализм ненормально с точки зрения морали и прочей фигни." (c) РатибоР |
||
|
|
|
|
|
#279 | ||
|
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400 |
Цитата:
|
||
|
|
|
|
|
#280 | ||
|
Юзер
Регистрация: 13.10.2006
Сообщений: 420
Репутация: 61
|
Цитата:
__________________
Настоящий Эгоист всегда счастлив. "Гомосексуализм ненормально с точки зрения морали и прочей фигни." (c) РатибоР |
||
|
|
|
|
|
|