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=5619)

Raiter 20.01.2008 23:54

Ответ: Размытие...
 
Код:

;RPG Hax
Const texsize=1024,fx=7,o=-1
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
Type TPlayer
Field ent
Field piv
Field go
End Type
Global campiv=CreatePivot()
PositionEntity campiv,0,300,0
Global cam=CreateCamera(campiv)
RotateEntity CreateLight(),45,0,0
TurnEntity cam,45,0,0



plane=CreatePlane()
EntityPickMode plane,2
planetex=CreatePlaneTexture()
ScaleTexture planetex,100,100
EntityTexture plane,planetex
Global Player.TPlayer=CreatePlayer()
bl=createblurlayer(cam,1,0,1,1,.95,1,o)
Repeat
If MouseDown(1) Then
pick=CameraPick(cam,MouseX(),MouseY())
If pick=plane Then
PositionEntity Player\piv,PickedX(),20,PickedZ()
Player\go=True
EndIf
EndIf
UpdatePlayer(Player)
CameraUpdate()
RenderWorld
bltex=updateblurlayer(bl,bltex)
Flip
Until KeyDown(1)

Function createblurlayer(cam,z#,ang#,mgn#,bright#,alpha#,bmode,ord)
Local xres=GraphicsWidth()
Local yres=GraphicsHeight()
layer=CreateMesh(cam)
s=CreateSurface(layer)
;Вычисление координат текстуры
vx#=1.0*xres/texsize
vy#=1.0*yres/texsize
AddVertex s,-1,-1,0,0,0
AddVertex s,1,-1,0,vx#,0
AddVertex s,-1,1,0,0,vy#
AddVertex s,1,1,0,vx#,vy#
AddTriangle s,0,1,2
AddTriangle s,3,2,1
;Определение величин для установки прямоугольника прямо перед камерой путем
; вычисления экранных координат точки трехмерного мира
PositionEntity layer,1,1,z#
CameraProject cam,EntityX(layer,True),EntityY(layer,True),EntityZ(layer,True)
rx#=ProjectedX#()-.5*xres
ry#=ProjectedY#()-.5*yres
;Масштабирование слоя
ScaleMesh layer,.5*xres/rx#,.5*yres/ry#,1
;Сдлвиг прямоугольника на полпиксела влево-вверх, чтобы он был в центре экрана
PositionEntity layer,-.5/rx#,-.5/ry#,z#
RotateEntity layer,0,0,ang#
;Задание эффектов слоя
ScaleEntity layer,mgn#,mgn#,mgn#
EntityAlpha layer,alpha#
EntityBlend layer,bmode
col=255*bright#
EntityColor layer,col,col,col
EntityFX layer,1
EntityOrder layer,ord
Return layer
End Function

Function CreatePlaneTexture()
Local tex=CreateTexture(128,128)
Local buff=GraphicsBuffer()
SetBuffer TextureBuffer(tex)
Color 66,122,185
Rect 0,0,64,64
Rect 64,64,128,128
Color 183,234,247
Rect 64,0,128,64
Rect 0,64,64,128
SetBuffer buff
Return tex
End Function
Function CreatePlayer.TPlayer()
p.TPlayer=New TPlayer

p\ent=CreateCone()
RotateMesh p\ent,90,0,0
ScaleEntity p\ent,20,20,20
TranslateEntity p\ent,0,20,200
EntityColor p\ent,167,121,168
p\piv=CreatePivot()

Return p
End Function
Function CameraUpdate()
Local sp
If KeyDown(42) Then sp=3 Else sp=1
If KeyDown(17) Then MoveEntity campiv,0,0,sp
If KeyDown(31) Then MoveEntity campiv,0,0,-sp
If KeyDown(30) Then MoveEntity campiv,-sp,0,0
If KeyDown(32) Then MoveEntity campiv,sp,0,0
End Function
Function UpdatePlayer(p.TPlayer)
If Not p\go Then Return
PointToEntity(p\ent,p\piv,0.05)
MoveEntity p\ent,0,0,1
If EntityDistance(p\ent,p\piv)<6 Then p\go=False
End Function
Function PointToEntity( src, dest, softness# )
; вычисляем компоненты вектора между обьектами
Local dx# = EntityX( src ) - EntityX( dest )
Local dy# = EntityY( src ) - EntityY( dest )
Local dz# = EntityZ( src ) - EntityZ( dest )
; ориентируем обьект по вектору
AlignToVector( src, -dx, -dy, -dz, 0, softness )
End Function
Function updateblurlayer(layer,tex)
If tex=0 Then tex=CreateTexture(texsize,texsize)
EntityTexture layer,tex
CopyRect 0,0,GraphicsWidth(),GraphicsHeight(),0,0,BackBuffer(),TextureBuffer(tex)
Return tex
End Function

Цитата:

Кста, этот код пока пробный, я потом начну новый код писать, уже совсем другую игру, но постараюсь разобраться)
Блин, парень ... Что писать? У тебя этот код состоит из двух скопистеных кусков...
Причем второй ты даже скопипастить толком не смог...

Я всегда говорил, что копипаст - зло!
Учи азы!

JeSss 20.01.2008 23:56

спс огромное))

