Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Сайтостроение - самые эффективные решения


Спонсор Рассылки: Клуб Желающих Создать и Развивать Свой Сайт.


Здравствуйте.

Действуйте сейчас, если хотите создать сайт за Час..

PHP. Практика создания Web-сайтов
Самоучитель. Создание Web-сайтов: + 2 видеокурса на двух CD: Adobe Flash CS3 & Adobe Dreamweaver CS3
Видеосамоучитель. Создание Web-страниц
PHP, MySQL и Dreamweaver. Разработка интерактивных Web-сайтов


Основы 3D-графики


Источник: http://wm-help.net/

1. Задание объектов и сцен
Покажем здесь достаточно распространенную схему задания 3D объектов и сцен. Подобная схема, кстати, используется, в 3D Studio.

Каждая сцена представляет собой следующее:
* набор объектов
* набор источников света
* набор текстур
* набор камер (хотя обычно используется одна)
Каждый объект задается следующим:
* набор вершин
* вершина определяется своими 3D координатами и соответствующими ей координатами в текстуре
* набор граней
* грань определяется тремя вершинами и текстурой (вообще говоря, не текстурой, а материалом: кроме текстуры могут быть заданы, например, коэффициенты рассеивания и отражения света)
* поведение объекта
* то есть, расположение (то есть смещение, ось поворота, угол поворота, коэффициент масштабирования, и т.д.) в зависимости от номера кадра; обычно задается в нескольких ключевых точках и интерполируется между ними с помощью сплайнов

Каждый источник света задается следующим:
*положение
*ориентация (точка, в которую направлен этот источник, target)
*тип (фоновый/направленный/ненаправленный)
*цвет (обычно RGB) Каждая текстура представляет собой прямоугольную 2D картинку, часто бывает фиксированных размеров (например, 64x64, 128x128, 256x256).

Каждая камера задается следующим:
* положение (location)
* направление (точнее, точкой, в которую направлена эта камера; target)
* угол зрения (FOV)
* угол поворота относительно своей оси (roll)

2. Проецирование
Мы будем использовать только обычное перспективное проецирование на плоскость зрения "стандартной" камеры, определенной в пункте 1.1 (там же написаны и формулы проецирования). Случай произвольной камеры будет приводиться к случаю стандартной камеры.

3. Матричные преобразования

Вообще говоря, лучше всего немного почитать любую книжку по линейной алгебре. Здесь будет только краткий рассказ о 3D преобразованиях, о том, как их делать с помощью матриц, и о том, что же такое матрицы и как с ними работать.

Введем несколько терминов. n-мерный вектор, он же вектор размерности n, он же вектор размера n: упорядоченный набор n действительных чисел. Вообще говоря, практически то же самое, что и обычный 1D-массив. Матрица размера m на n (будет обозначаться как m*n, mxn): таблица размера m на n, в каждой клетке которой — действительное число. Это уже 2D-массив. Всего лишь. Вот пример матрицы 3x3:

[ 15 y*z 0.6 ]

[ 7 -3 91 ]

[ sin(x) 0.123 exp(t) ]

Займемся определением операций над векторами и матрицами. Вектор будем записывать в столбик и рассматривать его как матрицу размера n*1.

Операция скалярного произведения векторов: определена для двух векторов одинаковых размеров. Результат есть число, равное сумме произведений соответствующих элементов векторов. Пример:

[ 1 ] [ 4 ]

[ 2 ] * [ 5 ] = 1*4 + 2*5 + 3*6 = 32

[ 3 ] [ 6 ]

Операция векторного произведения: определена для (n-1) вектора одинакового размера n. Результат — вектор, причем, что интересно, перпендикулярный всем множителям. Результат меняется от перестановки мест множителей!!! Формально определяется как определитель матрицы, первая строка которой есть все базисные вектора, а все последующие — соответствующие координаты всех множителей. Поскольку нам она будет требоваться только для 3D пространства, мы определим векторное произведение двух 3D векторов явно:

[ Ax ] [ Bx ] | i j k | [ Ay*Bz-Az*By ]

AxB = [ Ay ] x [ By ] = | Ax Ay Az | = [ Az*Bx-Ax*Bz ]

[ Az ] [ Bz ] | Bx By Bz | [ Ax*By-Ay*Bx ]

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

