#71
22 ноября 2008 в 17:19
Проще говоря - от более высокой версии языка руки программиста не выпрямляются.<br />И то верно :D<br /><br />
Удобнее-то да, удобнее, но только при правильном раскладе.<br />А неправильный делать не надо ;D Про удобство - мне лично было бы удобней. Каждый делает по-своему, и выдавать проблемы какой-то конкретной архитектуры за невозможность грамотного написания рендера несколько неуместно ;)<br /><br />Кармак, кстати, в D3 предпочёл рендер-бэкэнд (непосредственно выполняющий отрисовку, установку стейтов и т.д.) писать на С. На С++ у него фронт-энд (всякий куллинг, инициализация...).
#72
24 ноября 2008 в 06:07
KRIGSSVIN пишет:<br />
и выдавать проблемы какой-то конкретной архитектуры за невозможность грамотного написания рендера несколько неуместно ;)<br />Мягко выразился :)<br />С++ является расширением языка С, т.е. основан на его ядре (и совместимость с С - один из его принципов) . Так что просто глупо пытаться писать на ООП все, что можно. Это будет похоже на закрывание от самого себя солидной части возможностей C++, который разработан как универсальный язык, сочетающий в себе поддержку большого количества различных методов программирования.<br /><br />
#73
24 ноября 2008 в 15:23
В математику я сегодня встроил свою версию CRC-таблиц. CRC32, проще говоря.<br /><br /><br /><br /> static uint32 crc_table[256] = {<br /> 0x00000000, 0x77073096, 0xEE0E612C, <br /> ...,<br /> 0x5A05DF1B, 0x2D02EF8D<br />};<br /><br />#define STEPCRC(crc,byte) crc = crc_table[((int)crc ^ (byte)) & 0xff] ^ (crc >> 8 )<br /><br />class crc32<br />{<br /> uint32 Start(void)<br /> {<br /> return (~((uint32)0));<br /> }<br /><br /> uint32 Finish(uint32 crc)<br /> {<br /> return (~crc);<br /> }<br /><br />uint32 AddByte(uint32 crc,uint8 b) <br /> {<br /> STEPCRC(crc,b);<br /> return(crc); <br /> }<br /><br />uint32 AddWord(uint32 crc,uint16 w) <br />{ <br />uint8 *ptr;<br /> ptr = (uint8 *)&w;<br /> STEPCRC(crc,ptr[0]);<br /> STEPCRC(crc,ptr[1]);<br />return(crc); <br />}<br /><br />uint32 AddLong(uint32 crc,uint32 l) <br />{<br />uint8 *ptr;<br /> ptr = (uint8 *)&l;<br /> STEPCRC(crc,ptr[0]);<br /> STEPCRC(crc,ptr[1]);<br /> STEPCRC(crc,ptr[2]);<br /> STEPCRC(crc,ptr[3]);<br />return(crc); <br />}<br /><br /> uint32 Array(const uint8 * buf,uint32 buflen)<br /> {<br /> uint32 crc = (~((uint32)0));<br /><br /> if (!buf ) return 0;<br /><br /> while( (buflen&0xF) != 0 )<br /> {<br /> STEPCRC(crc,*buf); buf++;<br /> buflen--;<br /> }<br /><br /> buflen>>=4;<br /><br /> while(buflen--)<br /> {<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /><br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /><br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /><br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> STEPCRC(crc,*buf); buf++;<br /> }<br /><br /> crc ^= 0xFFFFFFFF;<br /><br /> return crc;<br /> }<br /><br />};<br /><br /><br /><br />Индексы решил все не выкладывать - объем информации большой. Потом, как-нибудь, попробую реализовать CRC64. Для справки:<br /><br />typedef signed __int64 int64;<br />typedef signed long int32;<br />typedef signed short int16;<br />typedef signed char int8;<br /><br />typedef unsigned __int64 uint64;<br />typedef unsigned long uint32;<br />typedef unsigned short uint16;<br />typedef unsigned char uint8;<br />
#74
27 декабря 2008 в 12:46
Вчера вот меня осенило, и я придумал такой механизм интересный построения брашей в редакторе. По принципу бесконечного удлинения. Алгоритм пока не разработал. Вкратце суть такова:<br /><br />Мы начинаем создавать стандартный браш типа "блок". Во вьюпорте редактора рисуем, по сути, сначала полигон, с которого начнет строительство браша. Когда нарисуем, делаем или правый мышеклик, чтобы перейти к дальнейшей работе с брашем, или два мышеклика, чтобы закончить строительство браша на плоском полигоне. Если идем далее, то лучше перейти в другой вьюпорт, там мы начнем вытягивать сегмент браша. Когда уже все, по нашему мнению, готово с этим сегментом браша, то или два мышеклика, либо один, чтобы продолжить тянуть сегменты. При желании, можно такое делать с любой стороной браша. Фишка в том, что новый сегмент ориентируется в пространстве, следуя за курсором мышки, что может позволить из одного блока вытягивать самые разные, а порой и довольно причудливые формы, в зависимости от того, как будет развита такая техника строительства брашей. Чисто теоретически, при применении такой техники, из брашей можно научиться вытягивать полые внутри трубы, не паря себе мозги по поводу сочленений и изгибов, проблемой создания которых тогда станет исключительно прямота рук дизайнера уровней.<br /><br />Как идея?
#75
27 декабря 2008 в 15:06
Смотри Google SketchUp, там именно такой инструментарий.
#76
27 декабря 2008 в 19:29
В большинстве 3дредакторов что-то подобное есть :)<br /><br />работаю в unigraphics, там тоже часто нужно похожее делать<br />сначала 2д эскиз, потом вытягивать по направляющей (произвольно расположенной в 3д), так имхо удобнее, но дольше делать (<br />
#77
09 января 2009 в 17:05
На днях решил переделать уже переработанную математику. Получается довольно-таки интересная штука, с применением деления вектора на вектор, матрицы на матрицу. Пока я почленное деление вектора на вектор применил для альтернативного скейла вектора. То деление вектора, что применяется обычно (вычисление длин векторов, и их непосредственное деление), я тоже реализовал, но пока не нахожу им достойного применения. Может быть, кто-нибудь подскажет, в каких случаях эти действия необходимо применять?<br />
#78
10 января 2009 в 07:28
Может объяснишь непосвященному, зачет это нужно и что дает?<br /><br />интересно :)
#79
10 января 2009 в 09:04
цитирую:<br /><br /> Деление вектора на вектор. Операция деления вектора<br />на вектор возможна только для коллинеарных векторов.<br /> c<br /> Частным = c ÷ a от деления вектора с на<br /> a<br />коллинеарный ему вектор а≠0 называется число х,<br />произведение которого с делителем а дает делимый вектор<br /> c ÷ x ⋅a = c.<br /> Частное от деления коллинеарных векторов равно<br />частному от деления их длин, взятому со знаком «+» или «–»,<br /><br /><br /><br /> 9<br /><br /><br />в зависимости от того, одинаково или противоположно<br />направлены векторы:<br /> c c<br /> = + , если с↑↑а,<br /> a a<br /> c c<br /> = − , если с↑↓а.<br /> a a<br /> Деление коллинеарных векторов обладает свойствами:<br /> λ ⋅a a a a<br /> 1) = λ⋅ , ÷μ = (сочетательность),<br /> c c c μ⋅c<br /> a+b a b<br /> 2) = + (распределительность).<br /> c c c