"Программирование ролевых игр с DirectX, 2-е издание"
Книга интересная смотрел ее, она же вдохновила писать свой движок. Но есть причины, по которым я бы не советовал ее воспринимать как какон программирования игр. Там много моментов, про которые можно сказать - "плохое решение". Автор сразу заостряет внимание не на абстракции от API (DirectX), а пытается уживаться с его особенностями. Вследствие чего движок становится слабо расширяемым, привязанным исключительно к одному API. По мне, так лучше все реализации самой граф библиотеки лучше инкапсулировать.
Quote (redinard)
да код я действительно переписываю но лишь для того чтобы убедится что он работает и в дальнейшем интерпритировать его под свои нужды.
Ну это норма, пока ты начинаешь изучть программирование, но как только ты начинаешь серьезный проект, выходящий за рамки "привет, мир!" стоит пытаться придумывать свое решение. А потом идти по лестнице: ооп, паттерны и т.д.
redinard, не учись ты по этим самоучителям времен дедушки Ленина! Лучше изучай DX SDK. В нем все полно описано и объяснено,но опять же, халявы ждать не стоит. Сначала изучи язык, а затем используй лишь алгоритмы написания программ(что надо сделать,как это сделать,как лучше всего это будет работать и т.п.), не стоит переписывать чужой код просто так.
Программист является некоей "соковыжималкой" машинных ресурсов, которая находится в руках геймдизайнера. И все зависит от него, что вытоге она выжмет: веселую ферму или крайсис с суперграфикой. Возможно, пример не свсем корректен, но реальность такова.
Лично я,не побоюсь этого, был просто озарен светом истины, когда прочитал книгу GoF, теперь я с неким отторжением смотрю свои старые исходники, написанные просто ужасно и ужасно неудобно. Паттерны - это действительно очень полезная вещь.
cVertexBuffer buf = new cVertexBuffer9; buf->Create(driver,(void*)&buf,...) // driver - видеодрайвер,список продолжается,далее идут размер структуры,индексный для удобства { } //....
Сообщение отредактировал Техник - Вторник, 04 Октября 2011, 15:05
Id tech 3 - бесплатен,остальное смотри в лицензии GPL. UDK бесплатен для НЕКОМЕРЧЕСКОГО использования, то есть нельзя продавать свою игру, только бесплатно выкладывать.
Собственно,сабж. Я предполагаю создать струкутру вершины и в вершинном буфере добавлять в массив вершин данные,затем используя.Но тогда теряется гибкость.
Большая утрата,и для спорта, и,в первую очеред, для их семей. Конечно, многочисленные авиакотострофы и "булгария" дают понять нам, что нужно ставить на должность только хорошо проверенные кадры, и большей частью это касается "верхушки".
Axis_Math::cVector3f - это мой собственный класс 3d вектора в моем движке. Операторы проверки равенства и неравенства реализованы. Как работает find() я знаю, кратко, есть итераторная пара между которыми происходит поиск. Первый итератор сравнивается со значением третьего параметра.
1>d:\program files\microsoft visual studio 9.0\vc\include\algorithm(40) : error C2679: бинарный '==': не найден оператор, принимающий правый операнд типа 'const short' (или приемлемое преобразование отсутствует) 1> e:\проекты команды\движок\прототип\axis engine alpha\axis engine alpha\cvector3.h(119): может быть 'bool Axis::Axis_Math::cVector3<Tx>::operator ==(const Axis::Axis_Math::cVector3<Tx> &)' 1> with 1> [ 1> Tx=float 1> ] 1> при попытке сопоставить список аргументов '(Axis::Axis_Math::cVector3<Tx>, const short)' 1> with 1> [ 1> Tx=float 1> ] 1> d:\program files\microsoft visual studio 9.0\vc\include\algorithm(74): см. ссылку на создание экземпляров функции шаблон при компиляции "_InIt std::_Find<std::_Vector_iterator<_Ty,_Alloc>,short>(_InIt,_InIt,const short &)" 1> with 1> [ 1> _InIt=std::_Vector_iterator<Axis::Axis_Math::Vector3f,std::allocator<Axis::Axis_Math::Vector3f>>, 1> _Ty=Axis::Axis_Math::Vector3f, 1> _Alloc=std::allocator<Axis::Axis_Math::Vector3f> 1> ] 1> e:\проекты команды\движок\прототип\axis engine alpha\axis engine alpha\cvertexbuffer.cpp(76): см. ссылку на создание экземпляров функции шаблон при компиляции "_InIt std::find<std::_Vector_iterator<_Ty,_Alloc>,short>(_InIt,_InIt,const short &)" 1> with 1> [ 1> _InIt=std::_Vector_iterator<Axis::Axis_Math::Vector3f,std::allocator<Axis::Axis_Math::Vector3f>>, 1> _Ty=Axis::Axis_Math::Vector3f, 1> _Alloc=std::allocator<Axis::Axis_Math::Vector3f> 1> ]
Quote (froex)
std::vector<std::vector<int> > - пробел есть
Я и так и через typedef.
Сообщение отредактировал Техник - Пятница, 02 Сентября 2011, 17:35
У меня такой вопрос, решил реализовать динамически расширяемый вектор со значениями собственного класса. Но при компиляции выдается ошибка. Я так понял, что проблема в типе значения - классе. Может чего-то я не понял. Вообще можно ли использовать свои классы как типы?
Code
std::vector<Axis_Math::cVector3<float>> vertexs; //... std::vector<Axis_Math::cVector3<float>>::iterator iter = vertexs.begin(),iter_end = vertexs.end(),iter1;
iter1 = std::find(iter,iter_end,index); // index - индекс вершины,выдает ошибку //...