forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Странное. (http://forum.boolean.name/showthread.php?t=15405)

moka 15.09.2011 16:35

Ответ: Странное.
 
Извраты имхо.

Если делать достойную систему как в Minecrafte, то юзать динамичный Octree и генерировать ингл сюрфейс, разбитый на чанки исходя из Octree. Сами Octree чанки содержат вершинные и индексные индексы. При рендере нужные (видимые) чанки будут совмещатьс и рендериться всё большего размера чанками, 32х32х32 например.

dsd 15.09.2011 20:05

Ответ: Странное.
 
Господь с тобой Мока, не достойную, а отдаленно напоминающую.

moka 15.09.2011 23:03

Ответ: Странное.
 
Да хоть напоминающую. Достоинства в моём понимании, система которая будет достаточно шустра, и не будет ограничивать исходя из метода реализации. А это не просто.

Почему Octree, потому что это очень схоже с воксельными расчётами, каждый куб, есть по сути воксель. И используя Octree, это дело может быть весьма шустрым и динамичным.

Читай что-то на тематику SVO (Sparse Voxel Octree).

dsd 15.09.2011 23:24

Ответ: Странное.
 
Слющаю и повинуюсь, гуру прозревший мой замысел с одного взгляда и определивший всю ничтожность и глупость моей идеи, поиграться с классами более детально.

moka 16.09.2011 14:06

Ответ: Странное.
 
Эммм..

Reizel 18.09.2011 16:24

Ответ: Странное.
 
Блин а чо все вдруг кинулись ландшафты генерить?? Рандом, я , теперь dsd...

dsd 18.09.2011 20:16

Ответ: Странное.
 
Это сезонное, не все просто сознаются...

dsd 19.09.2011 14:37

Ответ: Странное.
 

Это оно меня ко мне посылает или дальше?

Randomize 19.09.2011 15:20

Ответ: Странное.
 
Цитата:

Сообщение от Павел (Сообщение 202557)
Блин а чо все вдруг кинулись ландшафты генерить?? Рандом, я , теперь dsd...

Я ещё с прошлого лета генерю)

genroelgvozo 19.09.2011 19:33

Ответ: Странное.
 
Вот кстати создание двумерного массива (привычного с двумя индексами) через кучу:
Код:

int n=100;
int** a=new int*[n];
for(int i=0;i<n;i++) a[i]=new int[n];
a[99][99]=5;

а вообще удобнее через вектор, хотя и медленнее (ну это когда как надо)

HolyDel 19.09.2011 21:46

Ответ: Странное.
 
Цитата:

хотя и медленнее
ну, не так уж и медленнее.
обращение к элементу - равноценно с обычным массивом по скорости

dsd 26.09.2011 21:52

Ответ: Странное.
 
сфера без лишних точечек на полюсах... Правда из двух поверхностей...


PHP код:

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/ly=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/ly=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;



Mr_F_ 26.09.2011 21:59

Ответ: Странное.
 
какая-то сетка больно неоднородная. в максе geosphere получше будет.

dsd 26.09.2011 22:13

Ответ: Странное.
 
Это совсем не геосфера, выпрямил решетку :)
И геосфера строится вообще не полюдски, меня все эти икосоэдры пугают пока:)

PHP код:

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/ly=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/ly=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;



dsd 27.09.2011 13:48

Ответ: Странное.
 
Мне кажется или на мою сферу текстура таки ровней накладывается?



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

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