 |
3D-программирование Вопросы, касающиеся программирования 3D мира |
25.08.2008, 03:46
|
#1
|
Бывалый
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений (для 267 пользователей)
|
CreateTexture
Сегодня вдруг выяснил такую неприятную вещь: при создании текстуры напрямую в блитце возникает странный баг с флагами. Можно поставить 2 или 4, а толку ноль - черный цвет остается просто черным.
У меня есть только одна идея по этому поводу. Справка пишет, что для альфа текстур при загрузке по умолчанию используется альфа-канал изображения. И только если его нет используется стандартная схема - чем темнее, тем прозрачнее. Возможно поэтому при создании текстуры черный цвет не делается прозрачным.
Вопрос, собственно, такой: можно ли это как-то обойти или придется геморроиться с WritePixelFast?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.08.2008, 03:54
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,743
Написано 5,461 полезных сообщений (для 15,676 пользователей)
|
Ответ: CreateTexture
При помощи WritePixel[Fast] пиши не только цвет, но и альфу. (нужна видимая точка - 255, невидимая - 0) то есть типа такого ЕСЛИ пиксель чёрный или около того, ТОГДА пишем вместе с цветом ещё и альфу 0, ИНАЧЕ - 255
З.Ы. Там нада это в 16-ричную сис. сч. перевести но это не сложно, сам же пользовался.
З.З.Ы. Не юзай WritePixelFast и ReadPixelFast, они не на всех компах работают без глюков, лучше делай обычные WritePixel и ReadPixel.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
25.08.2008, 14:47
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: CreateTexture
З.З.Ы. Не юзай WritePixelFast и ReadPixelFast, они не на всех компах работают без глюков, лучше делай обычные WritePixel и ReadPixel.
|
Не уверен, сколько юзал - всегда пахало. А производительность возрастает многократно. Буфер лочил?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
25.08.2008, 16:27
|
#4
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: CreateTexture
Я провел эксперимент и скажу что разницы между WritePixelFast(ReadPixelFast) и WritePixel(ReadPixel) нету никакой, главное залочить картинку. При залоченой картинке скорости опеих пар команд одинаковые. Видимо всё отличие только в том что команды без приставки Fast могут и без залочения работать, но медленее. Но с LockBuffer их скорость одинакова.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.08.2008, 02:27
|
#5
|
Бывалый
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений (для 267 пользователей)
|
Ответ: CreateTexture
Кстати, подтверждаю, WritePixelFast без причин вылетает на моем компе. O_o
Причем довольно странно: в дебаг режиме на RenderWorld, без дебага после нажатия Esc. Иногда просто выходит из программы почти сразу после старта.даже без ошибки.
С WritePixel таких проблем не обнаружилось.
|
(Offline)
|
|
26.08.2008, 02:37
|
#6
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: CreateTexture
WritePixelFast - кака
не юзайте, вылетает.
И хрен поймешь от чего это зависит.
Бывает полгода работает, потом внезапно начинает глючить
__________________
|
(Offline)
|
|
26.08.2008, 15:42
|
#7
|
Троллота
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений (для 1,772 пользователей)
|
Ответ: CreateTexture
Самое интересное - это то, что если использовать с ReadPixel/WritePixel совместно с LockBuffer/UnlockBuffer, то скорость на глаз, а может и не только, одинаковая с ReadPixelFast/WritePixelFast. 
|
(Offline)
|
|
25.12.2008, 13:50
|
#8
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: CreateTexture
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
25.12.2008, 14:26
|
#9
|
Бывалый
Регистрация: 10.06.2006
Сообщений: 808
Написано 354 полезных сообщений (для 832 пользователей)
|
Ответ: CreateTexture
WritePixelFast вылетает только тогда, когда параметры выходят за пределы экрана или текстуры.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо L.D.M.T. за это полезное сообщение:
|
|
25.12.2008, 14:49
|
#10
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: CreateTexture
L.D.M.T. наконец-то хоть кто-то открыл нам истину!
в приведённом выше примере фиксится уменьшением верхней границы в циклах на одни пиксель
Это ведь ваще "фак мой моск": в половине семплов начало вывода в буфере считается за (0.0) и при этом до размеров, в то время как фактическое значение - (размер-1). Просто часть обработичков игнорируют такое надругательство.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
Последний раз редактировалось impersonalis, 25.12.2008 в 14:57.
|
(Offline)
|
|
12.02.2009, 05:04
|
#11
|
AnyKey`щик
Регистрация: 12.02.2009
Сообщений: 6
Написано 2 полезных сообщений (для 6 пользователей)
|
Ответ: CreateTexture
Если ещё актуально то выяснилось что можно копировать имэйдж в текстуру и с флагом маски, только пустой цвет(маскированый) записать как: А shl 24; где А от 0 до 128.
вот пример:
Graphics3D 800,600,16,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()
Dim pix(64,64)
cube=CreateCube()
Global img=LoadImage("tex.bmp")
Global tex=CreateTexture(64,64,5)
;--------------------------
SetBuffer ImageBuffer(img)
LockBuffer()
For i=0 To 63
For j=0 To 63
pix(j,i)=ReadPixel(j,i)
Next
Next
UnlockBuffer()
SetBuffer TextureBuffer(tex)
LockBuffer()
For i=0 To 63
For j=0 To 63
r=pix(j,i) Shr 16 And 255
g=pix(j,i) Shr 8 And 255
b=pix(j,i) And 255
If Not r=g=b Then
WritePixel j,i,0 Shl 24; + r Shl 16 + g Shl 8 + b
Else
WritePixel j,i,pix(j,i)
End If
Next
Next
UnlockBuffer()
SetBuffer BackBuffer()
;------------------------
EntityTexture cube,tex
lit=CreateLight()
cam=CreateCamera()
CameraClsColor cam,63,63,63
PositionEntity cam,0,0,-5
EntityFX cube,17
Repeat
x=x+2:y=x-z:z=x-y
RotateEntity cube,x,y,z
UpdateWorld()
RenderWorld()
Flip 1
Until KeyHit(1)
End
Нарисовать в паинте какую-то фигню размером 64х64 на чёрном фоне думаю не проблема.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:02.
|