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

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

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

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 29.06.2011, 17:48   #76
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Я хочу для начала почитать по шейдерам художественную литературу. А для блитца мне захотелось сделать пак функций, для воды, террэйна, облаков, замутить какую нить растительность. Простенький лайтмап для самопального террэйна, небо и т.п.
(Offline)
 
Ответить с цитированием
Старый 29.06.2011, 17:53   #77
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Имитация водной поверхности.

Зачем делать что-то на FFP, если это уже никто не использует, и все всё делают на шейдерах?
В данном случае это не разумно..
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
NitE (29.06.2011)
Старый 29.06.2011, 18:24   #78
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Просто так. А также из соображения, что научившись делать деревянные велосипеды с квадратными колесами, еще рано приступать к проектированию мопедов.
(Offline)
 
Ответить с цитированием
Старый 29.06.2011, 19:06   #79
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Имитация водной поверхности.

Это две разные вещи, снова говорю.
Шейдеры никак не относятся к FFP - это две разные сферы реализации, и общего там почти ничего нет. Совсем разный подход. Единственное одинаково, это данные которые используешь, но это изучается и там и там.
(Offline)
 
Ответить с цитированием
Старый 29.06.2011, 19:17   #80
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Есть еще один мотив, intel gma 945 хоть и поддерживает шейдеры 3.0, но программно, и чую задом, что не полностью. А пока единственно, что осталось это чудо нетбук леново идеяпад с 10, подключенный к 28" монику .
(Offline)
 
Ответить с цитированием
Старый 29.06.2011, 19:30   #81
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Имитация водной поверхности.

Лучше начинать с шейдеров 2.0. Их ограничение по нагрузке - источник мотивации на оптимизацию и больше смекалки.
(Offline)
 
Ответить с цитированием
Старый 29.06.2011, 21:37   #82
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Имитация водной поверхности.

Чуть чуть о Shader'ах:

Shader – это специальная программа для графического процессора (GPU, Graphical Processing Unit), управляющая поведением определённой (шейдерной) стадии графического конвейера видео-карты, занимающаяся обработкой входных данных и “отдающая” результат обработки этих данных. В данный момент наиболее часто используются вершинные и пиксельные шейдеры (vertex & pixel shaders), но на самом деле в Direct3D существует не два, а больше видов шейдеров, которые отличаются как назначением, так и способами их применения:

Вершинный шейдер (vertex shader) – шейдер, занимающиеся обработкой вершин модели
Пиксельный шейдер (pixel shader) – шейдер, выполняющийся для каждого выводимого на экран пиксела
Геометрический шейдер (geometry shader) (DirectX 10) – это шейдер, обрабатывающий геометрию. В отличие от вертексного шейдера, он обрабатывает не отдельные вершины, а наборы вершин, представляющих из себя геометрические примитивы (например, треугольники)
Hull-Shader – (DirectX 11) шейдер тесселяции
Domain-Shader – (DirectX 11) шейдер калькуляции внутри патча

Pixel shaders (или фрагментный) шейдер – это шейдерная программа, которая занимается обработкой отдельных пикселей изображения. В конечном итоге, по большей части, именно pixel shader определяет насколько красиво и естественно будет выглядеть конечное изображение. Причём, пиксельные шейдеры могут использоваться не только для формирования самого изображения, но и для его пост-процессинга, т.е. для создания некоторых спец-эффектов.