[ 1 x 500 ] [ 8 a 3 ] [ 9 a+x 503 ]

[ 2 y 600 ] + [ 9 b 2 ] = [ 11 b+y 602 ]

[ 3 z 700 ] [ 10 c 1 ] [ 13 c+z 701 ]

Операция умножения матрицы на число: определена для любой матрицы и любого числа; каждый элемент результата равняется произведению соответствующего элемента матрицы-множителя и числа-множителя.

Операция умножения двух матриц: определена для двух матриц таких размеров a*b и c*d, что b = c. Например, если b = c, но a != d, то при перестановке множителей операция будет вообще не определена. Результатом умножения матрицы A размером a*b на матрицу B размером b*d будет матрица C размером a*d, в которой элемент, стоящий в строке i и столбце j, равен произведению строки i матрицы A на столбец j матрицы B. Произведение строки на столбец определяется как сумма произведений соответствующих элементов строки и столбца. Чтобы было хоть чуть-чуть понятно, пример умножения строки на столбец (они должны быть равной длины, кстати; поэтому и такие ограничения на размеры матриц):

[ 4 ]

[ 1 2 3 ] * [ 5 ] = 1*4 + 2*5 + 3*6 = 32

[ 6 ]

А чтобы перемножить две матрицы, надо эту операцию проделать для каждого элемента. Вот пример:

[ 1 2 3 ] [ 0 3 ] [ 1*0+2*1+3*2 1*3+2*4+3*5 ]

[ 4 5 6 ] * [ 1 4 ] = [ 4*0+5*1+6*2 4*3+5*4+6*5 ] = ...

[ 7 8 9 ] [ 2 5 ] [ 7*0+8*1+9*2 7*3+8*4+9*5 ]

Умножение и сложение матриц обладают почти тем же набором свойств, что и обычные числа, хотя некоторые привычные свойства не выполняются (например, A*B != B*A); нам на самом деле понадобится знать, что произведение вида A*B*C*D*... не зависит от того, как расставить скобки. Или, если угодно, что

A*(B*C) = (A*B)*C.

Теперь забудем об этом на некоторое время и перейдем к преобразованиям. Любое движение (то есть преобразование пространства, сохраняющее расстояние между точками) в трехмерном пространстве, согласно теореме Шаля, может быть представлено в виде суперпозиции поворота и параллельного переноса, то есть последовательного выполнения поворота и параллельного переноса. Именно поэтому основная часть информация о поведении объекта — это его смещение, ось поворота и угол поворота. И именно поэтому нам достаточно знать, как сделать два преобразования — перенос и поворот.

Перенос точки (кстати, точки будут также рассматриваться как вектора с началом в начале координат и концом в собственно точке) с координатами (x,y,z) на вектор (dx,dy,dz) делается простым сложением всех координат. То есть результат — это (x+dx,y+dy,z+dz). Как бы сложили вектор-точку и вектор-перенос.

Поворот — занятие уже более интересное. Но тоже простое. Рассмотрим для примера поворот точки (x,y,z) относительно оси z. В этом случае z не меняется вообще, а (x,y) меняются так же, как и при 2D повороте относительно начала координат.

Посмотрим, какие будут координаты у точки A' — результата поворота A(x,y) на угол alpha.

Пусть r = sqrt(x*x+y*y). Пусть угол AOx равен phi, тогда из рисунка видно, что cos(phi) = x/r, sin(phi) = y/r. Угол A'OA равен по условию alpha. Отсюда

x' = r*cos(alpha+phi) = r*(cos(alpha)*cos(phi)-sin(alpha)*sin(phi)) =

= (r*cos(phi))*cos(alpha)-(r*sin(phi))*sin(alpha) =

= x*cos(alpha)-y*sin(alpha)

y' = r*sin(alpha+phi) = r*(cos(alpha)*sin(phi)+sin(alpha)*cos(phi)) =

= (r*cos(phi))*sin(alpha)+(r*sin(phi))*cos(alpha) =

= x*sin(alpha)+y*cos(alpha)

Для трехмерного случая, таким образом

x' = x*cos(alpha)-y*sin(alpha)

y' = x*sin(alpha)+y*cos(alpha)

z' = z

