Тема: Странное.
Показать сообщение отдельно
Старый 11.08.2012, 01:51   #451
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

в общем вроде баг хотя может опять мне кажется )

вот этот класс:


class bug{
public:
Engine *eng;
Scene *s;
int segments;
Entity *body;
Surface *surf;

bug(Scene *sc){
eng = Engine::Instance();
s=sc;
    segments=256;
    surf=CreateSurface(segments);
    body = s->Add(surf);
	StandartShaders::Render::OnlyNormals()->SetUniform(Shader::SU_LIGHTPOS,vec3(0,5,7));
    body->SetShader(StandartShaders::Render::OnlyNormals());
    body->SetPosition(-2,-2,-6);
}



Surface* CreateSurface(int segments)
{
Engine *eng = Engine::Instance();

    //считаю количество точек
    int count_vertices = (segments+1)*(segments+1);
    //считаю трианглы
    int count_indices = 3*segments*segments;

//создание поверхности
Surface *surf = eng->CreateSurface(count_vertices,count_indices);
surf->Lock();

//ставлю точки куда следует
int index=0;
for(int i=0;i<=segments;i++){
    for(int j=0;j<=segments;j++){
    vec3 position(i-0.5*segments,0,j-0.5*segments);
    vec3 normal(0,1,0);
    surf->SetVertexPosition(index,position);
    surf->SetVertexNormal(index,normal);
    surf->SetVertexTexCoord(index,0.01+0.97*i/(float)segments,0.01+0.97*j/(float)segments,0);
    index++;
    }}

//ставлю полигоны
int trian_index=0;
for(int i=0;i<segments;i++){
    for(int j=0;j<segments;j++){
    //вычисляю для текущей клетки индексы точек в углах
    int v0,v1,v2,v3;
    //i - текущий ряд // j-текущий столбец
    v0=i*(segments+1)+j;
    v1=v0+1;
    v2=v0+segments+1;
    v3=v2+1;
    surf->SetTriangle(trian_index,v0,v1,v2);
    trian_index++;
    surf->SetTriangle(trian_index,v1,v3,v2);
    trian_index++;
    }}
surf->RecalcTangents();
surf->UnLock();
return surf;
}

void Update(){

surf->Lock();

//ставлю точки куда следует
int index=0;
for(int i=0;i<=segments;i++){
    for(int j=0;j<=segments;j++){
    vec3 position(i-0.5*segments,0,j-0.5*segments);
    vec3 normal(0,1,0);
    surf->SetVertexPosition(index,position);
    surf->SetVertexNormal(index,normal);
    surf->SetVertexTexCoord(index,0.01+0.97*i/(float)segments,0.01+0.97*j/(float)segments,0);
    index++;
    }}
surf->UnLock();

}

};


создается там внутри поверхность.
потом вот этим методом делаю вид что переставил точки. вызываю его каждый кадр.
void Update(){

surf->Lock();

//ставлю точки куда следует
int index=0;
for(int i=0;i<=segments;i++){
    for(int j=0;j<=segments;j++){
    vec3 position(i-0.5*segments,0,j-0.5*segments);
    vec3 normal(0,1,0);
    surf->SetVertexPosition(index,position);
    surf->SetVertexNormal(index,normal);
    surf->SetVertexTexCoord(index,0.01+0.97*i/(float)segments,0.01+0.97*j/(float)segments,0);
    index++;
    }}
surf->UnLock();

}
В итоге оно сжирает всю память и падает. Как мне кажется это не есть хорошо.

Еще мои творения падают если текстуры назначать не по порядку.
в смысле если дать например на 0 слой любую, а потом на любой кроме 1 то приложение при запуске крэшится, хотя компилится без проблем.
плюс с назначением вторых текстурных координат какой-то странный косяк.

Последний раз редактировалось dsd, 14.11.2015 в 15:10.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (11.08.2012)