Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 13.04.2012, 18:57   #1
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Write & ReadPixelFast

Ктонибудь знает как он одним значением хранит Р,Г,Б и альфу?
__________________
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 19:00   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Write & ReadPixelFast

да, есть такие люди


в одном инте 32 бита
на компоненту надо 8 бит (байт)
они запакованы слева направо как A R G B

запаковать можно так:
value = A shl 24 + R shl 16 + G shl 8 + B

распаковать так:
A = value and $FF000000
B = value and $00FF0000
B = value and $0000FF00
B = value and $000000FF

или как там 16-ричные числа пишутся в блице
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 19:00   #3
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Write & ReadPixelFast

При помощи совершенно умопомрачительной фичи - называется битовый сдвиг.

http://forum.boolean.name/showthread.php?t=13646
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 19:13   #4
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Write & ReadPixelFast

Короче вот такой код, после 2-х секунд висения выкидывает ошибку Мемори..

Graphics3D 1280,1024,32,1
SetBuffer BackBuffer()

Global gw=GraphicsWidth()
Global gh=GraphicsHeight()
Global imb=CreateImage(gw,gh)
Dim pix(GraphicsWidth(),GraphicsHeight()) 

camera=CreateCamera()
PositionEntity camera,0,0,-10

sp=LoadSprite("Grass1.png",2)
ScaleSprite sp,12,12
Global key%=True



While Not KeyHit(1)
RenderWorld()
blur(0,0,gw,gh)

Text 300,300,"TEXT"
Flip
Wend
End

Function blur(x,y,dx,dy)
CopyRect x,x,dx,dy,x,y,BackBuffer(),ImageBuffer(imb)
SetBuffer ImageBuffer(imb)

LockBuffer ImageBuffer(imb)
; Используя ReadPixelFast, занесем каждый пиксел в массив 
For y=0 To GraphicsHeight()
For x=0 To GraphicsWidth()
 pix(x,y)=ReadPixelFast(x,y,ImageBuffer(imb))
Next
Next

UnlockBuffer ImageBuffer(imb)

CopyRect x,x,dx,dy,x,y,ImageBuffer(imb),BackBuffer()
End Function
__________________
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 19:23   #5
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Write & ReadPixelFast

SetBuffer ImageBuffer(imb) зачем? попробуй вообще его убрать.
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 19:52   #6
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Write & ReadPixelFast

А ещё во всяких плюсах можно тупо память int скопировать в массив из 4х байт.
__________________
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 21:26   #7
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Write & ReadPixelFast

Хотел написать чтото типа блура(тупо размазываю два ближийших пикселя), вот так
Но оооочень медленно работает на обработку уходит целая секунда

Function blur(x,y,dx,dy)
LockBuffer BackBuffer()

For y=0 To GraphicsHeight()
For x=0 To GraphicsWidth()
 pix(x,y)=ReadPixelFast(x,y)
If (x Mod 2=1) Then WritePixelFast x,y,pix(x-1,y)
Next
Next
UnlockBuffer BackBuffer()
End Function
Даже если я написать правильно и обрабатывать через один столбец, всё равно будет делать обработку пол секунды Что нереально долго, что посоветуете?
__________________
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 22:40   #8
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Write & ReadPixelFast

не делать постэффекты на цпу?
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 22:52   #9
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Write & ReadPixelFast

Это вопрос или предъява? ))
Да шучу, блин, ну выбора вроде как нету, или на блитце можно пользоваться ресурсами видеокарты для расчетов?

Хотя не понимаю что тут тяжелого для проца, конечно точек многовато, но числа вроде простые, без плавущей точки. Я конечно плохо в этом разбираюсь, но думал для проца это фигня...
__________________
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 23:44   #10
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Write & ReadPixelFast

78643200 вычислений в секунду, при 60 фпс. Это много.
(Offline)
 
Ответить с цитированием
Старый 14.04.2012, 00:20   #11
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Write & ReadPixelFast

во первых блицовое a+b это вовсе не
MOV EAX,[a]
MOV EBX,[b]
ADD EAX,EBX
оно не транслируется в нативный код.

во вторых кроме блица есть еще очень много хороших движков. тот же Хорс, например.
(Offline)
 
Ответить с цитированием
Старый 14.04.2012, 06:57   #12
Платон Александрович
Нуждающийся
 
Аватар для Платон Александрович
 
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений
(для 83 пользователей)
Ответ: Write & ReadPixelFast

burovalex
Эта твоя blur вообще полнейшая жесть, да еще с ошибками.

Если хочешь блур, установи перед камерой спрайт (так чтобы было пиксель-в-пиксель, с небольшим сдвигом), сделай его полупрозрачным, в его текстуру скопируй с экрана изображение с помощью CopyRect.

Сообщение от HolyDel Посмотреть сообщение
во первых блицовое a+b это вовсе не
MOV EAX,[a]
MOV EBX,[b]
ADD EAX,EBX
оно не транслируется в нативный код.
Транслируется, причем именно так Другое дело что оптимизаций, кроме свертки константных выражений, там нет и все транслируется "влоб", шаблонно.
(Offline)
 
Ответить с цитированием
Старый 14.04.2012, 12:25   #13
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Write & ReadPixelFast

да? отчегож оно тогда это:
a = MilliSecs()
b = 0
For i = 1 To 1000000000
b = b + i
Next
time = MilliSecs() - a
Print b
Print time
WaitKey
работает в 11 раз медленнее чем это:
#include <Windows.h>
#include <iostream>

int main()
{
	int a = GetTickCount();
	int b =0;
	for(int i=1;i<=1000000000;++i)
	{
		b = b + i;
	}
	int time = GetTickCount() - a;
	std::cout<<b<<std::endl<<time;
	std::cin.get();
}
?

//правка, проверил без оптимизации, скорость сопоставимая (3c блица против 2.6с плюсов). был неправ
(Offline)
 
Ответить с цитированием
Старый 14.04.2012, 13:29   #14
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Write & ReadPixelFast

Сообщение от SBJoker Посмотреть сообщение
А ещё во всяких плюсах можно тупо память int скопировать в массив из 4х байт.
или просто указатель привести к типу char*
int bar;
char *foo=(char*)(&bar);
foo[2]=0;//например

или использовать объединения, однако Страуструп рекомендует использовать их только для низкоуровневого кода (тут как раз такой случай)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com