А кстати, сможеш сказать пожалст, какие ты внёс изменения, всётаки надо понять)))

Raiter 20.01.2008 23:59

Ответ: Размытие...
 
Спс в статистеке не отобразится :-) Есть кнопка "Thanks"... эээ ... тоесть "Полезно" ;) :)

Цитата:

А кстати, сможеш сказать пожалст, какие ты внёс изменения, всётаки надо понять)))
Йпрст... Ты смотрел хоть пример на БлицЕтСетера??? Или тупо скопировал 2 ф-ции? Скорее второе. Ну ф-ции скопировтаь то ты скопировал, а вызывать их кто за тебя будет? Я лишь дописал вызов функций в цыкле и перед ним. Вот и всё. Вот смотри:
Код:

; это всё - код ДО главного цыкла
plane=CreatePlane()
EntityPickMode plane,2
planetex=CreatePlaneTexture()
ScaleTexture planetex,100,100
EntityTexture plane,planetex
Global Player.TPlayer=CreatePlayer()
bl=createblurlayer(cam,1,0,1,1,.95,1,o) ; здесь мы создаём квад на который будем рисовать текстуру из рендера

; сдесь начинается главный цыкл!
Repeat
If MouseDown(1) Then
pick=CameraPick(cam,MouseX(),MouseY())

Код:

UpdatePlayer(Player)
CameraUpdate()
RenderWorld
; тут, после рендера, мы вызываем ф-цию обновления нашего квада.
bltex=updateblurlayer(bl,bltex)
Flip
Until KeyDown(1)

Да. И ещё убрал строчку:
Код:

CameraRange cam ,1,10000
ЗЫЖ пиши в 1 сообщении. Есть кнопка "Правка"

Taugeshtu 21.01.2008 01:55

Ответ: Размытие...
 
ЗЫЖ.
снова и снова...
Ничего не буду говорить. Захочет - сам поумнеет.

а) о блюре говорили много и еще раз много... А потом еще много всего добавили, и даже потом обновляли, правили, в итоге получив множество инфы. (топикстартеру читать следующее предложение запрещено) И если у человека кора головного мозга с отсутствующей картой нормалей - то это его проблемы.
Ибо [no place for copy-pastors in true gamedev] ...

Raiter, а тебе огромный респект за проявленное терпение.
Эх, и по теме добавить нечего. Хотя...
Советую поэкспериментировать с различными блур-эффектами (прим. внутреннего голоса: "Если в соктебрастенный код вникнешь"), особенно с различными вариантами TextureBlend (ты же догадаешься для этого рендерить одну текстуру для блюра а затем делать несколько слоев с мультитекстурированием? (; )
при сильном и жгучем желании тебе светит даже glow. Точнее его подобие.

IGR 21.01.2008 11:20

Ответ: Размытие...
 
Цитата:

при сильном и жгучем желании тебе светит даже glow
о, glow !! а где его скопи-пастить ?? :-)

PS: glow тоже на форуме был !! так-что JeSss, если надо, то лучше сначала поищи, а потом еси что не понятно, то спрашивай !! :)

HolyDel 21.01.2008 11:20

Ответ: Размытие...
 
