forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Вопрос о масштабировании текстуры. (http://forum.boolean.name/showthread.php?t=3582)

ABTOMAT 10.06.2007 21:16

Вопрос о масштабировании текстуры.
 
Предположим, у меня есть текстура 1024х1024 и бэкбуфер 1280х1024. Вопрос: как мне содержимое бэкбуфера отмасштабировать так, чтобы скопировать его в текстуру без остатка (читай: как его отмасштабить по горизонтали с 1028 до 1024 чтоб он без остатка влез в тексу)?

З.Ы. ScaleTexture почему-то не помогает :dontknow: может, я не так делаю?

З.З.Ы. В хэлпе написано что она скалит текс. координаты
Цитата:

u_scale#,v_scale#
может, есть другой способ?

HolyDel 11.06.2007 01:55

Re: Вопрос о масштабировании текстуры.
 
копируй в имагу, масштабируй имагу, копируй в тексу.
Код:

img=createimage(1280,1024)
copyrect 0,0,1280,1024,backbuffer(),imagebufer(img)
scaleimage img,1024,1024
copyrect 0,0,1024,1024,imagebuffer(img),texturebuffer(fucking_texture)

!ЕТО НЕ РЕАЛТАЙМ ОПЕРАЦИЯ.

Platon 11.06.2007 03:49

Re: Вопрос о масштабировании текстуры.
 
Проще, хоть и не слишком шустро из-за двойного рендеринга, использовать вьюпорт камеры:
-ставишь размер вьюпорта по размеру текстуры CameraViewport()
-рендеришь мир RenderWorld()
-копируешь из заднего\переднего буфера в текстурный буфер CopyRect()
-меняешь вьюпорт камеры обратно CameraViewport()
-рендеришь мир RenderWorld()

moka 12.06.2007 07:05

Re: Вопрос о масштабировании текстуры.
 
Я делал как уже сказал HolyDel
Цитата:

копируй в имагу, масштабируй имагу, копируй в тексу.
Код:

img=createimage(1280,1024)
copyrect 0,0,1280,1024,backbuffer(),imagebufer(img)
scaleimage img,1024,1024
copyrect 0,0,1024,1024,imagebuffer(img),texturebuffer(fucking_texture)

!ЕТО НЕ РЕАЛТАЙМ ОПЕРАЦИЯ.
Только не забываем потом удалить имагу.
Вот крч я переделал:
Код:

Function ResizeTexture(Texture,Width%,Height%)
  Local Image=CreateImage(TextureWidth(Texture),TextureHeight(Textre))
  Local NTexture=CreateTexture(Width,Height)
  CopyRect 0,0,TextureWidth(Texture),TextureHeight(Textre),0,0,TextureBuffer(Texture),ImgeBuffer(Image)
  ScaleImage Image,Width,Height
  CopyRect 0,0,Width,Height,0,0,ImageBuffer(Image),TextureBuffer(NTexture)
  FreeImage Image
  Return NTexture
End Function

Писал в броузере, поэтому могут быть ошибочки ;)
Функция возвращает Новую текстуру - Уже отмасштабированную.

HolyDel 12.06.2007 14:17

Re: Вопрос о масштабировании текстуры.
 
Цитата:

Функция возвращает Новую текстуру - Уже отмасштабированную.
поетому если надо отмасштабировать одну тексу и записать в перемнноую хендл отмасштабированной тексы не делай так:
tex=ResizeTexture(tex,1024,1024)
так как в памяти отанется старая текса и ничем ты ее не убереш.
делай так
tex2=resizetexture(tex,1024,1024)
freetexture tex
tex=tex2
tex2=0


Часовой пояс GMT +4, время: 17:55.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot