|
Entity - указатель объекта
Blend - режим смешивания. 1: Альфа-смешивание (по умолчанию) 2: Multiply - умножение 3: Add - сложение |
|
Устанавливает режим смешивания для объекта. Это способ, который применяется для комбинирования пикселов объекта с пикселами фона.
Для вычисления RGBA результирующего пиксела альфа(прозрачность) пиксела объекта(или текстуры) умножается на альфу кисти(если используется) и цвета RGB устанавливаются в соответствии с цветом объекта или кисти. Эти данные RGBA пиксела затем используются для смешивания с соответствующим пикселом фона способом, который указан в команде EntityBlend. Альфа - смешивание : Этот тип смешивания использует значение Alpha (прозрачность). Вычисление производится по следующим формулам: Rr = ( An * Rn ) + ( ( 1.0 - An ) * Ro ) Gr = ( An * Gn ) + ( ( 1.0 - An ) * Go ) Br = ( An * Bn ) + ( ( 1.0 - An ) * Bo ) Здесь R = красный, G = зеленый, B = синий, n = значение цвета нового пиксела, r = значение цвета результирующего пиксела, o = значение цвета старого пиксела. Альфа - смешивание используется по умолчанию и используется для большинства объектов игрового мира. Multiply - умножение: Этот режим затемнит большинство пикселей. Если принять значение каждого цвета RGB в пределах от 0% до 100%, где 0 = 0% и 255 = 100%, эта команда вычислит значения каждого цвета по следующим формулам: Rr = ( ( Rn / 255.0 ) * ( Ro / 255.0 ) ) * 255.0 Gr = ( ( Gn / 255.0 ) * ( Go / 255.0 ) ) * 255.0 Br = ( ( Bn / 255.0 ) * ( Bo / 255.0 ) ) * 255.0 Значение alpha(прозрачность) не оказывает никакого влияния на этот режим. Смешивание со значением RGB 255, 255, 255 не сделает никаких изменений, в то время как значение RGB 128, 128, 128 затемнит пиксели в 2 раза, а значение RGB 0, 0, 0 будет полностью зачернять результирующие пиксели. Значение RGB 0, 255, 255 удалит красный компонент пикселя, но оставит другие цвета прежними. Способ умножения чаще используется для получения карт освещения (lightmaps), теней или других эффектов, где требуется затемнение пикселей. Add - сложение: Этот способ добавит новый цвет к старому по следующей формуле: Rr = ( Rn * An ) + Ro Gr = ( Gn * An ) + Go Br = ( Bn * An ) + Bo Полученное значение обрезается, если оно больше 255, поэтому после использования нескольких эффектов подряд переходы цветов могут перейти в градиент. Этот способ часто применяется для получения лазерного луча и огня. Смотрите также : TextureBlend, EntityAlpha. |
|
Graphics3D 640,480
SetBuffer BackBuffer() SeedRnd MilliSecs() ; Создаем камеру camera=CreateCamera() CameraClsColor camera,160,160,160 PositionEntity camera,0,0,-30 middle=CreatePivot() EntityParent camera,middle ; Создаем текстуру - белый круг на черном фоне For n=0 To 50 Color 5+(n*5),5+(n*5),5+(n*5) Oval 10+n,10+n,236-(n*2),236-(n*2),1 Next blob_tex=CreateTexture(256,256) blob=CreateImage(256,256) GrabImage blob,0,0 CopyRect 0,0,256,256,0,0,ImageBuffer(blob),TextureBuffer(blob_tex) FreeImage blob max_blobs=100 ; Создаем капли со смешиванием режима add Dim blobs(max_blobs) ; спрайты капель Dim xyblobs#(max_blobs,2) ; векторы капель For n=0 To max_blobs blobs(n)=CreateSprite() EntityFX blobs(n),1 EntityBlend blobs(n),3 ;установим режим смешивания add EntityTexture blobs(n),blob_tex xyblobs(n,0)=Rnd(-.1,.1) xyblobs(n,1)=Rnd(-.1,.1) xyblobs(n,2)=Rnd(-.1,.1) EntityColor blobs(n),Rand(0,255),Rand(0,255),Rand(0,255) ;give it a colour Next ; Создаем текстуру куба Color 255,255,255 Rect 0,0,256,256,1 For n=0 To 7 If n=0 Then Color 0,0,0 If n=1 Then Color 0,0,255 If n=2 Then Color 0,255,0 If n=3 Then Color 0,255,255 If n=4 Then Color 255,0,0 If n=5 Then Color 255,0,255 If n=6 Then Color 255,255,0 If n=7 Then Color 255,255,255 Rect n*32,n*32,32,32,1 Next Color 0,0,0 For n=0 To 255 Step 32 Line 0,n,255,n Line n,0,n,255 Next cube_tex=CreateTexture(256,256) cube=CreateImage(256,256) GrabImage cube,0,0 CopyRect 0,0,256,256,0,0,ImageBuffer(cube),TextureBuffer(cube_tex) FreeImage cube ; Создаем куб cube=CreateCube() ScaleEntity cube,11,11,11 EntityTexture cube,cube_tex EntityFX cube,17 ;set fullbright and 2 sided textures EntityBlend cube,2 ;set multiply blend Repeat ; Перемещаем капли For n=0 To max_blobs MoveEntity blobs(n),xyblobs(n,0),xyblobs(n,1),xyblobs(n,2) ;отскакивание If EntityX(blobs(n))<-10 Or EntityX(blobs(n))>10 Then xyblobs(n,0)=-xyblobs(n,0) If EntityY(blobs(n))<-10 Or EntityY(blobs(n))>10 Then xyblobs(n,1)=-xyblobs(n,1) If EntityZ(blobs(n))<-10 Or EntityZ(blobs(n))>10 Then xyblobs(n,2)=-xyblobs(n,2) Next ; поворот камеры TurnEntity middle,.1,.2,.3 UpdateWorld RenderWorld Flip Until KeyHit(1) |