![]() |
Колючий mesh
Вложений: 4
Короче, лучше один раз увидеть:
Вложение 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 З.Ы. Если вдруг соберетесь использовать функцию то лучше использовать ту что приведенена здесь, а не в примере, ибо там есть ошибка. |
Re: Колючий mesh
че не плохо :)
|
Re: Колючий mesh
Это для создания игры "Ёжик в тумане: Возвращение"?
Если серьёзно, то интересна разница в фпс между исходным мешем и колючим Насколько я монимаю, её быть не должно... Можно привести результаты? |
Re: Колючий mesh
Ize'g0re
разница минимальна |
Re: Колючий mesh
Нет, ето для игры ЁЁжиГГ3: Месть за Лисенка :lol:
разница должна быть, ибо каждый треугольник превращается в пирамиду без основания (три треугольника). |
Часовой пояс GMT +4, время: 11:03. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot