Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт сен 20, 2018 18:20

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Пн дек 26, 2011 22:04 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Код:
Код:
GL_TRIANGLES glBegin
   Point1  glVertex3dv
   Point2  glVertex3dv
   Point3  glVertex3dv
glEnd


Отработал нормально, вроде.

Код
Код:
GL_QUADS glBegin
   Point1  glVertex3dv
   Point2  glVertex3dv
   Point3  glVertex3dv
   Point4  glVertex3dv
glEnd

Тупит. Вместо ожидаемого прямо(четырех)угольника нарисовал какой-то непонятный "флаг вражеской наружности"

упс... я дурак... должно быть:

Код:
GL_QUADS glBegin
   Point1  glVertex3dv
   Point2  glVertex3dv
   Point4  glVertex3dv
   Point3  glVertex3dv
glEnd


Хм... a GL_POLYGONS ... хнык... нихт арбайтен...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Пн дек 26, 2011 22:12 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Ссылочка в тему - http://pmg.org.ru/nehe/index.html - уроки по OpenGL - нефортовые, но на форт их в принципе перевести можно ;) оттуда и словечки новые подцепил...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Пн дек 26, 2011 22:43 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
А теперь начинаются хотелки:

1. Нужна (видимо, для перемещения внутри сцены) функция glTranslatef

В объявлениях (в примере) она вроде, есть, а как ее использовать - не ясно.

2. Нужен пример, как рисовать на полигонах текстуры? (из *.bmp файлов)

3. Окраска полигонов... вроде разобрался по предыдущей ссылке:

где-то вначале:
Код:
: Gl_GREEN 0 0x7FFFFFFF 0 glColor3i ;

: Gl_RED 0x7FFFFFFF 0 0 glColor3i ;

: Gl_BLUE 0 0 0x7FFFFFFF glColor3i ;


в отрисовке сцены:
Код:
  GL_TRIANGLES glBegin
  Gl_GREEN
   Point5 glVertex3dv
  Gl_RED
   Point6 glVertex3dv
  Gl_BLUE
   Point7 glVertex3dv
  glEnd


цвета переливчатые получаются однако ;)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 12:55 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
Тупит. Вместо ожидаемого прямо(четырех)угольника нарисовал какой-то непонятный "флаг вражеской наружности"

Да, вершины надо обходить в каком-то определенном направлении - по часовой стрелке или против часовой. Желательно сразу с этим определиться, потому что потом одна из сторон будет лицевой.
WingLion писал(а):
Хм... a GL_POLYGONS ... хнык... нихт арбайтен...

Добавлю.
WingLion писал(а):
1. Нужна (видимо, для перемещения внутри сцены) функция glTranslatef

Есть такое, работает. Сейчас пример сделаю.

WingLion писал(а):
2. Нужен пример, как рисовать на полигонах текстуры? (из *.bmp файлов)

Аналогично.
WingLion писал(а):
цвета переливчатые получаются однако

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 16:18 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
Хм... a GL_POLYGONS ... хнык... нихт арбайтен...

Как оказалось по документации на OpenGL - и не должен. Оно называется GL_POLYGON, и в кварке есть. В http://www.msyst.ru/quark.pdf в конце есть таблица констант, которые реализованы как слова (упс, список в документации почему-то неполон, реально есть больше).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 18:29 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
В http://www.msyst.ru/quark.pdf в конце есть таблица констант, которые реализованы как слова (упс, список в документации почему-то неполон, реально есть больше).


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

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 18:45 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
Было бы неплохо, чтобы каждая константа была с описанием, о том, для чего она и что делает, а то гадать трудновато.

Это уже проще по какому-нибудь учебнику, поскольку там некоторые вещи нетривиальны. Я писал константы в процессе освоения учебника по OpenGL, чтобы получались те примеры.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 19:01 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
Это уже проще по какому-нибудь учебнику, поскольку там некоторые вещи нетривиальны.


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

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 19:41 
WingLion писал(а):
Хищник писал(а):
Это уже проще по какому-нибудь учебнику, поскольку там некоторые вещи нетривиальны.


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


Вроде были для Форт систем уроки (Forth+OpenGL в google) также можно брать, наверное, из примеров BigForth?
Win32Forth ... и наверное отдельные и существующие в проектах графические наработки?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 19:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
Только учебники обычно не дают примеров кода на форте и не объясняют, как использовать на форте те же константы... Поэтому, минимальный ликбез необходим.

Я для начала листал достаточно старую книгу Краснова по программированию OpenGL на Дельфи и переписывал примеры оттуда. Форт сам по себе не очень нужен, оттуда нужен порядок вызова функций, а подключаются они все равно через GETPROCADDRESS. Некоторая сложность с передачей чисел с плавающей точкой - в кварке они на стеке сопроцессора, а в OpenGL должны лежать на стеке параметров. Но это нивелируется тем, что в самой библиотеке рекомендуется передавать не параметры, а указатель на массив с ними. Другая тонкость - иногда функции в dll отличаются от функций, как они написаны в книгах. Отличие в добавленной букве A или U (ASCII/Unicode, если функция работает со строками).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 19:52 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
Гость писал(а):
Вроде были для Форт систем уроки (Forth+OpenGL в google) также можно брать, наверное, из примеров BigForth?
Win32Forth ... и наверное отдельные и существующие в проектах графические наработки?

А смысл? Разобраться надо с OpenGL, а не с Фортом. На 95% программа будет состоять из вызовов функций OpenGL, и надо просто научиться делать это в нужном порядке для достижения требуемого эффекта. Можно, конечно, потыкаться по ссылкам в надежде, что где-то это уже есть... правда, это перетекает в глобальную проблему интернет-поиска: "а где бы скачать себе мозгов?" :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 20:16 
Хищник писал(а):
Можно, конечно, потыкаться по ссылкам в надежде, что где-то это уже есть... правда, это перетекает в глобальную проблему интернет-поиска: "а где бы скачать себе мозгов?" :)


Это реализовано не только в Quark Форте и "мозги" тут ни причём а разбираться можно используя готовые исходники
на Форт языке и конечно грамотную книжку по OpenGL (для "прояснения" и "уяснения" тонкостей использования)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Вт дек 27, 2011 20:20 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
Гость писал(а):
Это реализовано не только в Quark Форте

А речи об эксклюзивности вообще не идет.
Гость писал(а):
и "мозги" тут ни причём

Именно мозги и нужны. Без понимания того, как реализуется графика, ничего не будет. Хоть десять трансляторов Форта скачай.
Гость писал(а):
а разбираться можно используя готовые исходники
на Форт языке и конечно грамотную книжку по OpenGL (для "прояснения" и "уяснения" тонкостей использования)

Нет. На первом месте грамотная книжка, а вот для прояснения можно и Форт. И учить по книжке надо не тонкости использования, а само использование, начиная с основ.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Ср дек 28, 2011 01:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
Продолжаем. На очереди текстуры.

Сначала под текстуру надо выделить место:

Код:
CREATE MyTexture[] 64 64 * CELLS ALLOT


Текстуру надо чем-то заполнить. Например, полноцветным (24 бита на пиксел) bmp-файлом. Это можно сделать и без отдельной библиотеки для работы с bmp, учитывая то, что заголовок занимает 54 байта, а дальше идут данные. Например, вот так (имеется в виду, что у нас уже есть файл размером 64 на 64):

Код:
: LoadHishnik
" avatar.bmp" OPEN TO HF-OUT
HF-OUT MyTexture[] 54 READFILE
HF-OUT MyTexture[] 64 64 * 3 * READFILE
HF-OUT CLOSE
;


Идем дальше. Теперь надо текстуру правильно разместить в пространстве, ну и заодно в каких-то размерах (ведь не 64 на 64 же?). Для этого создаем текстурные координаты:

Код:
CREATE TexPoint0 0.0 F, 0.0 F, 0.0 F,
CREATE TexPoint1 1.0 F, 0.0 F, 0.0 F,
CREATE TexPoint2 1.0 F, 1.0 F, 0.0 F,
CREATE TexPoint3 0.0 F, 1.0 F, 0.0 F,     


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

Код:
: PREPARE_TEXTURE
  GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR glTexParameteri
  GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR glTexParameteri

  GL_TEXTURE_2D 0 3
  64 64 0 GL_RGB GL_UNSIGNED_BYTE MyTexture[]
  glTexImage2D
;


Вот тут, в слове PREPARE_TEXTURE, мы описываем, что это все означает. Первые две строчки задают тип масштабирования. Это нужно затем, чтобы понять, что делать с текстурой, которую надо отобразить, к примеру, в 37 на 25 пикселов. Тут написано GL_LINEAR, что означает линейную интерполяцию.

Дальше идет сложная функция glTexImage2D. У нее куча параметров. Можно заметить среди них размеры (64 64), и формат (GL_RGB GL_UNSIGNED_BYTE - то есть пикселы в формате RGB, каждый цвет - беззнаковый байт). Здесь проще сверяться с документацией.


Наконец, задаем саму текстуру. Во-первых, разрешаем ее использование (GL_TEXTURE_2D glEnable). Потом нужно будет его запретить, а то она будет рисоваться везде. Во-вторых, рисуем фигуру, на которой и будет текстура, это GL_QUADS


Код:

: TEXTURE

  GL_TEXTURE_2D glEnable

  GL_QUADS glBegin
    TexPoint0 glTexCoord2dv TexPoint0 glVertex3dv
    TexPoint1 glTexCoord2dv TexPoint1 glVertex3dv
    TexPoint2 glTexCoord2dv TexPoint2 glVertex3dv
    TexPoint3 glTexCoord2dv TexPoint3 glVertex3dv
  glEnd
  GL_TEXTURE_2D glDisable
;                             


Теперь делаем копипаст из предыдущего примера, чтобы все это так же вращалось.

Код:
: SHOW-TEXTURE
  0 0 500 500 glViewPort
  glPushMatrix


  GL_DEPTH_TEST glEnable
  GL_DEPTH_BUFFER_BIT glClear

  GL_LIGHTING glEnable
  GL_LIGHT0 glEnable
  GL_LIGHT1 glEnable
  GL_COLOR_MATERIAL glEnable
  GL_LINE_SMOOTH glEnable

  0 0x7FFFFFFF 0 glColor3i


  NX F@ ROTATEANGLE SF!
  1.0 glX SF!
  0.0 glY SF!
  0.0 glZ SF!
  3DROTATE

  NY F@ ROTATEANGLE SF! // -120
  0.0 glX SF!
  1.0 glY SF!
  0.0 glZ SF!
  3DROTATE

  NZ F@ ROTATEANGLE SF! // 100
  0.0 glX SF!
  0.0 glY SF!
  1.0 glZ SF!
  3DROTATE

// начинается текстура:
// линии координат по трем осям

  GL_LINES glBegin
    Point1 glVertex3dv
    Point2 glVertex3dv
  glEnd
  GL_LINES glBegin
    Point3 glVertex3dv
    Point4 glVertex3dv
  glEnd
  GL_LINES glBegin
    Point5 glVertex3dv
    Point6 glVertex3dv
  glEnd


  0x7FFFFFFF DUP DUP glColor3i

// рисуем

  PREPARE_TEXTURE

  TEXTURE

  glPopMatrix

;                         

' SHOW-TEXTURE TO 3D


У меня, с учетом добавленной картинки, крутится вот такой оптимистичный кошак :)
Вложение:
quark9.gif
quark9.gif [ 50.4 Кб | Просмотров: 6234 ]


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark: простейшее 3D
СообщениеДобавлено: Ср дек 28, 2011 04:19 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Так... для кодирования чего-то, наподобие Wolf3D, теперь не хватает только вывода звука... :)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB