|
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
10.10.2006, 00:55
|
#1
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Колючий mesh
Короче, лучше один раз увидеть:
Вложение 1892
Скачать пример можно здесь
Вложение 1894
Вот сама функция:
Function CreateIgls(sm,height#=2.0)
;================================================= =================
;Function: CreateIgls(mesh,lenght)
;Параметры
;mesh - модель для которой надо сделать иглы
;Lenght - длина игл.
;Описание
;Создает для модели иглы. Возвращает указатель на модель содержащую иглы
;длина игл может быть равна 1 тогда игл ваще не будет, может быть отрицательной
;Autor :Олег Сапронов a.k.a. HolyDel
;Email: [email protected]
;Version:1
;Date: 2006.10.09
;================================================= =================
m=CreateMesh()
s=CreateSurface(m)
ss=GetSurface(sm,1)
For i=0 To CountTriangles(ss)-1
ssv0=TriangleVertex(ss,i,0)
ssv1=TriangleVertex(ss,i,1)
ssv2=TriangleVertex(ss,i,2)
ssv0x#=VertexX(ss,ssv0)
ssv0y#=VertexY(ss,ssv0)
ssv0z#=VertexZ(ss,ssv0)
ssv0u#=VertexU(ss,ssv0)
ssv0v#=VertexV(ss,ssv0)
ssv0w#=VertexW(ss,ssv0)
ssv0nx#=VertexNX(ss,ssv0)
ssv0ny#=VertexNY(ss,ssv0)
ssv0nz#=VertexNZ(ss,ssv0)
ssv1x#=VertexX(ss,ssv1)
ssv1y#=VertexY(ss,ssv1)
ssv1z#=VertexZ(ss,ssv1)
ssv1u#=VertexU(ss,ssv1)
ssv1v#=VertexV(ss,ssv1)
ssv1w#=VertexW(ss,ssv1)
ssv1nx#=VertexNX(ss,ssv1)
ssv1ny#=VertexNY(ss,ssv1)
ssv1nz#=VertexNZ(ss,ssv1)
ssv2x#=VertexX(ss,ssv2)
ssv2y#=VertexY(ss,ssv2)
ssv2z#=VertexZ(ss,ssv2)
ssv2u#=VertexU(ss,ssv2)
ssv2v#=VertexV(ss,ssv2)
ssv2w#=VertexW(ss,ssv2)
ssv2nx#=VertexNX(ss,ssv0)
ssv2ny#=VertexNY(ss,ssv0)
ssv2nz#=VertexNZ(ss,ssv0)
ssnvx#=(ssv0x#+ssv1x#+ssv2x#)/3.0*height
ssnvy#=(ssv0y#+ssv1y#+ssv2y#)/3.0*height
ssnvz#=(ssv0z#+ssv1z#+ssv2z#)/3.0*height
ssnvu#=(ssv0u#+ssv1u#+ssv2u#)/3.0
ssnvv#=(ssv0v#+ssv1v#+ssv2v#)/3.0
ssnvw#=(ssv0w#+ssv1w#+ssv2w#)/3.0
ssnvnx=(ssv0nx#+ssv1nx#+ssv2nx#)/3.0
ssnvny=(ssv0ny#+ssv1ny#+ssv2ny#)/3.0
ssnvnz=(ssv0nz#+ssv1nz#+ssv2nz#)/3.0
nv0=AddVertex(s,ssv0x,ssv0y,ssv0z,ssv0u,ssv0v,ssv0 w)
nv1=AddVertex(s,ssv1x,ssv1y,ssv1z,ssv1u,ssv1v,ssv1 w)
nv2=AddVertex(s,ssv2x,ssv2y,ssv2z,ssv2u,ssv2v,ssv2 w)
nv=AddVertex(s,ssnvx,ssnvy,ssnvz,ssnvu,ssnvv,ssnvw )
VertexNormal(s,nv0,ssv0nx,ssv0ny,ssv0nz)
VertexNormal(s,nv1,ssv1nx,ssv1ny,ssv1nz)
VertexNormal(s,nv2,ssv2nx,ssv2ny,ssv2nz)
VertexNormal(s,nv,ssnvnx,ssnvny,ssnvnz)
AddTriangle(s,nv0,nv,nv2)
AddTriangle(s,nv1,nv,nv0)
AddTriangle(s,nv2,nv,nv1)
Next
UpdateNormals m
Return m
End Function
А вот функция создающая плоское кольцо:
Function createring(r1#=1,r2#=2,seg=16,dual=0)
;================================================= =================
;Function: CreateRing(r1#,r2#,seg,dual)
;Параметры
;r1 - внутренний радиус
;r2 - внешний радиус
;seg - количество сегментов
;dual - если 1, то кольцо будет двусторонним
;Описание
;Создает плоское кольцо. Возвращает указатель на модель кольца
;Autor :Олег Сапронов a.k.a. HolyDel
;Email: [email protected]
;Version:1
;Date: 2006.10.09
;================================================= =================
da#=360/seg
a#=0
m=CreateMesh()
s=CreateSurface(m)
vx1#=Sin(a)*r1
vx2#=Sin(a)*r2
vz1#=Cos(a)*r1
vz2#=Cos(a)*r2
v0=AddVertex(s,vx1,0,vz1)
v1=AddVertex(s,vx2,0,vz2)
fv0=v0
fv1=v1
While a<360-da
a=a+da#
vx1#=Sin(a)*r1
vx2#=Sin(a)*r2
vz1#=Cos(a)*r1
vz2#=Cos(a)*r2
v2=AddVertex(s,vx1,0,vz1)
v3=AddVertex(s,vx2,0,vz2)
AddTriangle(s,v1,v3,v0)
AddTriangle(s,v3,v2,v0)
If dual
AddTriangle(s,v3,v1,v0)
AddTriangle(s,v2,v3,v0)
EndIf
v0=v2
v1=v3
Wend
vx1#=Sin(a)*r1
vx2#=Sin(a)*r2
vz1#=Cos(a)*r1
vz2#=Cos(a)*r2
v2=AddVertex(s,vx1,0,vz1)
v3=AddVertex(s,vx2,0,vz2)
AddTriangle(s,fv1,fv0,v2)
AddTriangle(s,v2,v3,fv1)
If dual
AddTriangle(s,fv0,fv1,v2)
AddTriangle(s,v3,v2,fv1)
EndIf
UpdateNormals m
Return m
End Function
З.Ы. Если вдруг соберетесь использовать функцию то лучше использовать ту что приведенена здесь, а не в примере, ибо там есть ошибка.
|
(Offline)
|
|
10.10.2006, 01:01
|
#2
|
|
Re: Колючий mesh
че не плохо
|
|
|
22.02.2007, 14:17
|
#3
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Re: Колючий mesh
Это для создания игры "Ёжик в тумане: Возвращение"?
Если серьёзно, то интересна разница в фпс между исходным мешем и колючим
Насколько я монимаю, её быть не должно... Можно привести результаты?
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
22.02.2007, 14:31
|
#4
|
|
Re: Колючий mesh
Ize'g0re
разница минимальна
|
|
|
23.02.2007, 01:37
|
#5
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Колючий mesh
Нет, ето для игры ЁЁжиГГ3: Месть за Лисенка
разница должна быть, ибо каждый треугольник превращается в пирамиду без основания (три треугольника).
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:27.
|