Поиск
Навигация
Скоро в сети...
Gamenode — Игровая база данных

Valve Game Center
Последние статьи
  • Карта города в NFS UNDERC...
  • Список автомобилей в NFS ...
  • Мой ребенок – просто гейм...
  • Сайты без браузера ? Легк...
  • Foxmarks - синхронизация ...
  • 10 способов скачать видео...
  • 28 дней из жизни сталкера
  • Управления компьютером с ...
  • Переустановка Windows за ...
  • Как защитить Ваш номер IC...
| RSS
Главная » FAQ [ Добавить вопрос ]


Здесь вы можете задавать вопросы и получать ответы как нестранно :)



Внимание! При цитировании ссылка на страницу с материалом обязательна!

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

Если Вас все же интересуют разнообразные доводы, вот ссылки на подобные темы:

http://forum.ixbt.com/topic.cgi?id=26:006948
http://forum.ixbt.com/topic.cgi?id=1:000453
http://forum.ixbt.com/topic.cgi?id=1:000257
http://forum.ixbt.com/topic.cgi?id=1:000353
http://forum.ixbt.com/topic.cgi?id=1:000075

а вот тут немного про использование переключаемых API (OpenGL и D3D) в одном проекте:

http://forum.ixbt.com/topic.cgi?id=1:000274
http://forum.ixbt.com/topic.cgi?id=1:000336

и наконец, для самых дотошных, сравнительная таблица D3D и OGL (при ознакомлении следует помнить о номерах версий и расширениях этих API, которые приводят к дополнительным нюансам):

http://www.xmission.com/~legalize/d3d-vs-opengl.html

Внимание! При цитировании ссылка на страницу с материалом обязательна!

вопрос аналогичен предыдущему (про Direct3D и OpenGL) да и вообще любым вопросам, содержащим в себе слово «versus». каждому свое. C++ — это не просто расширение языка, это изменение парадигмы. т.о. если вы собираетесь писать на C++ так же, как писали на C — лучше этого не делать. сам же С ни в коем случае нельзя считать устаревшим, он просто перешел в другую область применения. если С++ помогает строить архисложные программные комплексы, то С незаменим в решении низкоуровневых системных и тому подобных проблем. С и С++ сосуществуют как кинематограф и мультипликация, 2D и 3D игры и много что еще. Вот что говорит по этому поводу Гради Буч:

«Объектно-ориентированный анализ и проектирование отражают эволюционное, а не революционное развитие проектирования; новая методология не порывает с прежними методами, а строится с учетом предшествующего опыта. К сожалению, большинство программистов в настоящее время (это был 1994 год) формально и неформально натренированы на применение только методов структурного проектирования. Разумеется, многие хорошие проектировщики создали и продолжают совершенствовать большое количество программных систем на основе этой методологии. Однако алгоритмическая декомпозиция помогает до определенного предела, и обращение к объектно-ориентированной декомпозиции необходимо. Более того, при попытках использовать такие языки, как С++ или Ada, в качестве традиционных, алгоритмически ориентированных, мы не только теряем их внутренний потенциал — скорее всего результат будет даже хуже, чем при использовании обычных языков С и Pascal. Дать электродрель плотнику, который не слышал об электричестве, значит использовать ее в качестве молотка. Он согнет несколько гвоздей и разобьет себе пальцы, потому что электродрель мало пригодна для замены молотка».

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



Внимание! При цитировании ссылка на страницу с материалом обязательна!

Ролевые системы регламентируют взаимодействия в РПГ-мирах и состав этих миров. Например, они определяют такие вещи, как возможные расы, характеристики персонажей и объектов, урон причиняемый тем или иным оружием в руках того или иного персонажа. В настоящее время существует множество таких систем, используемых в различных РПГ. Самая известная, пожалуй, AD&D. См. также GURPS, Fuzion, Cyberpunk 2020 и т.п. Учтите, что не все системы в чистом виде годятся для реализации в компьютерных играх.