Аналогичные формулы получатся и для других осей поворота (то есть Ox, Oy). Поворот относительно произвольной оси, проходящей через начало координат, можно сделать с помощью этих поворотов — сделать поворот относительно Ox так, чтобы ось поворота стала перпендикулярна Oy, затем поворот относительно Oy так, чтобы ось поворота совпала с Oz, сделать собственно поворот, а затем обратные повороты относительно Oy и Ox. Можно даже вывести формулы для такого поворота и убедиться в том, что они очень громоздкие.

Вспомним о матрицах и векторах и внимательно посмотрим на выведенные формулы для поворота. Можно заметить, что

[ x' ] = [ cos(alpha) -sin(alpha) 0 ] [ x ]

[ y' ] = [ sin(alpha) cos(alpha) 0 ] [ y ]

[ z' ] = [ 0 0 1 ] [ z ]

То есть поворот на угол alpha задается одной и той же матрицей, и с помощью этой матрицы (умножая ее на вектор-точку) можно получить координаты повернутой точки. Пока никакого выигрыша не видно — здесь умножение матрицы на вектор требует больше операций, чем расчет x' и y' по формулам.

Удобство матриц для нас заключается как раз в свойстве A*(B*C) = (A*B)*C. Пусть мы делаем несколько поворотов подряд, например, пять (как раз столько, сколько надо для поворота относительно произвольной оси), и пусть они задаюся матрицами A, B, C, D, E (A — матрица самого первого поворота, E — последнего). Тогда для вектора p мы получаем

p' = E*(D*(C*(B*(A*p)))) = E*D*C*B*A*p = (E*D*C*B*A)*p = (E*(D*(C*(B*A))))*p = T*p,

где

T = (E*(D*(C*(B*A))))

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

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

На самом деле, эти преобразования тоже легко записываются в виде матриц. Только вместо матриц 3x3 и 3-мерных векторов используются так называемые однородные 4-мерные координаты и матрицы 4x4. При этом вместо векторов вида

[ x ]

[ y ]

[ z ]

используются вектора вида

[ x ]

[ y ]

[ z ]

[ 1 ]

а вместо произвольных матриц 3x3 используются матрицы 4x4 такого вида:

[ a b c d ]

[ e f g h ]

[ i j k l ]

[ 0 0 0 1 ]

Видно, что если d = h = l = 0, то в результате применения всех операций получается то же самое, что и для матриц 3x3.

Матрица параллельного переноса теперь определяется как

[ 1 0 0 dx ]

[ 0 1 0 dy ]

[ 0 0 1 dz ]

[ 0 0 0 1 ]

Матрицу масштабирования можно определить и для матриц 3x3, и для матриц 4x4:

[ kx 0 0 ] [ kx 0 0 0 ]

[ 0 ky 0 ] или [ 0 ky 0 0 ]

[ 0 0 kz ] [ 0 0 kz 0 ]

[ 0 0 0 1 ]

где kx, ky, kz — коэффициенты масштабирования по соответствующим осям.

Таким образом, получаем следующее. Любое нужное нам преобразование пространства можно задать матрицей 4x4 определенной структуры, разной для разных преобразований. Результат последовательного выполнений нескольких преобразований совпадает с результатом одного преобразования T, которое также задается матрицей 4x4, вычисляемой как произведение матриц всех этих преобразований. Важен порядок умножения, так как A*B != B*A. Результат применения преобразования T к вектору [ x y z ] считается как результат

умножения матрицы T на вектор [ x y z 1 ]. Вот и все.

Осталось только на примере показать, почему A*B != B*A. Пусть A — матрица переноса, B — поворота. Если мы сначала перенесем объект, а потом повернем относительно центра координат (это будет B*A), получим далеко не то, что будет, если сначала объект повернуть, а потом перенести (это уже A*B).

4. Рисование одноцветного треугольника

Без понимания того, как рисовать залитый одним цветом треугольник, дальше лезть в 3D графику явно не стоит. Поэтому вот объяснение.

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

Отсортируем вершины так, чтобы вершина A была верхней, C — нижней, тогда у нас min_y = A.y, max_y = C.y, и нам надо пройтись по всем линиям от min_y до max_y. Рассмотрим какую-то линию sy, A.y <= sy <= C.y. Если sy < B.y, то она пересекает стороны AB и AC; если sy >= B.y — то стороны BC и AC. Мы знаем координаты всех вершин, поэтому мы можем написать уравнения сторон и найти пересечение нужной стороны с прямой y = sy. Получим два конца отрезка. Так как мы не знаем, какой из них левый, а какой правый, сравним их координаты по x и обменяем значения, если надо. Рисуем этот отрезок, повторяем процедуру для каждой строки — и вуаля, трегуольник нарисован.

Остановимся более подробно на нахождении пересечения прямой y = sy (текущей строки) и стороны треугольника, например AB. Напишем уравнение прямой AB в форме x = k*y+b:

x = A.x+(y-A.y)*(B.x-A.x)/(B.y-A.y)

Подставляем сюда известное для текущей прямой значение y = sy:

x = A.x+(sy-A.y)*(B.x-A.x)/(B.y-A.y)

Вот, в общем-то, и все. Для других сторон пересечение ищется совершенно точно

так же. А вот и пример кода.

// ...

// здесь сортируем вершины (A,B,C)

// ...

for (sy = A.y; sy <= C.y; sy++) {

x1 = A.x + (sy — A.y) * (C.x — A.x) / (C.y — A.y);

if (sy < B.y)

x2 = A.x + (sy — A.y) * (B.x — A.x) / (B.y — A.y);

else

x2 = B.x + (sy — B.y) * (C.x — B.x) / (C.y — B.y);

if (x1 > x2) { tmp = x1; x1 = x2; x2 = tmp; }

drawHorizontalLine(sy, x1, x2);

}

// ...

Надо, правда, защититься от случая, когда B.y = C.y — в этом (и только этом, потому как если C.y = A.y, то треугольник пустой и рисовать его не стоит, или можно рисовать горизонтальную линию; а если B.y = A.y, то sy >= A.y и до деления на B.y — A.y не дойдет) случае произойдет попытка деления на ноль.

Код изменится совсем чуть-чуть:

// ...

// здесь сортируем вершины (A,B,C)

// ...

for (sy = A.y; sy <= C.y; sy++) {

x1 = A.x + (sy — A.y) * (C.x — A.x) / (C.y — A.y);

if (sy < B.y)

x2 = A.x + (sy — A.y) * (B.x — A.x) / (B.y — A.y);

else {

if (C.y == B.y)

x2 = B.x;

else

x2 = B.x + (sy — B.y) * (C.x — B.x) / (C.y — B.y);

}

if (x1 > x2) { tmp = x1; x1 = x2; x2 = tmp; }

drawHorizontalLine(sy, x1, x2);

}

// ...

Вот и все. Ну, горизонтальную линию, надеюсь, нарисовать сумеют все желающие.

5. Работа с произвольной камерой

Рассмотрим любую камеру как точку — центр проецирования и экран — плоский прямоугольник в 3D пространстве, на плоскость которого идет проецирование. Наша стандартная камера, например, задается точкой (0,0,-dist) и экраном с вершинами (-xSize/2,ySize/2), ..., (xSize/2,-ySize/2). Можно задать эту систему тремя векторами, задающими с точки зрения камеры направления вперед, вправо и вверх; вектор "вперед" соединяет центр проецирования и центр экрана, вектор "вправо" соединяет центр экрана и правую его границу, вектор "вверх", соответственно, центр экрана и верхнюю его границу. Обозначим эти вектора как p, q и r соответственно, а центр проецирования за s. Вот пример для

стандартной камеры.

Здесь (для стандартной камеры; обозначим ее вектора как Sp, Sq, Sr, Ss)

Sp = p = (0,0,dist)

Sq = q = (xSize/2,0,0)

Sr = r = (0,ySize/2,0)

Ss = s = (0,0,-dist)

Любые три взаимно перпендикулярных вектора и точка — центр координат задают в 3D пространстве систему координат. Так что объект мы можем рассматривать в системе обычных координат (x,y,z), в системе координат стандартной камеры (Sp,Sq,Sr) или в системе (p,q,r), соответствующей какой-то произвольной камере. В любом случае, если (a,b,c) — координаты точки в системе координат камеры (точнее, в системе координат с центром в точке s и базисом (p,q,r)), то координаты проекции точки на экране равны

screenX = xSize/2 + xSize/2 * a/c

screenY = ySize/2 — ySize/2 * b/c

В случае стандартной камеры переход от обычной системы координат к системе координат камеры очевиден:

a = x / (xSize/2)

b = y / (ySize/2)

c = (z + dist) / dist

Подставив это в формулы для screenX, screenY, получим как раз те самые формулы

для проекции на стандартную камеру.

Поскольку со стандартной камерой нам достаточно удобно и понятно работать, для произвольной камеры мы должны сделаеть такое преобразование пространства, что как бы совместит произвольную камеру и стандартную камеру. То есть, такое преобразование, что вектора p, q, r перейдут в Sp, Sq, Sr, а точка s в точку Ss.

Посчитаем матрицу для *обратного* преобразования; оно должно переводить Sp,Sq, Sr, Ss в p, q, r, s. Преобразование, переводящее Ss в s (и наоборот) — это обычный паралелльный перенос; остается написать преобразование перевода Sp, Sq, Sr в p, q, r. Пусть у нас есть координаты p, q, r в системе координат (x,y,z):

p = (px,py,pz)

q = (qx,qy,qz)

r = (rx,ry,rz)

Для Sp, Sq, Sr координаты (в этой же системе) известны и равны следующему:

Sp = (0,0,dist)

Sq = (xSize/2,0,0)

Sr = (0,ySize/2,0)

Пусть T — искомая матрица перевода,

[ a b c ]

T = [ d e f ], a..i — какие-то неизвестные.

[ g h i ]

Поскольку T переводит Sp, Sq, Sr в p, q, r; то есть

p = T*Sp

q = T*Sq

r = T*Sr

то, подставляя, например, p и Sp, получаем:

[ px ] [ a b c ] [ 0 ] [ c*dist ]

[ py ] = [ d e f ] [ 0 ] = [ f*dist ], откуда

[ pz ] [ g h i ] [ dist ] [ i*dist ]

c = px/dist

f = py/dist

i = pz/dist.

Аналогично находим все остальные элементы матрицы T:

[ qx*2/xSize rx*2/ySize px/dist ]

T = [ qy*2/xSize ry*2/ySize py/dist ]

[ qz*2/xSize rz*2/ySize pz/dist ]

Но нас интересует обратное к этому преобразование. Оно задается обратной матрицей к T, то есть такой матрицей T1, что

[ 1 0 0 ]

T * T1 = T1 * T = [ 0 1 0 ]

[ 0 0 1 ]

Обратная матрица, вообще говоря, существует далеко не всегда, да и вычисление ее в общем случае — достаточно неприятная задача. Однако в данном случае из-за специального вида матрицы T (конкретнее, из-за того, что T — ортогональная матрица) она не только всегда существует, но и считается очень просто:

[ qx*2/xSize rx*2/ySize px/dist ] [ qx1 rx1 px1 ]

T = [ qy*2/xSize ry*2/ySize py/dist ] = [ qy1 ry1 py1 ]

[ qz*2/xSize rz*2/ySize pz/dist ] [ qz1 rz1 pz1 ]

[ qx1/lq qy1/lq qz1/lq ]

T1 = [ rx1/lr ry1/lr rz1/lr ]

[ px1/lp py1/lp pz1/lp ]

где

lp = px1*px1 + py1*py1 + pz1*pz1

lq = qx1*qx1 + qy1*qy1 + qz1*qz1

lr = rx1*rx1 + ry1*ry1 + rz1*rz1

Сделав сначала параллельный перенос, совмещающий s и Ss, а потом полученное преобразование, как раз и получим преобразование, переводящее произвольную камеру в стандартную.

Теперь надо выяснить, как, собственно посчитать координаты p, q, r через имеющиеся у нас характеристики: положение, направление, угол зрения и угол поворота. 3D Studio (и мы вслед за ней) рассчитывает эти вектора по такому алгоритму:

1. Считаем p = target — location

2. Если p.x == 0 и p.z == 0, то q = (0, 0, 1); иначе q = (p.z, 0, -p.x)

3. Считаем r = crossProduct(p, q) — векторное произведение p на q

4. Считаем lp = length(p) — длина p

5. Приводим r и q к длине 2*lp*tan(FOV/2)

Здесь мы не учитываем поворот камеры вокруг своей оси, его удобнее сделать после перехода к стандартной камере — в этом случае получаем обычный поворот относительно оси z на угол roll.

Таким образом, окончательная матрица перевода должна представлять собой произведение матрицы параллельного переноса, матрицы T1 и матрицы поворота вокруг оси z на угол roll:

FinalCameraMatrix = RollMatrix * T1 * MoveMatrix

Расчет матриц RollMatrix и MoveMatrix очевиден.



Для нового сайта я рекомендую вам вот эту компанию платного хостинга

Задать свой вопрос: sitesozdatu(собака)yandex.ru






Краткий обзор бесплатных "движков" (CMS) для сайта


Источник: http://webstudent.ru

Автор: Поликарпов Роман


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

 

Вот тут вспоминается слышанное много раз слово "движок". Он же CMS. Content Managment System - система управления информацией - название точно отражает суть. Да, собственно, что я тут распинаюсь? Вы, безусловно, знаете о чем речь. Для тех кто забыл, скажу вкратце, что это набор специальных программ (скриптов), которые служат для управления информацией на сайте. Иначе говоря, если раньше чтобы добавить новость вам надо было вручную вставить её в код страницы, то с CMS будет достаточно зайти под своим логином на сайт в администраторскую панель и просто заполнить форму, где указать название новости, её текст и т.д А все остальное сделают скрипты - опубликуют, проставят ссылки - в общем, все резко станет "в шоколаде".

 

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

 

Семейство NUKE

 

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

 

PHP-Nuke

 

Собственно, глава, так сказать, семейства. Много говорить про него не стану, это самый известный в рунете движок. Ищите информацию на официальном сайте www.phpnuke.org и на сайте русской поддержки http://www.mynuke.ru/

 

xNuke

 

xNuke - это менеджер наполнения портала с почти полностью переписанной
логикой ядра и основных модулей PHP-Nuke версии 7.0-7.1. Основное внимание уделяется снижению нагрузки на базу данных и оптимальной работе кода. В этом проекте все модули будут полностью переписаны командой разработчиков для достижения оптимального результата - 15-17 запросов на страницу. Движок очень неплох, действительно довольно шустро работает на первый взгляд. Так что рекомендую всем тем, у кого проблемы с нагрузкой на сервер.

 

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

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

 

PostNuke

 

Клон нюки с полностью открытым исходным кодом. Ничего особенного не замечено, клон как клон. Смотрите сами что за зверь :)

 

Официальный сайт: http://postnuke.com/

Сайт русской поддержки: http://postnuke.ru/

 

SmallNuke

 

Ещё один клон нюки. В общем-то тоже неплохой. Заметных отличий он PHP-Nuke я не нашёл. Хотя есть полезная фишка - автоматическая генерация ключевых слов, что может быть полезно для раскрутки. Однако слышал об определенной уязвимости этого движка. Впрочем, никто не застрахован…

 

Официальный сайт: http://smallnuke.com/

 

CPG-Nuke

 

Очередной клон Php-Nuke, вроде бы повышена безопасность, увеличена скорость
и уменьшена нагрузка на базу... Хотя все так говорят ;)

Сайт: http://cpgnuke.com/

 

MD-Pro

 

Аналог postnuke, даже модули схожие ... Есть инструкции по использованию на русском языке.

http://mdpro.ukrmed.info/

http://www.maxdev.com/

 

BlindHomepage

 

BlindHomepage это аналог PHP-Nuke, не требует MySQL

 

http://www.bhp.x-sub.de

 

Клонов phpnuke великое множество, но на то они и клоны чтобы не слишком отличаться друг от друга. У всех свои плюсы и минусы, выбирайте который сердцу ближе. А пока другое семейство.

 

Семейство XOOPS

 

XOOPS v.1.x

 

Xoops основан на PHPNuke 4.4.1 и MyPHPNuke 1.8.5.
В общем то гибрид Нюка, ничего особенного в нем нет, хотя в сети уже много
шаблонов для него, а также все переведено. Скрипт на любителя, на мой взгляд уже немного устарел.

 

Домашняя страница: http://xoops.ru

мануал http://wiki.xoops.org/

 

XOOPS2

 

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

 

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

 

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

 

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

 

E-Xoops

 

E-Xoops - это независимая портальная система для управления контентом. Она
основана на ядре v1 портала Xoops. Главной особенностью, на которую ссылаются разработчики, является высокая скорость работы нового механизма и простота модернизации при безусловной надежности старого ядра xoops. По словам разработчика, нагрузка на сервер была уменьшена на 50% при сохранении всех возможностей ядра.

 

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

 

Поддержка:

http://e-xoops.ru/

http://www.e-xoops.com/

 

RUNCMS

 

RUNCMS это четвёртое поколение Xoops. Появилась совсем недавно. Русского
перевода ещё нет. Отдельного сайта русской поддержки тоже нет. Сейчас
поддержку ведёт e-xoops.ru Предлагаю вам самим разобраться что за зверь :)

 