Симпатичный глоу делал МоКа.
смотри на www.moka.ucoz.ru

Raiter 21.01.2008 14:53

Ответ: Размытие...
 
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 200 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.


Цитата:

Raiter, а тебе огромный респект за проявленное терпение.
Стараюсь :)

А тебе, JeSss, я еще раз ОЧЕНЬ НАСТОЯТЕЛЬНО рекомендую начать с изучения азов!
Я понимаю, что тебе хочется сразу написать великую игру. Все мы (или почти все) это проходили. Но ты никогда не сможеш постоить хороший дом без фундамента. И никогда не начнёш строить его с крыши. Человек сначала усится ходить, а уже потом бегать... Вот фундамент - это твои базовые знания! Так заложи фундамент и постепенно строй дом, продвигаясь к крыше. Научись ходить и со временем побежиш! ;)

И никогда не копировать чужой код. Ну или по крайней мере не копировать, если ты не понимаеш этот код....

JeSss 21.01.2008 15:08

Re: Размытие...
 
спасмбо вообщем всем за всё! А тебе, Raiter, отдельное, БОЛЬШОЕ, 2-ое спасибо! (2-ое значит я тя 2 раза поблагодарил))) за помощь в коде, и за обьяснение)) )

А кстати, ещё 1 вопрос, напишу сдесь:
как сделать чтобы чел двигался вперёд ПОСЛЕ НАЖАТИЯ кнопки, а не вовремя ЗАЖАТОЙ кнопки??

HolyDel 21.01.2008 16:37

Ответ: Размытие...
 
завести перменную состояния
If KeyDown(200) then run=1
if keydown(208) then run=0
if run then moveentity plaeyer,0,0,1

FrankH 21.01.2008 16:41

Ответ: Размытие...
 
Цитата:

Сообщение от HolyDel (Сообщение 75172)
завести перменную состояния
If KeyDown(200) then run=1
if keydown(208) then run=0
if run then moveentity plaeyer,0,0,1

If KeyHit(200) then run=1-run
if Not(run=0) then moveentity plaeyer,0,0,1

HolyDel 21.01.2008 16:43

Ответ: Размытие...
 
ну смотря что требуется.
кстати, в таком случае:
If KeyHit(200) then run=1-run

moka 21.01.2008 17:26

Ответ: Размытие...
 
Или:
IKhUp=KeyHit(200)
If IKhUp run=not run

JeSss 21.01.2008 18:11

Re: Размытие...
 
спасибо, оба работают!

JeSss 21.01.2008 18:51

Re: Ответ: Размытие...
 
[quote=Raiter;75108]Спс в статистеке не отобразится :-) Есть кнопка "Thanks"... эээ ... тоесть "Полезно" ;) :)



Йпрст... Ты смотрел хоть пример на БлицЕтСетера??? Или тупо скопировал 2 ф-ции? Скорее второе. Ну ф-ции скопировтаь то ты скопировал, а вызывать их кто за тебя будет? Я лишь дописал вызов функций в цыкле и перед ним. Вот и всё. Вот смотри:
Код:

; это всё - код ДО главного цыкла
plane=CreatePlane()
EntityPickMode plane,2
planetex=CreatePlaneTexture()
ScaleTexture planetex,100,100
EntityTexture plane,planetex
Global Player.TPlayer=CreatePlayer()
bl=createblurlayer(cam,1,0,1,1,.95,1,o) ; здесь мы создаём квад на который будем рисовать текстуру из рендера
 
; сдесь начинается главный цыкл!
Repeat
If MouseDown(1) Then
pick=CameraPick(cam,MouseX(),MouseY())

Код:

UpdatePlayer(Player)
CameraUpdate()
RenderWorld
; тут, после рендера, мы вызываем ф-цию обновления нашего квада.
bltex=updateblurlayer(bl,bltex)
Flip
Until KeyDown(1)

Да. И ещё убрал строчку:
Код:

CameraRange cam ,1,10000
quote]

Млин, я вообщем начал делать новый код, и нечё неработает, програма открывается, чёрный экран, и сразуже выходит...(( непойму ф чём дело то(((((:''((

HolyDel 21.01.2008 18:55

Ответ: Размытие...
 
игрового цикла нет?


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

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