Ссылки по теме:

http://www.gamestudio.3dn.ru — Здесь много полезного :)
http://www.rolemancer.ru
— отечественный ресурс по ролевым играм
http://www.rpg.enjoy.ru — еще один :)
http://www.meta-earth.com/fuzion/core.html — Fuzion home page

Хочу предупредить, что разработка ролевой системы далеко не такое простое дело, как может показаться на первый взгляд. Прежде чем разрабатывать что-то новое имеет смысл подумать о лицензировании и/или адаптации одной из существующих систем. Кроме того, игрокам будет проще ориентироваться в уже знакомой системе.

Внимание! При цитировании ссылка на страницу с материалом обязательна!

Это еще один повод для флейма, но уже по иной причине — этот вопрос сложно формализуется и тоже не имеет однозначного ответа. У меня есть свое субьективное мнение, которое я, конечно же, считаю правильным :), но так как со мной, видимо, многие не согласны - я не стал помещать его в FAQ.

Внимание! При цитировании ссылка на страницу с материалом обязательна!

Прямые ссылки на некоторые книги:
http://int3.net/ex-book/Alger/Alger_C++.zip
Название: Элджер - C++ библиотека программиста.
Размер: 1783 Кб.
Описание: Книга описывает множество полезных приёмов, условно разделённых на три большие темы: нетривиальное использование указателей, иерархии классов и управление памятью. Досконально разобраны и другие полезные темы, в том числе которых - создание шаблонов, обработка исключений и оптимизация программ. В книге рассматривается эталонный C++ стандарта ANSI, не связан ни с каким конкретным компилятором или визуальной средой. Книга ориентирована на программистов, обладающих опытом программирования на C++.

http://int3.net/ex-book/Petzold/petzold_p1.zip
Название: Петзолд - Программирование под Windows 95. Том I
Размер: 4171 Кб.
Описание: Книга хорошо рассказывает о стандартном программировании на Win32Api в VC++. Сильно рекомендую прочитать новичкам и имеющим проблемы с Api. Идёт в двух томах с кучей примеров. Слегка староватая, но тем не менее полезная книга.

http://int3.net/ex-book/Petzold/petzold_p2.zip
Название: Петзолд - Программирование под Windows 95. Том II
Размер: 4036 Кб.
Описание: Книга хорошо рассказывает о стандартном программировании на Win32Api в VC++. Сильно рекомендую прочитать новичкам и имеющим проблемы с Api. Идёт в двух томах с кучей примеров. Слегка староватая, но тем не менее полезная книга.

http://int3.net/ex-book/Rumianzev/rumiantzev_p1.zip
Название: Румянцев - Азбука программирования в Win32Api.
Размер: 10707 Кб.
Описание: Изложены вопросы создания программных приложений для Windows. Описаны все основные и нужные для начала программирования на Api функции. Материал книги иллюстрируется многочисленными примерами. Самая лучшая книга по Api для новичков!

http://int3.net/ex-book/Rumianzev/rumiantzev_p2.zip
Название: Румянцев - Работа с файлами в Win32Api.
Размер: 12512 Кб.
Описание: Изложены вопросы создания программных приложений для Windows. Рассмотрены основы работы с файлами в Win32Api, структура исполняемого файла (удачно!), его заголовки и разделы, экспорт и импорт функций, таблицы объектов, процессы и связанные с ними потоки.
В значительной степени материал книги развивает и дополняет предыдущую книгу автора.

http://anatolix.naumen.ru/files/books/mode...pdesign_rus.zip
Название: Современное проектирование на C++
Пожалуй одна из самых знаменитых книг из темы "Advanced C++."

http://anatolix.naumen.ru/files/books/kr_rus.zip
Название: Язык программирования C.
Авторы: Б. Керниган, Д. Ритчи

http://it-books.narod.ru/C_CPP/CppForRealProgrammers_rus.rar
Автор: Джефф Элджер
Название: C++ Библиотека программиста
Описание: Данная книга будет полезна людям переходящим из "просто людей которые умеют программировать на C++" в Программистов на C++". В книге очень хорошо описаны многие продвинутые концепции C++ (Например концепция smart pointer). Книга содержит некоторое количество не грубых ошибок, но ее ценность это не уменьшает.

http://anatolix.naumen.ru/files/books/lipp..._primer_rus.zip
Название: Язык программирования С++. Вводный курс.
Автор: Стенли Липпман, Жози Лажойе

http://anatolix.naumen.ru/files/books/bcppb5_rus.zip
Авторы: Джарод Холингвэрт, Дэн Баттерфилд, Боб Сворт, Джэйми Оллсоп
Название: C++Builder 5. Руководство разработчика
Описание: В принципе книжка в которой есть все. Есть перевод на русский язык. В электронном виде(англ) книжка содержит 2048 страниц (какое круглое число!). В печатном виде она чуть короче(и русская и английская). Некоторые главы не вошли.

Ссылки на другие сайты:

http://www.realcoding.net
http://xammep.nm.ru/doc/cpp/index.html
http://doks.gorodok.net/?p=8
http://www.helloworld.ru
http://docs.h1.ru/ci.html
http://anatolix.naumen.ru/books.htm
http://www.natahaus.ru
http://dasbook.ru/index.php

Куча книжек на английском, чтобы скачать надо зарегистрироваться на сайте.
http://pdfchm.com

МНОГО ссылок на сайты с книгами (по разным тематикам):
http://jkin.livejournal.com/677.html

Собственно, немного пороясь в этих ссылках, можно найти почти все что угодно (на русском языке!) от Кнута до Александреску..

Один из лучших источников книг - IRC. Сеть IRCHighway, каналы #ebooks (предпочтительнее) и #bookz. Количество книг и разнообразие должно удовлетворить даже самых требовательных. Зачастую можно обнаружить довольно свежие издания. Литература только на английском!
http://www.gamedev.ru/faq/?id=48


Внимание! При цитировании ссылка на страницу с материалом обязательна!

Признанные лучшие книги о С++:  http://anatolix.naumen.ru/Books/cplusplus
Хилл Мюррей; Страустрап Бьярн C++ (http://fanlib.ru/BooksList.aspx?RubricId=8e802405-a779-4346-ae34-bfe792f01fd2 ).

http://www.gamedev.ru/faq/?id=125


Внимание! При цитировании ссылка на страницу с материалом обязательна!

http://www.gamedev.ru/code/forum/?id=39491

Внимание! При цитировании ссылка на страницу с материалом обязательна!

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

Попробую объяснить на пальцах рендеринг с Фиксированым Конвеером(без шейдеров).

При вызове функции Draw идёт цикл по каждой вершине(если быть точнее то по каждому индексу)
- каждая вершина попадает в вершинный фиксированный конвеер.

Сначала каждая вершина из 3-D координат преобразуется в экранные 2-D координаты умножением на матрицу

//
mat=мировая(матрица объекта)*МатВида*МатПроекции;
Out.pos=mul(In.Position,mat);
//

Затем каждая входящая в конвеер нормаль(если такие имеются) умонжается на мировую(матрицу объекта) матрицу и нормализуется(приводится к еденичной длинне) для правильного расчёта освещения.
Out.nor=normalize(mul(In.normal,World));

В итоге получаем трансформированную нормаль.

Дальше видеокарта считает суммарное освещение(если нормали есть в формате вершин, и установлены источники света). Освещение вершины считается очень просто, буквально за несколько тактов - с помощью скалярного произведения (чем меньше угол между вектором света и вектором нормали вершины, тем темнее. Максимум освещения - 1.0(полное освещение) минимум 0.0(полное затенение)).

Out.lighting=0.0f;
for(i=0;i
Out.lighting+=max(dot3(nor,vecLight[i]),0.0f)*(Light.Diffuse*objMaterial.Diffuse)+(Light.Ambient*objMaterial.Ambient);
//здесь для Dir-light без расчёта отражающего(specular) света

Текстурные координаты подаются на выход обычно без изменения. Хотя можно выходные ТК умножить на матрицы скаляции(маленький размер для Detail-текстуры, большой - для карты цветов), чтобы не засорять вершинный буфер лишними данными.
 for(i=0;i
Out.texC[i]=mul(In.texC[0],texMatrix[i]);

Всё, теперь вершины готовы для дальнейшей отрисовки. Даже сейчас, если провести цикл по каждому полигону, и отрисовать от каждой вершины в полигоне до каждой вершины(3 линии), то мы получим сетку(wireframe) объекта(правда однотонную).

Теперь самое интересное - как далее рисуется объект по пикселам.

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

for(i=0;i
{
vertex1=indexeVertex[i];
vertex2=indexesVertex[i];
vertex3=indexesVertex[i];
};

Далее самое важное, что люди обычно не понимают. Интерполятор, Пиксельный конвеер.
Видеокарта проходит циклом по всем пикселям, принадлежащим выводимому полигону.
(получается чем объект дальше - тем меньше выводимых пикселов, тем меньше работы у пиксельного конвеера)
К каждому пикселю видеокарта интерполирует(т.е линейно усредняяет по 3 значениям из вершин) те данные, которые дал вершинный конвеер (это цвет и/или ТексКоорд). Делает он это примерно так(не совсем конечно, но похоже).
//
outInterpolatedValue=(1-distanse(pixelScreenPos,vertex1.pos))*vertex1.value+(1-distanse(pixelScreenPos,vertex2.pos))
*vertex2.value+(1-distanse(pixelScreenPos,vertex2.pos))*vertex2.value;
//

Так для каждого пикселя генерируются средние значения вершинных данных в данной координате пиксела на экране.
Далее тоже сложно и занятно. Как объект текстурируется, при наличии текстурных координат.
Цвет текселя для данного текстурного слоя по данным текс. координатам находится при помощи текстурной фильтрации.
//
При точечной фильтрации из текстуры для пикселя берётся ближайший цвет к координатам(поэтому она такая и резкая).
При три/биллинейной фильтрации цвет пикселя интерполируется между тремя ближайшими пикселами. Трилинейной фильтрацией интерполируется чётче, засчёт более сложного алгоритма.
При анизотропной фильтрации(в сочетании с би/трилинейной) интерполируются сразу несколько текселей(2,4,6,8,16), засчёт чего мы можем получить более чёткую картинку при слишком "сжатых" текстурных координатах (обычно у полигонов слишком круто повёрнутых к камере).

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

function tex2D(Sampler tex,vector2 Tcoord)
{
color1=TextureBuffer[int(Tcoord.x*tex.Width)][int(Tcoord.y*tex.Height)];
color2=TextureBuffer[int(Tcoord.x*tex.Width)+1][int(Tcoord.y*tex.Height)];
color3=TextureBuffer[int(Tcoord.x*tex.Width)+okrug(Tcoord.x*tex.Width-tex.Width)][int(Tcoord.y*tex.Height)+
+okrug(Tcoord.y*tex.Height-tex.Height)];

return pixelOut=interpolateBiLine(color1,color2,color3,Tcoord);
};

при наличии мультитекстурирования вызовов "interpolate" будет столько, сколько текстурных слоёв(самплеров).
А смешиваться они будут так, как вы укажете перед рендером.
Допустим для 2-х самплеров и цвета вершины со смешиванием MULTPLE-(вершина и самплер1)=результат1, и MULTIPLE2X-(результат1 и самплер2) это будет выглядеть так.

return PixelColorOut = colorInterpolated*tex2D(sampler1,texC0)*tex2D(sampler2,texC1)*2;

И вот так видеокарта сделав цикл по всем полигонам и пикселам рисует объект на экран.
Я конечно описал всё очень схематично и примитивно (кстати при рендере все функции ассемблероподобны=) ), и без описания блока пиксельных тестов (z-test - для того чтобы не рисовать дальние пикселы поверх ближних, stensil-test, alpha-test - чтобы не рисовать почти прозрачные пикселы , alpha-blending- эфекты полупрозрачности, fog-blend - туман), но крайне важно понять хотябы схему работы рендеринга
1. для оценки производительности приложения(из-за чего тормозит, а из-за чего нет, что почему, как работает)
2. конечно же для понимания замены фиксированного вершинного и пиксельного конвеера соответственно вершинными и пиксельными шейдерами
(хотя можно и третий пункт приписать - чтобы не думать что видеокарта это магическая штуковина, которая преобразовывает циферки в реальность =) ).

Справка. Шейдеры - это маленькие програмки, которые выполняются соответственно для каждой вершины(VShader) и выводимого пиксела(PShader) объекта.

Вершинный шейдер заменяет вершинный конвеер, то есть:
ВШ заменяет
1. Расчёт экранной позиции вершины.
2. Расчёт освещения.
3. Расчёт передаваемых в пиксельный шейдер текстурных координат.

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

Основные "непонимания" при начале работы с шейдерами такковы:

1. Зачем нужны вершинные шейдеры, если фиксированный вершинный конвеер прекрасно справляется с повершинным освещением, расчётом позиции и ТК?
2. Зачем нужны вершинные шейдеры, если изменения позиции, цвета, можно вручную сделать Lock/UnLock VertexBuffer.

Ответы:
а) Основное предназначение вершинного шейдера - это не расчёт позиции, цвета, освещения, а подготовка данных для пиксельного шейдера, т.е. передача своих данных в линейный интерполятор. Например вершинный шейдер может
легко передать в интерполятор нормаль. Получится что каждый пиксел будет иметь свою нормаль, и пиксельный шейдер влёгкую организует perpixel-освещение, освещение по Фонгу, bump-mapping, ... Фииксированный вершинный конвеер так не умеет.
б) "Lock/UnLock VertexBuffer" каждый раз, вызывая эти методы вы гоняете по шине весь вершинный буффер, что достаточно замедляет программу.

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

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

В вершинный шейдер же подаётся то что находится в вершинном буфере для данной вершины - для FFP стандатно 32 байта (позиция вершины, нормаль вершины, текстурные координаты[0]).

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

Основная доля графических эфектов делается в пиксельном шейдере. Можно например из текстуры сделать карту нормалей и поставить на второй текстурный слой, затем прочитать эту нормаль из текстуры при рендере. У нас получится что к каждой точке(пикселу) поверхности объекта своя нормаль, уже не интерполированная - эфект микро-неровностей и рельефа.

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

http://www.gamedev.ru/faq/?id=142



Внимание! При цитировании ссылка на страницу с материалом обязательна!

Последняя версия OpenGL устанавливается при установке драйверов на вашу графическую карту.
Достаточно зайти на сайт nVidia http://www.nvidia.com или ATI http://www.ati.com и скачать последние драйвера для вашей карты и установить их.

Внимание! При цитировании ссылка на страницу с материалом обязательна!



© 2006-2024 "P-GameStudio".
Сайт оптимизирован под любое разрешение.
Используются технологии uCoz
Случайная картинка
Активные юзвери
1

(180 постов)

2

(87 постов)

3

(83 постов)

4

(77 постов)

5

(33 постов)

6

(29 постов)

7

(28 постов)

8

(27 постов)

9

(26 постов)

10

(24 постов)

Наш опрос
Как вам IPhone ?
Всего ответов: 54
Статистика




Яндекс цитирования

Рейтинг@Mail.ru