Официальный сайт: http://www.runcms.org/

 

Другие движки

 

Nucleus

 

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

http://nucleuscms.org/

 

Портал e107

 

Очень неплохой движок на php и mysql, имеет уйму возможностей и настроек, модулей и готовых тем. E107 все больше популярен в рунете. К сожалению, по моим данным, дела с переводом его на русский язык пока не очень хороши. Впрочем, я могу ошибаться, тогда поправьте меня в комментариях.

http://e107.org/

 

PHP-Fusion

 

Отличный движок для сайта, использует PHP&MySql. Опять же много модулей, настроек и возможностей. Этот движок удобен, легко настраивается и неплохо выглядит...

http://www.php-fusion.co.uk/

 

Mambo

 

Этот движок входит в когорту самых лучших бесплатных CMS, уже хорошо русифицирован, имеет хорошую защиту, много модулей и тем, обширную поддержку в сообществах, в том числе русских. Мне показался немного сложным, но не слишком.

Официальный сайт: http://mamboserver.com/

Сайт русской поддержки: http://mamboserver.ru/

 

XHP - eXpandable Home Page

 

Система управления сайтом на PHP&MySql, как заявляют создатели проста в
установке и использовании. Включает в себя модели галлереи, журнала,
контента и позволяет подключать другие модули. В новой версии должны быть
ещё модуль ссылок и RSS-заголовки.

