En ^ Ru

SUPERSCOPES-3D by EL-VIS
  (EL-VIS_Real3D_START.avs)
 
http://avs.chat.ru/avsbyelvis.htm
http://avs.chat.ru/avsbyelvis.avs
 
Идея в том, чтобы делать некоторые Superscope в 3D. Моя первая попытка (_first3D_) была вполне удовлетворительной, но не достаточно практичной вещью. Теперь я более глубоко вник в 3D математику, и наконец смог разработать базовые настройки для реального 3D пресета (_real3D_start.avs).
 
Реальные 3D обозначения
 
Каждая точка области имеет теперь 3 координаты: x1, y1 и z1 (вместо x и y), которые описывают её положение в 3D-пространстве:
 
           -y
            |  +z
            |  /
            | /
            |/
-x ------------------- +x
           /|0
          / |
         /  |
       -z   |
           +y
 
Так образом, область становится реальным 3D-объектом, который может вращаться вокруг и перемещаться вдоль трех осей (x, y и z) 3D-пространства. Наконец, 3D-координаты области переведены в 2D-координаты экрана. Далее следует объяснение установок пресета real3D_start.avs по всем секциям.
 
INIT
 
n=7; r=0.5;
 
Величины непосредственно для данной области, которая является простым кругом с радиусом 0.5, сделанным в 7 этапов.
 
mx=0; my=0; mz=0;
 
Используйте эти переменные, чтобы перемещать центр/базу вашей области вдоль осей.
 
dst=2;
 
Как правило, изменять этот параметр не требуется. Это расстояние для 3D/2D преобразования. ВАЖНО: Если вы создаете, вращаете или перемещаете область, величины z не должны становиться ниже, чем (-dst). То есть, z должно быть всегда больше или равно (-dst), для всех z!
 
rx=0; ry=0; rz=0;
 
Начальное вращение вокруг x, y и z оси, в градусах.
 
rdx=1; rdy=1; rdz=1;
 
Постоянное вращение вокруг осей в градусах за один фрейм. Установите их в ноль, чтобы остановить вращение.
 
p=3.14159265; p2=2.0*p; p3=180/p;
 
Эти константы изменять не нужно.
 
POINT
 
x1=r*sin(p2*i); y1=0; z1=r*cos(p2*i);
 
Это непосредственно 3D-область. Добавьте здесь ваши собственные области, устанавливая x1, y1 и z1. Не используйте x и y. Они генерируются в этой секции. Фактически, пример не является в действительности 3D, из-за y1=0, но, как можно видеть, вращение, в любом случае, совсем не плохое. ВАЖНО! Исходная длина отрезков во всех секциях ограничена. Поэтому, по возможности, сохраняйте радиус вашей области более коротким. Если область вдруг исчезнет после изменения исходных параметров, вы будете разочарованы!
 
Не изменяйте ничего в этой секции:
 
y2=y1*xc-z1*xs; z2=y1*xs+z1*xc;
 
вращение вокруг x-оси.
 
x2=z2*ys+x1*yc; z3=z2*yc-x1*ys;
 
вращение вокруг y-оси.
 
x3=x2*zc-y2*zs; y3=y2*zc+x2*zs;
 
вращение вокруг z-оси.
 
x4=mx+x3; y4=my+y3; z4=mz+z3;
 
перемещение базового центра.
 
x=x4/(1+z4/dst); y=y4/(1+z4/dst);
 
3D/2D-преобразование.
 
FRAME
 
Это подходящее место для установки дополнительного перемещения области. Например:
 
fr=fr+0.01; mz=1+sin(fr);
 
переместит область назад и вперёд вдоль z-оси.
 
Не изменяйте эти выражения, а добавляйте ваш исходные данные перед ними:
 
rx=rx+rdx; ry=ry+rdy; rz=rz+rdz;
 
поворот за один фрейм.
 
xs=sin(rx/p3); ys=sin(ry/p3); zs=sin(rz/p3); xc=cos(rx/p3); yc=cos(ry/p3); zc=cos(rz/p3);
 
Sinuses and cosinuses for rotation in point-section (to save space and increase
performance).
 
синусы и косинусы для вращения в секции point (для того чтобы сохранить место и увеличить скорость вычислений).
 
BEAT
 
Установите реакцию вашей области на beat. Например, произвольно измените скорость вращения, подобно этому:
 
rdx=rand(3)+1; rdy=rand(3)+1; rdz=rand(3)+1;
 
 EL-VIS

Перевод: А.Панов.
http://avs.chat.ru

counter
Panow©



En ^ Ru

SUPERSCOPES-3D by EL-VIS
  (EL-VIS_Real3D_START.avs)
 
http://www.visbot.net/category/documents
http://www.visbot.net/doc/SUPERSCOPES-3D.zip
 
The idea was to do some Superscopes in 3D. My first tries (_first3D_) were quite OK, but not the real thing. So I got deeper into 3D-mathematics and I finally managed to develop a base setup for real 3D presets (_real3D_start.avs).
 
Real 3D means:
 
Every point of the scope has now 3 coordinates: x1, y1 and z1 (instead of x and y) which describe its position in the 3D-Room:
 
           -y
            |  +z
            |  /
            | /
            |/
-x ------------------- +x
           /|0
          / |
         /  |
       -z   |
           +y
 
So the scope becomes a real 3D-Object, which could be rotated around and moved along the three axes (x,y and z) of the 3D-Room. Finally the 3D-coordinates of the scope are translated into 2D-coordinates of the screen. Here's the explanation of the settings of real3D_start.avs by section:
 
INIT
 
n=7; r=0.5;
Just for this scope, which is a simple circle with a radius of 0.5 done in 7 steps.
 
mx=0;my=0;mz=0;
Use these to move the center/base of your scope along the axes.
 
dst=2;
Normally you don't need to change this. It's the distance for the 3D/2D-Translation. IMPORTANT: If you create, rotate or move a scope its z-values must not become lower than -dst => !!! z >= -dst for all z !!!
 
rx=0;ry=0;rz=0;
Initrotation around x,y and z-axis in degrees.
 
rdx=1;rdy=1;rdz=1;
Permanent rotation around axes in degrees/frame. Set these to zero to stop rotation.
 
p=3.14159265;p2=2.0*p;p3=180/p
You'll never need to change these
 
POINT
 
x1=r*sin(p2*i);y1=0;z1=r*cos(p2*i);
This is the 3D-Scope. Add your own scopes here by setting x1,y1 and z1. (Do not use x and y. They are generated in this section) (In fact the example is not really 3D because of y1=0, but as you see, it can be nicely rotated anyway) IMPORTANT! The length of input in all of the sections is limited. So keep your scope as short as possible. If the scope suddenly dissapears after a regular input you're F***ed!
 
Do not change anything else in this section:
 
y2=y1*xc-z1*xs;z2=y1*xs+z1*xc;
Rotation around x-axis
 
x2=z2*ys+x1*yc;z3=z2*yc-x1*ys;
Rotation around y-axis
 
x3=x2*zc-y2*zs;y3=y2*zc+x2*zs;
Rotation around z-axis
 
x4=mx+x3;y4=my+y3;z4=mz+z3;
Movement of center/base
 
x=x4/(1+z4/dst);y=y4/(1+z4/dst);
3D/2D-Translation
 
FRAME
 
This is a good place to setup additional movement for your scope. For Example:
fr=fr+0.01;mz=1+sin(fr)
will move the scope back and forward along the z-axis.
 
Do not change these and add your input in front of them:
 
rx=rx+rdx;ry=ry+rdy;rz=rz+rdz;
Rotation per Frame
 
xs=sin(rx/p3);ys=sin(ry/p3);zs=sin(rz/p3);xc=cos(rx/p3);yc=cos(ry/p3);zc=cos(rz/p3)
Sinuses and cosinuses for rotation in point-section (to save space and increase
performance).
 
BEAT
 
Setup the beat reaction of your scope. For example change the rotation speed by random like this:
 
rdx=rand(3)+1;rdy=rand(3)+1;rdz=rand(3)+1
 
 EL-VIS
 
http://avs.chat.ru