|
FAQ Туториалы и часто задаваемые вопросы |
30.06.2007, 02:53
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Спидометр
BACK=CreateImage(64,64)
SetBuffer ImageBuffer(BACK)
Color 255,255,255
Oval 0,0,64,64
Color 0,0,255
For i=0 To 359 Step 15
Line 32,32,32+Cos(i)*30,32+Sin(i)*30
Next
Color 255,255,255
Oval 32-20,32-20,40,40
Color 255,0,0
Oval 32-2,32-2,4,4
SaveBuffer(ImageBuffer(BACK),"back.bmp")
FreeImage BACK
;=====================================
BACK=CreateImage(64,64)
SetBuffer ImageBuffer(BACK)
Rect 31,2,3,30
SaveBuffer(ImageBuffer(BACK),"back2.bmp")
FreeImage BACK
;=====================================
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
SP0=LoadSprite("back.bmp",4,camera)
SP1=LoadSprite("back2.bmp",4,SP0)
EntityOrder SP0,0
EntityFX SP0,1
EntityOrder SP1,-1
EntityFX SP1,1
PositionEntity SP0,-4,2.7,5
;=
cube=CreateCube()
PositionEntity cube,-3,2,6.5
SetBuffer BackBuffer()
While Not KeyHit(1)
RotateSprite SP1,-MilliSecs()*0.01
RenderWorld()
Flip
Wend
End
Одна из возможных быстрых реализаций на спрайтах.
Внимание: в программе автогенерирующиеся рисунки (сбрасываются с папку tmp блитца или текущую папку) - это вызвано невозможнотью поставить для созданной( а не загруженной) текстуры флаг=4 (поставить можно - эффекта не будет).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
30.06.2007, 13:35
|
#2
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: Спидометр
это вызвано невозможнотью поставить для созданной( а не загруженной) текстуры флаг=4
|
Вообще-то это возможно. Просто при генерации такой текстуры (равно как и текстуры с флагом=2), нужно вручную задавать пикселам не только цвет, но и прозрачность:
Color= Alpha Shl 24 Or Red Shl 16 Or Green Shl 8 Or Blue Shl 0
WritePixel X,Y,Color
При загрузке текстуры из файла- Блиц делает это самостоятельно.
P.S. Может быть кто-нибудь осветит этот вопрос в ФАК-е? Ибо он в той или иной трактовке всплывает с завидной периодичностью.
|
(Offline)
|
|
30.06.2007, 20:31
|
#3
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Спидометр
причом с бакбуффера все равно не считается значения альфаканала.
рисовать линии через writepexelfast - занятие неблагородное, и код одного только етого рисования был-бы намного больше, нежели код "спидометра".
зыж. не пробовал рисовать сразу в буффер тексы, но не думаю что что-то кардинально изменится, все равно придется прогонять каждый пиксель тексы и присваивать ему свое значение альфа-канала.
Такчто ИМХО правильно сделано.
|
(Offline)
|
|
30.06.2007, 21:06
|
#4
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: Спидометр
Гым, речь шла о маск-канале. Значит ничто не мешает пргнать цикл по всем текселям и закрасить их прозрачным цветом (всего 6 строк). А уж поверху - аккурат сам Б-г велел рисовать непрозрачные линии любого фасона. Эдакий принцип фона и фореграунда. )
И зачем нам бекбуфер? Нам бекбуфер не надо. Многое, при желании, рисуется непосредственно в текстурный буфер.
|
(Offline)
|
|
30.06.2007, 23:14
|
#5
|
Дэвелопер
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений (для 17 пользователей)
|
Re: Спидометр
FastImage =))))
|
(Offline)
|
|
30.08.2007, 19:50
|
#6
|
Бывалый
Регистрация: 12.10.2006
Сообщений: 737
Написано 131 полезных сообщений (для 452 пользователей)
|
Re: Спидометр
2impersonalis прокомментируй свой код и вообще приведи его в порядок, а то некоторые новички-нубы, когда им даешь ссылку на твой пост пишут, что ничего не поняли. более опытные же юзеры и сами знают как такое сделать.
|
(Offline)
|
|
30.08.2007, 22:23
|
#7
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Спидометр
;рисуем табло спидометра
BACK=CreateImage(64,64);создаём память для хранения картинки размером 64 на 64
;обратите внимание: размеры - степень двойки
SetBuffer ImageBuffer(BACK);устанавливаем в качестве текущего буфера для рисования
;буфер картинки
Color 255,255,255;устаниавливаем цвет рисования - белый
Oval 0,0,64,64;рисуем овал (вписываем его в нашу квадратную картинку)
Color 0,0,255;устаниавливаем цвет рисования - синий
For i=0 To 359 Step 15;проходим по окружности от 0 до 359 градусов
;с шагом 15
Line 32,32,32+Cos(i)*30,32+Sin(i)*30;рисуем линию из центра к краю овала
Next
Color 255,255,255;устаниавливаем цвет рисования - белый
Oval 32-20,32-20,40,40;рисуем в центре картинки небольшой овал (радиус - 20пкс)
Color 255,0,0;устаниавливаем цвет рисования - красный
Oval 32-2,32-2,4,4;рисуем в центре картинки маленький кружок (радиус - 4пкс)
SaveBuffer(ImageBuffer(BACK),"back.bmp");сохраняем нашу картинку как "back.bmp"
FreeImage BACK;удаляем картинку из памяти
;=====================================
;рисуем стрелку
BACK=CreateImage(64,64)
;создаём память для хранения картинки размером 64 на 64
;обратите внимание: размеры - степень двойки
SetBuffer ImageBuffer(BACK);устанавливаем в качестве текущего буфера для рисования
Rect 31,2,3,30;рисуем стрелку: прямоугольник из середины верхней стороны квадарата к центру
SaveBuffer(ImageBuffer(BACK),"back2.bmp");сохраняе м нашу картинку как "back2.bmp"
FreeImage BACK;удаляем картинку из памяти
;=====================================
Graphics3D 800,600,32,2;инициализация 3д-режима
SetBuffer BackBuffer();устанавливаем в кач-ве текущего - задний буфер
camera=CreateCamera();создаём камеру
light=CreateLight();создаём свет
SP0=LoadSprite("back.bmp",4,camera);загружаем спрайт - панель спидометра
;аттачим его к камере
SP1=LoadSprite("back2.bmp",4,SP0);загружаем спрайт - стрелку спидометра
;аттачим его к панели спидометра
EntityOrder SP0,0;устанавливаем порядок отрисовки - поверх всех
EntityFX SP0,1;убираем влияние освещения на спрайт
EntityOrder SP1,-1;устанавливаем порядок отрисовки - поверх всех
EntityFX SP1,1убираем влияние освещения на спрайт
PositionEntity SP0,-4,2.7,5;позиционируем панель спидометра (а, следовательно, и стрелку)
;=
;создаём и позиционируем кубик - чтобы не пребывать в пустоте
cube=CreateCube()
PositionEntity cube,-3,2,6.5
While Not KeyHit(1)
RotateSprite SP1,-MilliSecs()*0.01; в кач-ве показаний спидометра ставим кол-во мск с момента
;запуска ситемы *(-0.01)
RenderWorld();отрсиовка 3д-сцены
Flip;смена буферов
Wend
End
|
вот
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
31.08.2007, 01:47
|
#8
|
Бывалый
Регистрация: 12.10.2006
Сообщений: 737
Написано 131 полезных сообщений (для 452 пользователей)
|
Re: Спидометр
вот, совсем другое дело! теперь, думаю, даже тупой поймет! сделал в своем посте FAQ по B3D ссылку на данный пост. пускай все новички здесь смотрят.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Спидометр |
smaller |
3D-программирование |
20 |
29.06.2007 11:41 |
Спидометр |
LD |
3D-программирование |
9 |
21.06.2007 15:47 |
Часовой пояс GMT +4, время: 16:55.
|