Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 15.09.2011, 16:35   #46
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Извраты имхо.

Если делать достойную систему как в Minecrafte, то юзать динамичный Octree и генерировать ингл сюрфейс, разбитый на чанки исходя из Octree. Сами Octree чанки содержат вершинные и индексные индексы. При рендере нужные (видимые) чанки будут совмещатьс и рендериться всё большего размера чанками, 32х32х32 например.
(Offline)
 
Ответить с цитированием
Старый 15.09.2011, 20:05   #47
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Господь с тобой Мока, не достойную, а отдаленно напоминающую.
(Offline)
 
Ответить с цитированием
Старый 15.09.2011, 23:03   #48
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

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

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

Читай что-то на тематику SVO (Sparse Voxel Octree).
(Offline)
 
Ответить с цитированием
Старый 15.09.2011, 23:24   #49
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Слющаю и повинуюсь, гуру прозревший мой замысел с одного взгляда и определивший всю ничтожность и глупость моей идеи, поиграться с классами более детально.
(Offline)
 
Ответить с цитированием
Старый 16.09.2011, 14:06   #50
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Эммм..
(Offline)
 
Ответить с цитированием
Старый 18.09.2011, 16:24   #51
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Странное.

Блин а чо все вдруг кинулись ландшафты генерить?? Рандом, я , теперь dsd...
(Offline)
 
Ответить с цитированием
Старый 18.09.2011, 20:16   #52
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Это сезонное, не все просто сознаются...
(Offline)
 
Ответить с цитированием
Старый 19.09.2011, 14:37   #53
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Это оно меня ко мне посылает или дальше?
(Offline)
 
Ответить с цитированием
Старый 19.09.2011, 15:20   #54
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Странное.

Сообщение от Павел Посмотреть сообщение
Блин а чо все вдруг кинулись ландшафты генерить?? Рандом, я , теперь 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
genroelgvozo
Нуждающийся
 
Регистрация: 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
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

хотя и медленнее
ну, не так уж и медленнее.
обращение к элементу - равноценно с обычным массивом по скорости
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
genroelgvozo (19.09.2011)
Старый 26.09.2011, 21:52   #57
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 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/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;

(Offline)
 
Ответить с цитированием
Старый 26.09.2011, 21:59   #58
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Странное.

какая-то сетка больно неоднородная. в максе geosphere получше будет.
(Offline)
 
Ответить с цитированием
Старый 26.09.2011, 22:13   #59
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 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/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;

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
moka (26.09.2011), Mr_F_ (26.09.2011)
Старый 27.09.2011, 13:48   #60
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

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

(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com