http://xhp.sourceforge.net/

 

Plone

 

По заявлениям разработчиков - это мощный, гибкий, легкий в установке и
использовании движок. Соответствует
стандартам W3C: XHTML и CSS. Рапространяется открыто. Многоплатформен. Много
добавочных модулей.

http://plone.org/

 

Subdreamer

 

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

http://www.subdreamer.com

 

PHPX

 

Система управления сайтом на PHP&MySql. Включает в себя сам портал, форум,
галерею картинок, новостную ленту. Прост в установке. Простой
административный интерфейс. Полная документация для администратора
(Английския яз.). Переведен на 8 языков.

http://www.phpx.org/

 

SiDv

 

Плюсы:

1. Разработчик русский, что естествено огромный плюс...

2. Огромное кол-во настроек

3. Есть дополнительные модули

4. Возможность создавать блоки либо с HTML либо с РНР

 

Минусы:

1. Распакованный дистрибутив достаточно велик, в несколько раз больше

архива...

2. Кол-во запросов к базе достаточно велико...

В целом, движок хороший, работает достаточно быстро.

http://www.sidvru.org/

 

Phpclanwebsite

 

Это движок чем-то похожий на нюку, специально заточенный под клановский
сайт, требует PHP & MySQL.

http://phpclanwebsite.com/

 

NMP

 

NMP - это русскоязычная система управления контентом(CMS), работающая без
использования базы данных.

 

Работает без использования базы данных

Работает с error_reporting = E_ALL и register_globals = Off

Простая модульная структура

Полностью на русском языке

Маленький размер

http://nmp.sourceforge.net/

 

Напутственное слово

 

Существует еще куча движков самых разных типов для разных задач. При выборе движка учитывайте для чего его будете использовать. Если вам нужно лишь создать homepage из пары страниц, то, возможно, нет смысла ставить какого-то гиганта, достаточной простенького движка.

 

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


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

 

Желаю удачи в поисках! Жду ваших комментариев.



Задать свой вопрос: sitesozdatu(собака)yandex.ru






Создание Web-сайтов в Microsoft Expression Web
Создание Web-страниц для "чайников"
Использование 3D-технологии при создании WEB-сайтов
Building.org. Руководство менеджера по созданию успешных веб-сайтов для международных организаций


Полезные АудиоМатериалы


Поиск платного хостинга

Почему Платный хостинг php

Интернет магазин шаг 1

Архив Аудиоматериалов

Спонсор Рассылки: Клуб Желающих Создать и Развивать Свой Сайт.




В избранное