|
Xors3D Графический движок с поддержкой DirectX9 |
15.09.2011, 16:35
|
#46
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Странное.
Извраты имхо.
Если делать достойную систему как в Minecrafte, то юзать динамичный Octree и генерировать ингл сюрфейс, разбитый на чанки исходя из Octree. Сами Octree чанки содержат вершинные и индексные индексы. При рендере нужные (видимые) чанки будут совмещатьс и рендериться всё большего размера чанками, 32х32х32 например.
|
(Offline)
|
|
15.09.2011, 20:05
|
#47
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
Господь с тобой Мока, не достойную, а отдаленно напоминающую.
|
(Offline)
|
|
15.09.2011, 23:03
|
#48
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Странное.
Да хоть напоминающую. Достоинства в моём понимании, система которая будет достаточно шустра, и не будет ограничивать исходя из метода реализации. А это не просто.
Почему Octree, потому что это очень схоже с воксельными расчётами, каждый куб, есть по сути воксель. И используя Octree, это дело может быть весьма шустрым и динамичным.
Читай что-то на тематику SVO (Sparse Voxel Octree).
|
(Offline)
|
|
15.09.2011, 23:24
|
#49
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
Слющаю и повинуюсь, гуру прозревший мой замысел с одного взгляда и определивший всю ничтожность и глупость моей идеи, поиграться с классами более детально.
|
(Offline)
|
|
16.09.2011, 14:06
|
#50
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Странное.
Эммм..
|
(Offline)
|
|
18.09.2011, 16:24
|
#51
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Странное.
Блин а чо все вдруг кинулись ландшафты генерить?? Рандом, я , теперь dsd...
|
(Offline)
|
|
18.09.2011, 20:16
|
#52
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
Это сезонное, не все просто сознаются...
|
(Offline)
|
|
19.09.2011, 14:37
|
#53
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
Это оно меня ко мне посылает или дальше?
|
(Offline)
|
|
19.09.2011, 15:20
|
#54
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Странное.
Сообщение от Павел
Блин а чо все вдруг кинулись ландшафты генерить?? Рандом, я , теперь dsd...
|
Я ещё с прошлого лета генерю)
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
19.09.2011, 19:33
|
#55
|
Нуждающийся
Регистрация: 08.05.2008
Сообщений: 87
Написано 9 полезных сообщений (для 15 пользователей)
|
Ответ: Странное.
Вот кстати создание двумерного массива (привычного с двумя индексами) через кучу:
int n=100;
int** a=new int*[n];
for(int i=0;i<n;i++) a[i]=new int[n];
a[99][99]=5;
а вообще удобнее через вектор, хотя и медленнее (ну это когда как надо)
|
(Offline)
|
|
19.09.2011, 21:46
|
#56
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Странное.
ну, не так уж и медленнее.
обращение к элементу - равноценно с обычным массивом по скорости
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.09.2011, 21:52
|
#57
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
сфера без лишних точечек на полюсах... Правда из двух поверхностей...
Handle mCreateSphere(int segments) { Handle mesh=xCreateMesh(); Handle surf=xCreateSurface(mesh); //создание плоскости for(int i=0;i<=2*segments;i++){ for(int j=0;j<=2*segments;j++){ int v0=xAddVertex(surf,i,j,0); }} int qvert=xCountVertices(surf); for(int i=0;i<qvert-2*segments-1;i++){ int v0=i; int v1=i+1; int v2=i+2*segments+1; int v3=v2+1; if(v3<qvert && xMod(i,2*segments+1)!=2*segments){ xAddTriangle(surf,v1,v2,v3); xAddTriangle(surf,v0,v2,v1);}} //теперь выгибание плоскости по полусфере for(int i=0;i<qvert;i++){ double x=xVertexX(surf,i); double y=xVertexY(surf,i); double radius; if(fabs(x-segments)>fabs(y-segments)){radius=fabs(x-segments);} else {radius=fabs(y-segments);} x=x-segments; y=y-segments; double l=sqrt(x*x+y*y); if (l!=0){x=x/l; y=y/l;} y=y*sin(0.5*M_PI*radius/segments); x=x*sin(0.5*M_PI*radius/segments); double z=cos(0.5*M_PI*radius/segments); xVertexCoords(surf,i,x,y,z); xVertexNormal(surf,i,x,y,z); //половинка сферы готова } // вторая часть. Handle surf2=xCreateSurface(mesh); //создание плоскости for(int i=0;i<=2*segments;i++){ for(int j=0;j<=2*segments;j++){ int v0=xAddVertex(surf2,i,j,0); }} for(int i=0;i<qvert-2*segments-1;i++){ int v0=i; int v1=i+1; int v2=i+2*segments+1; int v3=v2+1; if(v3<qvert && xMod(i,2*segments+1)!=2*segments){ xAddTriangle(surf2,v2,v1,v3); xAddTriangle(surf2,v2,v0,v1);}} //теперь выгибание плоскости по полусфере for(int i=0;i<qvert;i++){ double x=xVertexX(surf2,i); double y=xVertexY(surf2,i); double radius; if(fabs(x-segments)>fabs(y-segments)){radius=fabs(x-segments);} else {radius=fabs(y-segments);} x=x-segments; y=y-segments; double l=sqrt(x*x+y*y); if (l!=0){x=x/l; y=y/l;} y=y*sin(0.5*M_PI*radius/segments); x=x*sin(0.5*M_PI*radius/segments); double z=-cos(0.5*M_PI*radius/segments); xVertexCoords(surf2,i,x,y,z); xVertexNormal(surf2,i,x,y,z);}
return mesh; }
|
(Offline)
|
|
26.09.2011, 21:59
|
#58
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Странное.
какая-то сетка больно неоднородная. в максе geosphere получше будет.
|
(Offline)
|
|
26.09.2011, 22:13
|
#59
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
Это совсем не геосфера, выпрямил решетку
И геосфера строится вообще не полюдски, меня все эти икосоэдры пугают пока
Handle mCreateSphere(int segments) { Handle mesh=xCreateMesh(); Handle surf=xCreateSurface(mesh); //создание плоскости for(int i=0;i<=2*segments;i++){ for(int j=0;j<=2*segments;j++){ int v0=xAddVertex(surf,i,j,0); }} int qvert=xCountVertices(surf); for(int i=0;i<qvert-2*segments-1;i++){ int v0=i; int v1=i+1; int v2=i+2*segments+1; int v3=v2+1; if(v3<qvert && xMod(i,2*segments+1)!=2*segments){
if(xVertexX(surf,i)>=segments && xVertexY(surf,i)<segments){ xAddTriangle(surf,v1,v2,v3); xAddTriangle(surf,v0,v2,v1);} if(xVertexX(surf,i)<segments && xVertexY(surf,i)>=segments){ xAddTriangle(surf,v1,v2,v3); xAddTriangle(surf,v0,v2,v1);} if(xVertexX(surf,i)>=segments && xVertexY(surf,i)>=segments){ xAddTriangle(surf,v0,v3,v1);xAddTriangle(surf,v2,v3,v0);} if(xVertexX(surf,i)<segments && xVertexY(surf,i)<segments){ xAddTriangle(surf,v0,v3,v1);xAddTriangle(surf,v2,v3,v0);} }}
//теперь выгибание плоскости по полусфере for(int i=0;i<qvert;i++){ double x=xVertexX(surf,i); double y=xVertexY(surf,i); double radius; if(fabs(x-segments)>fabs(y-segments)){radius=fabs(x-segments);} else {radius=fabs(y-segments);} x=x-segments; y=y-segments; double l=sqrt(x*x+y*y); if (l!=0){x=x/l; y=y/l;} y=y*sin(0.5*M_PI*radius/segments); x=x*sin(0.5*M_PI*radius/segments); double z=cos(0.5*M_PI*radius/segments); xVertexCoords(surf,i,x,y,z); xVertexNormal(surf,i,x,y,z); //половинка сферы готова } // вторая часть. Handle surf2=xCreateSurface(mesh); //создание плоскости for(int i=0;i<=2*segments;i++){ for(int j=0;j<=2*segments;j++){ int v0=xAddVertex(surf2,i,j,0); }} for(int i=0;i<qvert-2*segments-1;i++){ int v0=i; int v1=i+1; int v2=i+2*segments+1; int v3=v2+1; if(v3<qvert && xMod(i,2*segments+1)!=2*segments){ if(xVertexX(surf2,i)>=segments && xVertexY(surf2,i)<segments){ xAddTriangle(surf2,v2,v1,v3); xAddTriangle(surf2,v2,v0,v1);} if(xVertexX(surf2,i)<segments && xVertexY(surf2,i)>=segments){ xAddTriangle(surf2,v2,v1,v3); xAddTriangle(surf2,v2,v0,v1);} if(xVertexX(surf2,i)>=segments && xVertexY(surf2,i)>=segments){ xAddTriangle(surf2,v3,v0,v1);xAddTriangle(surf2,v3,v2,v0);} if(xVertexX(surf2,i)<segments && xVertexY(surf2,i)<segments){ xAddTriangle(surf2,v3,v0,v1);xAddTriangle(surf2,v3,v2,v0);} }} //теперь выгибание плоскости по полусфере for(int i=0;i<qvert;i++){ double x=xVertexX(surf2,i); double y=xVertexY(surf2,i); double radius; if(fabs(x-segments)>fabs(y-segments)){radius=fabs(x-segments);} else {radius=fabs(y-segments);} x=x-segments; y=y-segments; double l=sqrt(x*x+y*y); if (l!=0){x=x/l; y=y/l;} y=y*sin(0.5*M_PI*radius/segments); x=x*sin(0.5*M_PI*radius/segments); double z=-cos(0.5*M_PI*radius/segments); xVertexCoords(surf2,i,x,y,z); xVertexNormal(surf2,i,x,y,z);}
return mesh; }
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
|
|
27.09.2011, 13:48
|
#60
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
Мне кажется или на мою сферу текстура таки ровней накладывается?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:28.
|