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

Fant 14.03.2007 20:30

Деформация сферы
 
Я задумал сделать камень, но для этого нужно как-то деформировать сферу.

Поспрашивав, и почитав немного хелп, я понял, что в хелпе искать нечего... (вернее там есть все, но я не ЗНАЮ что искать)

Вообщем-то я даже не знаю что использовать, что бы деформировать объект, но мне сказали, что это долго и нудно!

Если есть ктр-нибудь, кто знает как это сделать, покажите как это сделать пожалуйста!

johnk 14.03.2007 20:35

Re: Деформация сферы
 
Тебе нужен 3DS Max. Деформируешь сферу модификатором FFD (оч. просто) И придаешь эффект камня с помощью Noise. Или можно просто с параметрами Noise поэкспериментировать, и не применять FFD.Все! Если хочешь, могу сделать...

Fant 14.03.2007 20:45

Re: Деформация сферы
 
Цитата:

Сообщение от JohnK
Тебе нужен 3DS Max. Деформируешь сферу модификатором FFD (оч. просто) И придаешь эффект камня с помощью Noise. Или можно просто с параметрами Noise поэкспериментировать, и не применять FFD.Все! Если хочешь, могу сделать...

спасибо за оперативный ответ!

забыл дописать!
СРЕДСТВАМИ БЛИЦ

А в max это не проблема, конечно!

johnk 14.03.2007 20:47

Re: Деформация сферы
 
Лично я считаю, что работа с моделями средствами Блиц, очень трудно...проще в максе сваять...но я могу ошибаться...Ну если решишься, то посмотри Хэлп -> 3D -> Поверхность (Surface). Сам не пробовал, так что не могу ни чем помочь...

Fant 14.03.2007 20:54

Re: Деформация сферы
 
Цитата:

Сообщение от JohnK
Лично я считаю, что работа с моделями средствами Блиц, очень трудно...проще в максе сваять...но я могу ошибаться...Ну если решишься, то посмотри Хэлп -> 3D -> Поверхность (Surface)

Ты обсолютно прав, но тем не менее я бы хотел научиться деформировать сферу.

Diplomat 14.03.2007 21:07

Re: Деформация сферы
 
Модификатор Noise в Блице иммитировать несложно. Достаточно пройтись по всем сурфейсам меша (CountSurfaces, GetSurface) и сдвинуть вертексы на некую величину, несущую элемент случайности (VertexCoords, Rnd).

Добавлено:

Забыл, UpdateNormals очень не помешает, если в сцене есть источники света.

Кроме того, такой алгоритм не будет полноценной заменой Нойсу, да и для камня больше подойдёт геосфера, а не сфера. Исходник по программному созданию геосферы в Блице- существует.

Черный крыс 14.03.2007 21:21

Re: Деформация сферы
 
Деформировать сферу можно так: ScaleEntity(sphera,5,1,5) и фсе! =)

johnk 14.03.2007 21:24

Re: Деформация сферы
 
Вспомнил! Тебе еще может помочь команда FitMesh mesh,x#,y#,z#,width#,height#,depth#[,uniform]! Я сейчас искал пример, реализации деформации сферы, но так и не нашел....продолжаю исать...

HolyDel 14.03.2007 21:44

Re: Деформация сферы
 
Поддерживаю Дипломата, и скажу ишо раз - Сферу блитзовскую не сдеформируеш в камеь. Придецца создавать геосферу средствами блитза что геморно.
Проще наверное сразу камень? Дипломат, как считаеш?

Fant 14.03.2007 22:03

Re: Деформация сферы
 
Всем спасибо за объяснение!
Dimlomat:
не мог бы ты мне как особо умному привести примерчик?

Diablo1909
Гы =) УМНО))

HolyDel
Мне не нужно супер красиво! Мне бы что-нибудь по-проще!

JohnK
Если найдешь - тебе респект!

moka 14.03.2007 23:35

Re: Деформация сферы
 
Фант, я в проектах делал пост "Destruction Sphere", если его смотрел, то там была такая фича: чем меньше хп, тем скуднее тачка цветом, и форма помятая. А если взорвать, то вообще мятая сильно =).

Вот пример (пишу в броузере):

[blitz]Function MeshNoise(Mesh,vS#)
sCnt=CountSurfaces(Mesh)
For n=1 to sCnt
Surface=GetSurface(Mesh,n)
vCnt=CountVertices(Surface)
For v=0 to vCnt
VertexCoords Surface,v,VertexX(Surface,v)+Rnd(-vS,vS),VertexY(Surface,v)+Rnd(-vS,vS),VertexZ(Surface,v)+Rnd(-vS,vS)
Next
Next
End Function[/blitz]

vS - это сила нойса.

На этой основе можно делать разнообразные деформации, всякие, просто вместо рандомности использовать можно и другие значения.

jimon 15.03.2007 00:27

Re: Деформация сферы
 
помойму ет даже в стандартных примерах блица было

moka 15.03.2007 00:34

Re: Деформация сферы
 
Да что-то насчёт нахождения и операций над вертексами било =), дык всёже нужно же помочь. :)

johnk 15.03.2007 11:48

Re: Деформация сферы
 
Нашел что-то похожее на Noise:
Код:

;set up
Graphics3D 640,480,16,2
camera=CreateCamera()
PositionEntity camera,0,0,-3
light=CreateLight()
RotateEntity light,45,45,0

;any mesh with enough verts
mymesh = CreateSphere(12)
EntityShininess mymesh,1

While Not KeyHit(1)
    RippleMesh(mymesh,1,20,0.01)
    UpdateWorld
    RenderWorld
    Flip
Wend
End

;mesh is your mesh
;speed is how fast it ripples
;density is how fine the effect is (experiment to see how much of the mesh you affect)
;depth is how much it ripples

Function ripplemesh(mesh,speed#,density#,depth#)
    count=MilliSecs()*speed
    For scount=1 To CountSurfaces(mesh)
        surface = GetSurface(mesh,scount)
        numverts=CountVertices(surface)-1
        For i=0 To numverts
            a#=Cos(count+(i*density))*speed
            b#=Sin(count+(i*density))*speed
            c#=-b;Sin(count+(i*density))*speed
            nx#=VertexNX(surface,i)*depth
            ny#=VertexNY(surface,i)*depth
            nz#=VertexNZ(surface,i)*depth           
            x#=VertexX(surface,i)
            y#=VertexY(surface,i)
            z#=VertexZ(surface,i)       
            VertexCoords surface,i,x#+(a*nx),y#+(b*ny),z#+(c*nz)
        Next
    Next
End Function

Если поймешь принцип, камень тебе обеспечен!

Fant 15.03.2007 13:54

Re: Деформация сферы
 
Спасибо, хороший пример!

Вот только без "комментов" тут не обойтись, конечно!

johnk 15.03.2007 15:15

Re: Деформация сферы
 
Пример делал не я, так что сам немного не понимаю код.
Могу только сказать,то что на mesh'e пересчитываються вертексы, командой CountVertices, а затем производится манипуляция mesh'ом командой VertexCoords. Вроде все.

ЛысыЙ_Чук-Иванчук 15.03.2007 15:49

Re: Деформация сферы
 
Круглые камни форева:)
А лутше сделай в 3д максе(красиво, просто, бысто(и полики сыканомиш))

johnk 15.03.2007 15:51

Re: Деформация сферы
 
2vlad с тобой солидарен, но Fant уже отвечал, что хочет в Блице камни научиться делать.

Fant 15.03.2007 16:12

Re: Деформация сферы
 
Цитата:

Сообщение от JohnK
Пример делал не я, так что сам немного не понимаю код.
Могу только сказать,то что на mesh'e пересчитываються вертексы, командой CountVertices, а затем производится манипуляция mesh'ом командой VertexCoords. Вроде все.

Я в принципе примерно так и понимаю...

ТОгда как будет время постараюсь методом тыка сделать то, что мне нужно. Если так не получится, то сюда снова напишу

Fant 15.03.2007 16:15

Re: Деформация сферы
 
Цитата:

Сообщение от vlad
Круглые камни форева:)
А лутше сделай в 3д максе(красиво, просто, бысто(и полики сыканомиш))

В природе круглых камней не бывает...это фантастика!

johnk 15.03.2007 19:37

Re: Деформация сферы
 
Fant, Тебе надо поэкспериментировать с density и depth.

Fant 15.03.2007 22:28

Re: Деформация сферы
 
Цитата:

Сообщение от JohnK
Fant, Тебе надо поэкспериментировать с density и depth.

я вернусь к этому вопросу, если мне что-то будет непонятно, как только опять переделаю систему "движения"

tormoz 15.03.2007 23:04

Re: Деформация сферы
 
в 2002 году делал астероидный пояс:

Цитата:

For sr=1 To CountSurfaces(sp\en)
surf=GetSurface(sp\en,sr)
For a=0 To CountVertices(surf)-1
VertexCoords surf,a,VertexX#(surf,a)+Rnd(-.5,.5),VertexY#(surf,a)+Rnd(-.5,.5),VertexZ#(surf,a)+Rnd(-.5,.5)
col=Rnd(0,1)

