|
|
|
Канал Игры Мечты: «К вопросу о гранях, рёбрах, и вершинах вселенной :-)» |
|
Надо ли пытаться что-нибудь слепить, когда знаешь , что всё равно ничего не выйдет? |
Да, надо для общего развития |
|
81% |
[ 27 ] |
Нет, не надо, а то ничсего не выйдет - и с горя повесишься |
|
18% |
[ 6 ] |
|
Всего проголосовало : 33 |
|
|
|
DedMazaj
68 EGP
 Репутация: 4 Сообщения: 152 Откуда: Красноярск Зарегистрирован: 25.05.2005
 |
|
YogSagot : |
Я говорил несколько про другое. Если ты предлагаешь сделать 100к ИНТЕРЕСНЫХ а не одинаковых звездных систем, то тут уж явно просто псевдослучайностью не обойдется. Тут фантазия, блин, нужна
|
так вот втом то и дело, что надо сделать такую схему создания систем и т.д., чтобы каждый раз было что нибудь новое и интерессное.
Пусть большие компании создают вручную системы, где много людей, а простому программеру это не по плечу, единственный выход - создать генератор создания всего.
_________________ спасаю зайцев с подбитых космических кораблей |
|
|
whirlwind
77 EGP
 Репутация: 26 Сообщения: 338 Откуда: Spb Зарегистрирован: 18.02.2005
 |
|
DedMazaj: верно!
Чем тратить время на рисование горок и получить в результате 1км х 1км поверхности планеты, лучше потратить это время на разработку алгоритма генерации ландшафтов и получить сразу необъятную площадь и разнообразие.
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(5) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
Вот в этой теме обсуждался вопрос по созданию генератора вселенной (на второй странице):
«Переход от количества к качеству или "сколько вешать (»
А здесь по графике.
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
DedMazaj
68 EGP
 Репутация: 4 Сообщения: 152 Откуда: Красноярск Зарегистрирован: 25.05.2005
 |
|
Чтобы перечитать все 400000 сообщений, надо много времени, по этому сильно старые темы можно и возобновить для новичков
_________________ спасаю зайцев с подбитых космических кораблей |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Там три страницы, а не 400000 сообщений. А если новичёк не может осилить три страницы, о чём тогда речь?
_________________ У меня бисера не доxеpа. |
|
|
DedMazaj
68 EGP
 Репутация: 4 Сообщения: 152 Откуда: Красноярск Зарегистрирован: 25.05.2005
 |
|
я уже осилил
_________________ спасаю зайцев с подбитых космических кораблей |
|
|
Duh
101 EGP
 Репутация: 20 Сообщения: 269 Откуда: Ярославль Зарегистрирован: 18.07.2004
 |
|
Люди, помогите, подскажите! Как в OpenGL корректно камерой играться? Сейчас у меня программка рисует координатную сетку (по типу как проектор эклиптики в XT, но в 3-х плоскостях) и пару кубиков. Я, значит, пытаюсь в ней повернуть/транслировать камеру. Вместо этого у меня поворот/трансляция происходит не для камеры, а для глобальной с.к. Принцип работы перерисовки окна такой:
1) выставляю glMatrixMode в GL_PROJECTION
2) делаю glRotate/glTranslate
3) рисую сетку (c push/popMatrix ес-сно)
4) glMatrixMode(GL_MODELVIEW);
5) п.2 для объектов сцены и рисую объекты (тоже с Push/Pop)
Подскажите плиз что не так и как обычно это делается, а то я уже вконец запарился. Заранее благодарен.
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(5) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
Для управления камерой используй gluLookAt:
//задаётся один раз при инициализации
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(60.0, // угол видимости в направлении оси Y
1.33, // угол видимости в направлении оси X - через аспект = Width/Height
0.1, // расстояние от наблюдателя до ближней плоскости отсечения
100.0); // расстояние от наблюдателя до дальней плоскости отсечения
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
.....
//вызывается при перерисовке
glPushMatrix;
gluLookAt(PosCam.X,PosCam.Y,PosCam.Z,ViewCam.X,ViewCam.Y,ViewCam.Z,UpCam.X,UpCam.Y,UpCam.Z);
//PosCam - позиция камеры;
//ViewCam - точка в которую смотрит камера;
//UpCam - вектор направленный вверх (определяет поворот камеры вокруг вектора взгляда).
.....
//рисуем
.....
glPopMatrix;
SwapBuffers(DC);
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
Duh
101 EGP
 Репутация: 20 Сообщения: 269 Откуда: Ярославль Зарегистрирован: 18.07.2004
 |
|
Т.е. gluLookAt вызывается в режиме матрицы GL_MODELVIEW? Чего-то я запутался . Проекционная матрица вроде отвечает за положение проекции на экран в пространстве, а модельная - за положение с.к., относительно к-рой рисуются 3D-объекты. Или нет?
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(5) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
Матрица проектировани задаёт то, как объекты будут проектироваться на экран. А матрица моделирования задаёт положение объекта.
Изначально камера располагается в точке (0.0, 0.0, 0.0), ось X направлена горизонтально влево, Y - вертикально вверх, Z - перпендикулярно экрану и направлена к наблюдателю.
С помощю glRotate/glTranslate мы "переносим" центр координат от которого начинаем рисовать (на самом деле происходит умножение на видовую матрицу). Команда gluLookAt переносит точку взгляда не меняя "положения" центра координат (у меня во вьювере на самом деле вращается камера вокруг/внутри объекта, а не сам объект).
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
Duh
101 EGP
 Репутация: 20 Сообщения: 269 Откуда: Ярославль Зарегистрирован: 18.07.2004
 |
|
Ur Quan : |
Матрица проектировани задаёт то, как объекты будут проектироваться на экран.
|
Если можно, поподробнее (я не придираюсь, просто непонятно ).
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(5) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
NP
Эта матрица задаёт преобразование какая проекция изображения будет на экране: перспективная (glFrustrum, gluPerspective) или ортогональная (glOrtho, gluOtho2D).
P.S.:На чём програмишь?
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
Duh
101 EGP
 Репутация: 20 Сообщения: 269 Откуда: Ярославль Зарегистрирован: 18.07.2004
 |
|
Ur Quan : |
P.S.:На чём програмишь?
|
На дельфях . Я пытаюсь повернуть камеру в локальных координатах, т.е. так, как поворачиавются все объекты в OpenGL - дабы от первого лица смотреть. В gluLookAt координаты глобальные. Вот я и пытаюсь их ручками повернуть. По идее надо текущую матрицу умножить на матрицу 'A' перехода в с.к. камеры, сделать rotate/translate и умножить получившуюся матрицу на обратную к 'A'. Это по идее. Обр.матрицу я считаю как b(i,j)=a(j,i)/|A|. Выходит руко ство какое-то. Хотелось бы поинтересоваться, как это все по человечески делается?
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(5) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
:О)
Книжка по OpenGL'у (начальные знания и всё такое): "OpenGL. Графика в проектах Delphi" М.Краснов
Заголовочный файл (dglOpenGL.pas - всё в одном, им пользуюсь ;О)):
http://www.delphigl.com/do_download.php?f=12000
Заготовка под dglOpenGL.pas (сделал свою, больше нравится):
http://www.delphigl.com/do_download.php?f=12100
Duh : |
Я пытаюсь повернуть камеру в локальных координатах, т.е. так, как поворачиавются все объекты в OpenGL - дабы от первого лица смотреть.
|
Т.е. например камера находится в точке (x, y, z) и надо повернуть её на угол alpha относительно оси x?
Если так, то нужно перемещать точку "взгляда" в gluLookAt (ViewCam и UpCam), т.е. координаты камеры не изменяются, изменяется лишь направление взгляда и поворот камеры относительно вектора взгляда. Есть небольшие грабли, нужно следить чтобы расстояние ViewCam - PosCam было одинаковое, иначе если камера вращается вокруг точки взгляда ViewCam, она может улететь в никуда.
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
Duh
101 EGP
 Репутация: 20 Сообщения: 269 Откуда: Ярославль Зарегистрирован: 18.07.2004
 |
