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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Quark: простейшее 3D
Автор Сообщение
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
WingLion писал(а):
Так... для кодирования чего-то, наподобие Wolf3D, теперь не хватает только вывода звука...

Еще подготовлю про освещение, и можно будет не только Wolf, но и Quake делать :)
Сообщение Добавлено: Ср дек 28, 2011 12:12
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
Так... для кодирования чего-то, наподобие Wolf3D, теперь не хватает только вывода звука... :)
Сообщение Добавлено: Ср дек 28, 2011 04:19
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
Продолжаем. На очереди текстуры.

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

Код:
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 Кб | Просмотров: 21214 ]
Сообщение Добавлено: Ср дек 28, 2011 01:03
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
Гость писал(а):
Это реализовано не только в Quark Форте

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

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

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


Это реализовано не только в Quark Форте и "мозги" тут ни причём а разбираться можно используя готовые исходники
на Форт языке и конечно грамотную книжку по OpenGL (для "прояснения" и "уяснения" тонкостей использования)
Сообщение Добавлено: Вт дек 27, 2011 20:16
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
Гость писал(а):
Вроде были для Форт систем уроки (Forth+OpenGL в google) также можно брать, наверное, из примеров BigForth?
Win32Forth ... и наверное отдельные и существующие в проектах графические наработки?

А смысл? Разобраться надо с OpenGL, а не с Фортом. На 95% программа будет состоять из вызовов функций OpenGL, и надо просто научиться делать это в нужном порядке для достижения требуемого эффекта. Можно, конечно, потыкаться по ссылкам в надежде, что где-то это уже есть... правда, это перетекает в глобальную проблему интернет-поиска: "а где бы скачать себе мозгов?" :)
Сообщение Добавлено: Вт дек 27, 2011 19:52
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
WingLion писал(а):
Только учебники обычно не дают примеров кода на форте и не объясняют, как использовать на форте те же константы... Поэтому, минимальный ликбез необходим.

Я для начала листал достаточно старую книгу Краснова по программированию OpenGL на Дельфи и переписывал примеры оттуда. Форт сам по себе не очень нужен, оттуда нужен порядок вызова функций, а подключаются они все равно через GETPROCADDRESS. Некоторая сложность с передачей чисел с плавающей точкой - в кварке они на стеке сопроцессора, а в OpenGL должны лежать на стеке параметров. Но это нивелируется тем, что в самой библиотеке рекомендуется передавать не параметры, а указатель на массив с ними. Другая тонкость - иногда функции в dll отличаются от функций, как они написаны в книгах. Отличие в добавленной букве A или U (ASCII/Unicode, если функция работает со строками).
Сообщение Добавлено: Вт дек 27, 2011 19:48
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
WingLion писал(а):
Хищник писал(а):
Это уже проще по какому-нибудь учебнику, поскольку там некоторые вещи нетривиальны.


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


Вроде были для Форт систем уроки (Forth+OpenGL в google) также можно брать, наверное, из примеров BigForth?
Win32Forth ... и наверное отдельные и существующие в проектах графические наработки?
Сообщение Добавлено: Вт дек 27, 2011 19:41
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
Хищник писал(а):
Это уже проще по какому-нибудь учебнику, поскольку там некоторые вещи нетривиальны.


Только учебники обычно не дают примеров кода на форте и не объясняют, как использовать на форте те же константы... Поэтому, минимальный ликбез необходим.
Сообщение Добавлено: Вт дек 27, 2011 19:01
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
WingLion писал(а):
Было бы неплохо, чтобы каждая константа была с описанием, о том, для чего она и что делает, а то гадать трудновато.

Это уже проще по какому-нибудь учебнику, поскольку там некоторые вещи нетривиальны. Я писал константы в процессе освоения учебника по OpenGL, чтобы получались те примеры.
Сообщение Добавлено: Вт дек 27, 2011 18:45
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
Хищник писал(а):
В http://www.msyst.ru/quark.pdf в конце есть таблица констант, которые реализованы как слова (упс, список в документации почему-то неполон, реально есть больше).


Было бы неплохо, чтобы каждая константа была с описанием, о том, для чего она и что делает, а то гадать трудновато.
Сообщение Добавлено: Вт дек 27, 2011 18:29
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
WingLion писал(а):
Хм... a GL_POLYGONS ... хнык... нихт арбайтен...

Как оказалось по документации на OpenGL - и не должен. Оно называется GL_POLYGON, и в кварке есть. В http://www.msyst.ru/quark.pdf в конце есть таблица констант, которые реализованы как слова (упс, список в документации почему-то неполон, реально есть больше).
Сообщение Добавлено: Вт дек 27, 2011 16:18
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
WingLion писал(а):
Тупит. Вместо ожидаемого прямо(четырех)угольника нарисовал какой-то непонятный "флаг вражеской наружности"

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

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

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

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

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

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

OpenGL организован как машина состояний. Цвет не просто влияет на следующее действие, а задается, и используется всеми последующими построениями, которым он вообще нужен. Такой подход приятен тем, что в движке OpenGL есть еще масса параметров, которые применяются автоматически, поскольку мы их не меняли. Когда мы до них доберемся, это изменит картинку, но даже без явного изменения они работают.
Сообщение Добавлено: Вт дек 27, 2011 12:55
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
А теперь начинаются хотелки:

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


цвета переливчатые получаются однако ;)
Сообщение Добавлено: Пн дек 26, 2011 22:43
  Заголовок сообщения:  Re: Quark: простейшее 3D  Ответить с цитатой
Ссылочка в тему - http://pmg.org.ru/nehe/index.html - уроки по OpenGL - нефортовые, но на форт их в принципе перевести можно ;) оттуда и словечки новые подцепил...
Сообщение Добавлено: Пн дек 26, 2011 22:12

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


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