Vertex shader (вершинный шейдер) занимается обработкой данных вершин модели. Такие данные как координаты вершины в пространстве, текстурные координаты, тангент-вектор, бинормаль, нормаль обрабатываются как раз вершинными шейдерами. Кроме того, vertex shader занимается преобразованием модели из пространства модели в пространство мира/вида/проекции. Он может сам генерировать текстурные координаты или менять форму самой модели, например, “пустить” волны по ровной поверхности воды или как-то изогнуть модель, провести трансформации в соответствии со скелетной анимацией, может почитать освещённость вершин модели и много чего ещё…
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо maxturbo за это полезное сообщение:
dsd (29.06.2011), moka (30.06.2011)
Старый 29.06.2011, 22:40   #83
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Сегодня я многому научился
Таки узнал, что команда Tform в блитце работает очень быстро, по сути это почти как умножение на одно число
Таки сделал ручной расчет нормалей, с усреднением нормали полигонов примыкающих к вершине. Это работает слегка медленней, чем updatenormals. Я чувствую себя таааакиииим умным , хотя вроде затенение выглядит сильно контрастней. Но страшней

Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Dither 0
Dim plane#(0,0)
Dim CubeData#(0,0)
Dim quadsys#(0,0)
Global pivot,camera,mxs#,mys#,Light,timer3,debugcam,watermesh,watertex,dsd

;Include "bin/antifrizedcrab.bb"

watermesh=preparations()

While Not  ((KeyDown(56) And KeyHit(62)) Or  (KeyHit(56) And KeyDown(62))  Or KeyHit(1))
timer3=MilliSecs()
PositionTexture watertex,u#,v#
u#=Sin(MilliSecs()/500)

GrimMagicWater(watermesh,3,6,10,1)

UpdateWorld
RenderWorld
control(0.5,1.4)
Flip 0
Wend
End


Function  GrimMagicWater(meshid,waveheight#,horizwave#,wavelength#,speed#)
PointEntity light,camera
PositionEntity light,225*Sin(MilliSecs()/30),65,225*Cos(MilliSecs()/30)
PositionEntity watermesh,EntityX(camera,1),0,EntityZ(camera,1)
RotateEntity watermesh,0,EntityYaw(camera,1)-45,0 
If EntityY(camera,1)<1 Then PositionEntity camera,EntityX(camera,1),1,EntityZ(camera,1),1
ScaleTexture watertex,1+Sin(MilliSecs()/100)/10,1+Cos(MilliSecs()/50)/10

wavehorizlength#=35
;speed#=1
time#=MilliSecs()*speed

mesh=meshid
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)

For i=0 To qvert-1
x000#=plane#(i,0)
y000#=plane#(i,2)
z000#=0
TFormPoint x000,z000,y000,mesh,0
x00#=TFormedX()
y00#=TFormedZ()

z01#=waveheight*Cos(time/wavelength+x00*wavelength/3)+horizwave*Sin(time/wavehorizlength#+y00*wavelength/5)
x01#=x00-waveheight*Cos(time/wavelength+x00*wavelength/3)
y01#=y00-horizwave*Sin(time/wavehorizlength#+y00*wavelength/5)
TFormPoint x01,z01,y01,0,mesh
VertexCoords meshsurf,i,TFormedX(),TFormedY(),TFormedZ()
plane#(i,3)=TFormedX() ;x
plane#(i,4)=TFormedY() ;y
plane#(i,5)=TFormedZ() ;z
VertexTexCoords meshsurf,i,x00/25,y00/25
plane#(i,6)=0
plane#(i,7)=0
plane#(i,8)=0
Next

qtrian=CountTriangles(meshsurf)
For i=0 To qtrian-1 
v0=TriangleVertex (meshsurf,i,0)
v1=TriangleVertex(meshsurf,i,1)
v2=TriangleVertex (meshsurf,i,2)
x0#=plane#(v0,3) : y0#=plane#(v0,4): z0#=plane#(v0,5)
x1#=plane#(v1,3)-x0 : y1#=plane#(v1,4)-y0 : z1#=plane#(v1,5)-z0
x2#=plane#(v2,3)-x0 : y2#=plane#(v2,4) -y0: z2#=plane#(v2,5)-z0
;теперь найду уравнение по трем точкам
;для х это y1*z2-y2*z2 
a#=(y1*z2-y2*z2)
b#=-(x1*z2-x2*z3)
c#=(x1*y2-x2*y1)
TFormVector a,b,c,mesh,mesh
xv#=TFormedX()
yv#=TFormedY()
zv#=TFormedZ()
plane#(v0,6)=plane#(v0,6)+xv/plane#(v0,9)
plane#(v1,6)=plane#(v1,6)+xv/plane#(v1,9)
plane#(v2,6)=plane#(v2,6)+xv/plane#(v2,9)

plane#(v0,7)=plane#(v0,7)+yv/plane#(v0,9)
plane#(v1,7)=plane#(v1,7)+yv/plane#(v1,9)
plane#(v2,7)=plane#(v2,7)+yv/plane#(v2,9)

plane#(v0,8)=plane#(v0,8)+zv/plane#(v0,9)
plane#(v1,8)=plane#(v1,8)+zv/plane#(v1,9)
plane#(v2,8)=plane#(v2,8)+zv/plane#(v2,9)
Next

For i=0 To qvert-1
VertexNormal meshsurf,i,plane#(i,6),plane#(i,7),plane#(i,8)
Next

End Function


Function preparations()

pivot=CreatePivot()
PositionEntity pivot,0,3,-10
camera=CreateCamera(pivot)
CameraClsColor camera,0,75,151
light=CreateLight()
MeshLight=CreateSphere(6,light)
;ScaleMesh meshlight,0.3,0.3,0.3
EntityFX meshlight,1
AmbientLight 127,127,127
watermesh=LoadMesh("mesh/water.b3d")
sky=loadskybox()
testtex=CreateTexture(256,256,256)
SetBuffer TextureBuffer(testtex)
Color 127,127,127
Rect 0,0,128,128
Rect 128,128,128,128
Color 235,240,235
Rect 0,128,128,128
Rect 128,0,128,128
SetBuffer BackBuffer()
watertex=LoadTexture("maps/water.jpg")
SetCubeMode watertex,1
EntityTexture watermesh,watertex,0,1
EntityAlpha watermesh,0.95
mesh=watermesh
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
Dim plane#(qvert,10)
For i=0 To qvert-1
plane#(i,0)=VertexX(meshsurf,i) ;x
plane#(i,1)=VertexY(meshsurf,i) ;x
plane#(i,2)=VertexZ(meshsurf,i) ;x
Next
qtrian=CountTriangles(meshsurf)

For i=0 To qtrian-1
v0=TriangleVertex (meshsurf,i,0)
v1=TriangleVertex(meshsurf,i,1)
v2=TriangleVertex (meshsurf,i,2)
plane#(v0,9)=plane#(v0,9)+1
plane#(v1,9)=plane#(v1,9)+1
plane#(v2,9)=plane#(v2,9)+1
Next
Return watermesh
End Function