|
Собственно по этой книжке и М_учусь. Спасибо, Ur Quan, на вопрос свой уже сам ответ нашел - после раскопок хелпа по gl и glu оказалось, что glRotate(alfa,x,y,z) как раз поворачивает с.к. вокруг вектора (x,y,z).
Ur Quan, эта библиотека по ссылке, чем она лучше стандартной?
А вообще есть ли процедурка, считающая обратную матрицу к текущей?
P.S. люди! Никогда, НИИИКОООГДААА не используйте процедуры под переменные разных типов (напр glRotatef и x:Double)! Иначе будете как я долго думать, почему ro=sqrt(sqr(x)+sqr(y)+sqr(z)) для вектора (1,0,0) не равен 1.
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(5) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
Duh : |
эта библиотека по ссылке, чем она лучше стандартной?
|
там всё собрано и gl и glu команды + куча всяких расширений, и реализация контекста воспроизведения делается очень просто у меня 3 процедуры занимаются этим активация, деактивация и инициализация, передаю только Handle окна (кнопки, панели и т.п. это тоже окна :О), только стили разные) на котором нужно организовать вывод:
var
GLUK_DC : HDC;
GLUK_RC : HGLRC; // контекст воспроизведения OpenGL
GLUK_WND : HWND;
procedure glukActivate(hWindow: HWND);
begin
InitOpenGL;
GLUK_WND := hWindow;
GLUK_DC := GetDC(gluk_WND);
GLUK_RC := CreateRenderingContext(GLUK_DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
ActivateRenderingContext(GLUK_DC, GLUK_RC);
end;
procedure glukDeactivate;
begin
DeactivateRenderingContext;
wglDeleteContext(GLUK_RC); // Удаляем контекст воспроизведения.
ReleaseDC(GLUK_WND, GLUK_DC);
end;
procedure glukInit(ViewAngle: TGLfloat; X, Y, Width, Height: TGLuint; zNear, zFar: TGLfloat; BcgColor : COLORREF);
begin
glViewport(X, Y, Width, Height); // Set the viewport for the OpenGL window
glMatrixMode(GL_PROJECTION); // Change Matrix Mode to Projection
glLoadIdentity(); // Reset View
gluPerspective(ViewAngle, Width/Height, zNear, zFar); // Do the perspective calculations. Last value = max clipping depth
glMatrixMode(GL_MODELVIEW); // Return to the modelview matrix
glLoadIdentity(); // Reset View
glClearColor((BcgColor and $0000FF)/$FF,
(BcgColor and $00FF00)/$FF00,
(BcgColor and $FF0000)/$FF0000,1.0);
// glClearColor(0.0, 0.0, 0.0, 0.0); // Black Background
glClear (GL_COLOR_BUFFER_BIT); // установление цвета фона
glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading
glClearDepth(1.0); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enable Depth Buffer
glEnable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDepthFunc(GL_LESS); // The Type Of Depth Test To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //Realy Nice perspective calculations
end;
потом делаю так:
//Действия при создании формы (событие OnFormCreate)
procedure TMainForm.KOLForm1FormCreate(Sender: PObj);
begin
...
//Активируем контекст воспроизведения.
glukActivate(MainForm.OpenGLDrawPanel.Handle);
//Инициализируем видовые параметры.
glukInit(90, 0, 0, MainForm.OpenGLDrawPanel.Width, MainForm.OpenGLDrawPanel.Height, 0.1, 100, BackgroundColor);
...
end;
и так:
//Действия при разрушении формы (событие OnFormDestroy)
procedure TMainForm.KOLForm1Destroy(Sender: PObj);
begin
glukDeactivate;
...
end;
P.S.: процедура glukInit может быть переделана под конкретное приложение (но обычно не меняю).
P.P.S.: В стандартном дельфовом заголовочном файле ошибки есть.
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
Duh
101 EGP
 Репутация: 20 Сообщения: 269 Откуда: Ярославль Зарегистрирован: 18.07.2004
 |
|
Дык, это, тут же процедуры из gl .
P.S. кстати не подскажешь (ничего что на ты?) как нарисовать геосферу (это которая из одинаковых треугольников состоит)?
|
|
|
Dark Archon
231 EGP
   Репутация: 56 Сообщения: 389 Откуда: Moscow Federation Зарегистрирован: 27.05.2004
 |
|
Извиняюсь что вмешиваюсь... В каком смысле? То же что и из QUADS только поделенных еще одной гранью по середине, так что выходят 2 треугольника? Или сфера без сужения вертикальных граней к полюсам, т.е. без полюсов?
_________________ o
_/0\_
< > КУ! |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Геосфера состоит из одинаковых треугольников (и полюсов у ней нет), а из квадсов - они мельчают к полюсам.
_________________ У меня бисера не доxеpа. |
|
|
Dark Archon
231 EGP
   Репутация: 56 Сообщения: 389 Откуда: Moscow Federation Зарегистрирован: 27.05.2004
 |
|
Ок, значит второй вариант. Я это делал при помощи фрактального деления и нормализации одной из фигур состоящей правильных треугольников: тетраэдр (tetrahedron) - состоит из 4-х треугольников, октаэдр (octahedron) - состоит из 8-и треугольников и икосаэдр (icosahedron) - состоит из 20-и треугольников. Можно фракталить из любого х-едра, но чем больше начальное количество треугольников - тем лучше получается результат при бОльшем количестве фрактальных разделений. Да, кстати, больше 20-и одинаковых треугольников в сферу не впишешь (т.е. вообще, правильных треугольников можно вписать только 4, 8 или 20), по этому при большем количестве треугольники уже идут не одинаковые, по сему я и говорю о качестве результата и рекомендую icosahedron.
_________________ o
_/0\_
< > КУ! |
|
|
|
|
|
Канал Игры Мечты: «К вопросу о гранях, рёбрах, и вершинах вселенной :-)» |
|