Author Topic: 2D функции  (Read 211 times)

0 Members and 1 Guest are viewing this topic.

Offline it_is_good

  • Friends
  • Baron (-ess)
  • *
  • Posts: 301
  • Reputation 13
  • I'm a newbie.
2D функции
« on: April 12, 2017, 01:05:58 PM »
Решил создать тему по 2D функциям. Периодически буду добавлять сюда свои вопросы.
Первый вопрос, как определить цвета (ARGB) в конкретной точке (ХУ) текстуры. Что-то не нашёл таково в справке ((

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 683
  • Reputation 45
Re: 2D функции
« Reply #1 on: April 12, 2017, 01:59:11 PM »
Хорошая тема. Давно собирался нечто подобное сделать.
Итак, пока то, что есть, но можно будет пересмотреть и добавить что-нибудь.
Code: [Select]
Declare function wGetImagePixel(ByVal  img As wImage, byval X As uInt32, byval Y As UInt32)As uInt32Так конвертируем текстуру в Image, так как в ирле доступ к пикселю ТЕКСТУР по координатам отсутствует.
Затем:
Code: [Select]
Declare function wGetImagePixel(ByVal  img As wImage, byval X As uInt32, byval Y As UInt32)As uInt32Так достаем нужный пиксель из картинки.
Для установки пикселя в нужное место это:
Code: [Select]
Declare Sub  wSetImagePixel(_
ByVal img As wImage,_
ByVal X As UInt32,_
ByVal Y As uInt32,_
ByVal _color As UInt32 ptr,_
ByVal isBlend As Boolean=FALSE)
Так находим компоненты цвета пикселя:
Code: [Select]
Declare function wGetColorRed32(ByVal _color As UInt32 Ptr)As UInt32
Declare function wGetColorGreen32(ByVal _color As UInt32 Ptr)As UInt32
Declare function wGetColorBlue32(ByVal _color As UInt32 Ptr)As UInt32
Declare function wGetColorAlpha32(ByVal _color As UInt32 Ptr)As UInt32

Если требуется, конвертируем картинку в текстуру так:
Code: [Select]
Declare Function wConvertImageToTexture(ByVal img As wImage,ByVal Name As ZString ptr)As wTexture
Для рисования 2D-примитивами у нас есть наборчик:
Code: [Select]
Declare Sub wRect2D(_
byval X As Int32,_
byval Y As Int32,_
byval _Width As Int32,_
byval _Height As Int32,_
ByVal _alpha As UInt32=255,_
byval _red As UInt32=255,_
ByVal _green As UInt32=255,_
byval _blue As UInt32=255)


Declare Sub wLine2D(_
byval X1 As Int32,_
byval Y1 As Int32,_
byval X2 As Int32,_
byval Y2 As Int32,_
ByVal _alpha As UInt32=255,_
byval _red As UInt32=255,_
ByVal _green As UInt32=255,_
byval _blue As UInt32=255)

Declare sub wDrawPixel(_
byval X As Int32,_
byval Y As Int32,_
ByVal _alpha As UInt32=255,_
byval _red As UInt32=255,_
ByVal _green As UInt32=255,_
byval _blue As UInt32=255)

Declare sub wDrawOval(_
byval X As Int32,_
byval Y As Int32,_
ByVal radius As Float32,_
ByVal _alpha As UInt32=255,_
byval _red As UInt32=255,_
ByVal _green As UInt32=255,_
byval _blue As UInt32=255)

PS. На всякий случай поясню разницу между wTexture и wImage.
Размер текстуры должнен аппаратно поддерживаться видеокартой (в районе 4096 x 4096), и кратность размеров степени двойки важна.
Image может быть любых размеров, ограничено лишь размерами памяти ПК.
Под лежачий камень мы всегда успеем...

Offline it_is_good

  • Friends
  • Baron (-ess)
  • *
  • Posts: 301
  • Reputation 13
  • I'm a newbie.
Re: 2D функции
« Reply #2 on: April 12, 2017, 02:53:36 PM »
У меня проблема именно с wGetImagePixel. Я видимо не допонимаю что-то. Но у меня выводятся всевозможные числа и как с ними поступать? Как из них вывести более понятное RGB?

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 683
  • Reputation 45
Re: 2D функции
« Reply #3 on: April 12, 2017, 07:31:38 PM »
В прошлом просте писал эти функции. Они позволят получить цвета и прозрачность из пикселя:
Code: [Select]
Declare function wGetColorRed32(ByVal _color As UInt32 Ptr)As UInt32
Declare function wGetColorGreen32(ByVal _color As UInt32 Ptr)As UInt32
Declare function wGetColorBlue32(ByVal _color As UInt32 Ptr)As UInt32
Declare function wGetColorAlpha32(ByVal _color As UInt32 Ptr)As UInt32
Под лежачий камень мы всегда успеем...

Offline it_is_good

  • Friends
  • Baron (-ess)
  • *
  • Posts: 301
  • Reputation 13
  • I'm a newbie.
Re: 2D функции
« Reply #4 on: April 12, 2017, 08:47:32 PM »
Пробовал. Программа вылетает при этом ((((
Code: [Select]
dim _color as uint32
...
_color = wGetImagePixel (Img, x, y)
...wGetColorRed32(_color)...  ' здесь и вылетает
Причём Img сразу создаю через wGetImage
« Last Edit: April 12, 2017, 08:49:23 PM by it_is_good »

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 683
  • Reputation 45
Re: 2D функции
« Reply #5 on: April 12, 2017, 09:00:57 PM »
_color As UInt32 Ptr
Под лежачий камень мы всегда успеем...

Offline it_is_good

  • Friends
  • Baron (-ess)
  • *
  • Posts: 301
  • Reputation 13
  • I'm a newbie.
Re: 2D функции
« Reply #6 on: April 12, 2017, 09:29:39 PM »
Забыл дописать Ptr выше в посте.
Вот строки из моего кода
Code: [Select]
...
Dim TreeMap As wImage
Dim _color As UInt32 Ptr
...
TreeMap = wGetImage("data/textures/treemap.bmp")
...
_color = wGetImagePixel(TreeMap, x, z)
wSetWindowCaption(Str(wGetColorRed32(_color)))
...
И именно на wGetColorRed32 вылетает всегда программа

Всё, тупиииииил по чёрному. Сейчас всё из кода вытащил и увидел, что в строке
Code: [Select]
wSetWindowCaption(Str(wGetColorRed32(_color)))
забыл указать @

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 102
  • Reputation 9
Re: 2D функции
« Reply #7 on: September 17, 2017, 08:24:52 PM »
Спасибо за тему! Разведываю возможности для создания на W3D компьютерных версий настолок - карточных, с кубиками. Физика должна помочь эмулировать кубик. Ну а 2D функции для всего остального.