Function control(speed#,mousesensitivity#)
If KeyDown(2) WireFrame True Else WireFrame False
mxs#=mxs#+(MouseXSpeed()/5.0)
mys#=mys#+(MouseYSpeed()/5.0)
RotateEntity camera,mousesensitivity#*mys#,-mousesensitivity#*mxs#,0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
If KeyDown(17) Or KeyDown(200) MoveEntity camera,0,0,speed#
If KeyDown(31) Or KeyDown(208) MoveEntity camera,0,0,-speed#
If KeyDown(30) Or KeyDown(203) MoveEntity camera,-speed#,0,0
If KeyDown(32) Or KeyDown(205) MoveEntity camera,speed#,0,0
PositionEntity pivot,EntityX#(camera,1),EntityY#(camera,1),EntityZ#(camera,1)
PositionEntity camera,0,0,0
Text 100,10,"polygons in view "+TrisRendered()
If (MilliSecs()-timer3)<>0 Text 100,40,"Frames per second is: "+1000/(MilliSecs()-timer3)
End Function


Function LoadSkyBox(  )
    m=CreateMesh()
    ;front face
    b=LoadBrush( "maps\sky2_FR.jpg",49 )
    s=CreateSurface( m,b )
    AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
    AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
    AddTriangle s,0,1,2:AddTriangle s,0,2,3:
    FreeBrush b
    ;right face
    b=LoadBrush( "maps\sky2_LF.jpg",49 )
    s=CreateSurface( m,b )
    AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
    AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
    AddTriangle s,0,1,2:AddTriangle s,0,2,3
    FreeBrush b
    ;back face
    b=LoadBrush( "maps\sky2_BK.jpg",49 )
    s=CreateSurface( m,b )
    AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
    AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
    AddTriangle s,0,1,2:AddTriangle s,0,2,3
    FreeBrush b
    ;left face
    b=LoadBrush( "maps\sky2_RT.jpg",49 )
    s=CreateSurface( m,b )
    AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
    AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
    AddTriangle s,0,1,2:AddTriangle s,0,2,3
    FreeBrush b
    ;top face
    b=LoadBrush( "maps\sky2_UP.jpg",49 )
    s=CreateSurface( m,b )
    AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
    AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
    AddTriangle s,0,1,2:AddTriangle s,0,2,3
    FreeBrush b
    ;bottom face    
    b=LoadBrush( "maps\sky2_DN.jpg",49 )
    If b=0 b=CreateBrush (0,30,50)
    s=CreateSurface( m,b )
    AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
    AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
    AddTriangle s,0,1,2:AddTriangle s,0,2,3
    FreeBrush b
    ScaleMesh m,500,500,500
    FlipMesh m
    EntityFX m,1+8
    EntityOrder m,999
    Return m
End Function

Последний раз редактировалось SBJoker, 29.06.2011 в 23:52.
(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 00:23   #84
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

http://developer.nvidia.com/fx-composer Что вы можете сказать об этом? Или для нуба это как дать болгарку питекантропу?

O_o, на глаз запалил ошибку в своем коде, где тформлю вместо нормали вектор.
(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 00:29   #85
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Имитация водной поверхности.

Вообще такие инструменты это не очень то удобно, имхо. Но если все же хочется "удобной" среды разработки шейдеров, то лучше взять ATI RenderMonkey.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
maxturbo (30.06.2011)
Старый 30.06.2011, 00:54   #86
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Имитация водной поверхности.

Сообщение от h1dd3n Посмотреть сообщение
Вообще такие инструменты это не очень то удобно, имхо. Но если все же хочется "удобной" среды разработки шейдеров, то лучше взять ATI RenderMonkey.
RenderMonkey самое то
__________________
(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 02:35   #87
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Мне кажется или самый удобный способ производить в башке все манипуляции? А учиться шейдерам будет проще тыкая пальцем рабочий пока он не изменится предсказуемым образом?

Чето в нвидиа как в цупе О_о.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (30.06.2011)
Старый 30.06.2011, 02:56   #88
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Имитация водной поверхности.

Сообщение от dsd Посмотреть сообщение
Мне кажется или самый удобный способ производить в башке все манипуляции? А учиться шейдерам будет проще тыкая пальцем рабочий пока он не изменится предсказуемым образом?
Чето в нвидиа как в цупе О_о.
Пользуйся RenderMonkey, тупо тыкать? Ммм конечно не идеальный способ... Все же лучше почитать тебе по конкретней про назначение шейдеров (вертексные и пиксельные) только тогда поймешь Где то видел книгу очень хорошую по шейдерам, там описывают работу на программе RenderMonkey, поищи ее
__________________
(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 02:59   #89
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Имитация водной поверхности.

советую глянуть cg tutorial, gpu gems 1, 2, 3
(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 03:28   #90
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Имитация водной поверхности.

А я вот это советую
Shader
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо maxturbo за это полезное сообщение:
dsd (30.06.2011), }{@KeR (30.06.2011)
Ответ


Опции темы

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

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


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


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