VertexColor surf,a,col*100,col*200,col*200
Next
Next

HolyDel 16.03.2007 21:57

Re: Деформация сферы
 
Цитата:

HolyDel
Мне не нужно супер красиво! Мне бы что-нибудь по-проще!
я о том, что если програмно делать геосферу, то лутче сразу вертексы ставить с елементами случайности, чем создавать геосферу (правильную) а потом на нее накладывать шум.

johnk 05.06.2007 20:16

Re: Деформация сферы
 
Наконец то нашел тот семпл :) Вот код:
Код:

; CameraPick/ pickedsurface()/ pickedtriange() Demo
; [email protected]
; http://www.birdie72.freeserve.co.uk
;

Graphics3D 640,480
SetBuffer BackBuffer()
piv=CreatePivot()
cam=CreateCamera(piv)
PositionEntity cam,0,0,-10

lit=CreateLight()
TurnEntity lit,25,55,0

sp=CreateSphere(10)
EntityPickMode sp,2
EntityFX sp,2
ScaleMesh sp,4,3,3

;Random paint of vertices
Color_Mesh(sp)

sp2=CreateSphere(10)
PositionEntity sp2,0,4,0
EntityPickMode sp2,2
EntityFX sp2,2
ScaleMesh sp2,2,1,2

;Random paint of vertices
Color_Mesh(sp2)

While Not KeyDown(1)
    TurnEntity sp,0,.2,0
    TurnEntity sp2,0,-.2,0
    ent=CameraPick(cam,MouseX(),MouseY())
    If KeyDown(203) TurnEntity piv,0,1,0
    If KeyDown(205) TurnEntity piv,0,-1,0
    If KeyDown(200) TurnEntity piv,1,0,0
    If KeyDown(208) TurnEntity piv,-1,0,0

    If KeyDown(44) MoveEntity cam,0,0,-.2
    If KeyDown(30) MoveEntity cam,0,0,.2
    If KeyHit(2) Then wire=1-wire
    WireFrame wire
    UpdateWorld
    RenderWorld
    If ent<>0 Then
        surf=PickedSurface()
        tria=PickedTriangle()
        If MouseDown(1) Then
            v0=TriangleVertex(surf,tria,0)
            v1=TriangleVertex(surf,tria,1)
            v2=TriangleVertex(surf,tria,2)
            x0#=VertexX(surf,v0)+(VertexNX(surf,v0)*.005)
            x1#=VertexX(surf,v1)+(VertexNX(surf,v1)*.005)
            x2#=VertexX(surf,v2)+(VertexNX(surf,v2)*.005)
            y0#=VertexY(surf,v0)+(VertexNY(surf,v0)*.005)
            y1#=VertexY(surf,v1)+(VertexNY(surf,v1)*.005)
            y2#=VertexY(surf,v2)+(VertexNY(surf,v2)*.005)
            z0#=VertexZ(surf,v0)+(VertexNZ(surf,v0)*.005)
            z1#=VertexZ(surf,v1)+(VertexNZ(surf,v1)*.005)
            z2#=VertexZ(surf,v2)+(VertexNZ(surf,v2)*.005)
            VertexCoords surf,v0,x0,y0,z0
            VertexCoords surf,v1,x1,y1,z1
            VertexCoords surf,v2,x2,y2,z2
        End If
        If MouseHit(2)
            v0=TriangleVertex(surf,tria,0)
            v1=TriangleVertex(surf,tria,1)
            v2=TriangleVertex(surf,tria,2)
            VertexColor surf,v0,Rnd(255),Rnd(255),Rnd(255)
            VertexColor surf,v1,Rnd(255),Rnd(255),Rnd(255)
            VertexColor surf,v2,Rnd(255),Rnd(255),Rnd(255)
        End If
    End If
    Plot MouseX(),MouseY()
    Text 0,0,"Click left mouse on an entity to swell it at that point"
    Text 0,15,"Click right mouse on an entity to paint the vertices of that triangle"
    Text 0,30,"Press 1 to toggle wireframe"
    Text 0,45,"Cursors to rotate camera"
    Text GraphicsWidth()/2,GraphicsHeight()-32,"Ent:"+ent+" Surf:"+surf+" Triangle:"+tria,1,0
    Flip
Wend

FreeEntity sp2
FreeEntity sp
EndGraphics
End

;Random paint of vertices
Function Color_Mesh(mesh)
    For s=1 To CountSurfaces(mesh)
        surf=GetSurface(mesh,s)
        For a=0 To CountVertices(surf)-1
            VertexColor surf,a,Rnd(255),Rnd(255),Rnd(255)
        Next
    Next
End Function



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

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