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)

dsd 06.08.2012 13:19

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

Сообщение от HolyDel (Сообщение 235242)
сэмплеры называются фиксированными именами:
Код:

sampler2D texture0
sampler2D texture1
sampler2D texture2
...
sampler2D texture31

в клиентском коде текстура задается к ентити или материалу так:
Код:

ent->SetTexture(some_texture,0);
вот второй параметр и связывает текстуру с семплером в шейдере.

тащемта я о чем то таком как в хлсл спрашивал:
Код:

texturediffuseTexture : TEXTURE_0;  // текстура
// описываемsampler
sampler diffuseSampler =sampler_state
{
Texture = <diffuseTexture>; // привязываем текстуру
// устанавливаем адресацию координат
AddressU= WRAP;
AddressV= WRAP;
AddressW= WRAP;
// устанавливаем фильтрацию
MinFilter= ANISOTROPIC;
MagFilter= ANISOTROPIC;
MipFilter= ANISOTROPIC;
// устанавливаем уровень фильтрации
MaxAnisotropy= 4;
};


HolyDel 06.08.2012 13:29

Ответ: Странное.
 
в glsl такого нет.
настройки сэмплера задются в клиентском коде:
Код:

tex->SetRepearMode
->SetFilter

и т.д.

уровень анизотропной фильтрации пока можно задать только при создании текстуры

dsd 11.08.2012 01:51

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

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

Код:



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 то приложение при запуске крэшится, хотя компилится без проблем.
плюс с назначением вторых текстурных координат какой-то странный косяк.

HolyDel 11.08.2012 09:51

Ответ: Странное.
 
Я сейчас в отпуске. Вернусь _ обязательно разберусь

dsd 12.08.2012 22:52

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

Прикола ради сделал плоскость на которую накладывается шум шейдером.
Плюс генерируется новый шум при перемещении камеры на 60 единиц от позиции плоскости. И кажется мне что примерно так террэйн делать и следует :)

Кстати, почему на текстурной координате = 0 читается значение из 1 и наоборот?
http://rghost.ru/land.zip

dsd 13.08.2012 19:35

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

Таки сделал бесшовную карту. Таки считает теперь само себе нормали и таки работает. И таки в сто раз проще по коду чем было бы в хорсе.:-D

при этом пиксельный шейдер фактически нетронут :) :
PHP код:

uniform sampler2D texture0;

in vec3 fragmentn;
in vec2 fragmentuv;
in vec3 lightvec;

out vec4 color;

void main(void) {
float diff dot(fragmentn,normalize(lightvec));
color texture(texture0,fragmentuv)*diff;



HolyDel 13.08.2012 21:47

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

Кстати, почему на текстурной координате = 0 читается значение из 1 и наоборот?
хз. надо посмотреть.

Цитата:

Таки сделал бесшовную карту. Таки считает теперь само себе нормали и таки работает. И таки в сто раз проще по коду чем было бы в хорсе.
круто. уважаю.

pax 14.08.2012 11:09

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

Сообщение от dsd (Сообщение 236149)
Таки сделал бесшовную карту. Таки считает теперь само себе нормали и таки работает. И таки в сто раз проще по коду чем было бы в хорсе.:-D

Требует OpenCL.dll

dsd 14.08.2012 13:26

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

Сообщение от pax (Сообщение 236185)
Требует OpenCL.dll

Вроде как эта длл с драйверами видеокарты поставиться должна была:dontknow:

pax 14.08.2012 13:29

Ответ: Странное.
 
Вложений: 1
Черный экран. Встроеное видео в Core i5.

dsd 14.08.2012 13:31

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

Сообщение от pax (Сообщение 236194)
Черный экран. Встроеное видео в Core i5.

Это уже не ко мне :)) так то я с движком ничего особенного не делал :)

pax 14.08.2012 13:34

Ответ: Странное.
 
а почему демки/тесты для акселинкса в разделе ксорса кстати?

dsd 14.08.2012 13:37

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

Сообщение от pax (Сообщение 236198)
а почему демки/тесты для акселинкса в разделе ксорса кстати?

Лень новое название темы придумывать. Ну а так в разделе с++ наверно это быть должно.

HolyDel 14.08.2012 13:53

Ответ: Странное.
 
Требует OpenCL.dll

Странно. Последнем версии вроде должны были без зависимостей от опенсиэль
Возможно, сборка. Под. Мингв. Кривовата

dsd 14.08.2012 22:28

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


теперь под 085 версией.
Немножко усложнил пиксельный шейдер.
теперь камера по поверхности террэйна ходит.
вроде поприкольней стало.

Только почему то вывод текста перестал работать.
Код:

                ground->Update();
                cam->Update();
                c->Clear();
                s->Render();
                c->SetBlendMode(BM_ALPHA);
                c->SetPosition(10,10);
                c->Print(L"fps: %d",eng->GetStatistics()->GetFPS());
                c->SetPosition(10,20);
                c->Print(L"tris: %d",eng->GetStatistics()->TrisRendered());
                c->SetPosition(10,45);
                c->Print(L"wtf?: %f",ground->GetY_Land(10,10));
                wnd->Flip();

Зы: а где можно про тесселяцию пример посмотреть?

pax 14.08.2012 23:26

Ответ: Странное.
 
На GeForce 9600 GT идет хорошо. На краях террейна глюки запланированы?)

dsd 14.08.2012 23:45

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

Сообщение от pax (Сообщение 236277)
На GeForce 9600 GT идет хорошо.

ну оно на ноуте под 700 фпс дает, а ноут у меня не особо то резвый. плюс то что карту шума делает вообще без оптимизаций :)

Цитата:

Сообщение от pax (Сообщение 236277)
На краях террейна глюки запланированы?)

Неа, не запланированы. Это оно по краям читает противоположный край текстуры зачем то. но это лечится небольшим сжатием текстурных координат:
вместо surf->SetVertexTexCoord(index,i/(float)segments,j/(float)segments,0);

вот так сделать и ок :
surf->SetVertexTexCoord(index,0.01f+0.98f*i/(float)segments,0.01f+0.98f*j/(float)segments,0);

HolyDel 15.08.2012 13:30

Ответ: Странное.
 
Чтобы не брало с края текстуры - можно задать clamp фильтрацию у текстуры.

dsd 02.11.2012 01:59

Ответ: Странное.
 
Вложений: 1
зачем то сделал класс который трехмерный массив из 0 и 1 рисует кубиками, одной поверхностью...

Код:


float rand(float min, float max)
{
 return (max-min)*rand()/(float)RAND_MAX;
}



class chunk_Surf
    {
    /*
    Это из трехмерного массива может сделать меш
    */
    public:

    //variables place

    Handle mesh;
    Handle surf;
    Handle tex;
    int size;
    int * test_data;


    //func place
chunk_Surf()
    {
        tex=xLoadTexture("media/1.jpg");
        size = 16;
        test_data = new int [ size * size * size ];
        for ( int i = 0; i < size * size * size; i ++ )
        {
          test_data[ i ] =(int) floor(rand( 0 , 2 ));
        }



        mesh = xCreateMesh();
        surf = xCreateSurface(mesh);

        for(int i=0; i<size; i++)
            {
        for(int j=0; j<size; j++)
            {
        for(int k=0; k<size; k++)
            {
                make_cube(i,j,k);
            }}}


        xPositionEntity(mesh,3,0,3);
        xEntityTexture(mesh,tex);
    }

void make_cube(int a, int b, int c){

            {
                int _x=0,_y=0,_z=1;
                if(diff(a,b,c,_x,_y,_z)==1)
                {
                            int v0 = xAddVertex(surf, a, b, c+1);
                            int v1 = xAddVertex(surf, a+1, b, c+1);
                            int v2 = xAddVertex(surf, a, b+1, c+1);
                            int v3 = xAddVertex(surf, a+1, b+1, c+1);

                                xVertexNormal(surf,v0,_x,_y,_z);
                                xVertexNormal(surf,v1,_x,_y,_z);
                                xVertexNormal(surf,v2,_x,_y,_z);
                                xVertexNormal(surf,v3,_x,_y,_z);

                                xVertexTexCoords(surf,v0,0,0);
                                xVertexTexCoords(surf,v1,1,0);
                                xVertexTexCoords(surf,v2,0,1);
                                xVertexTexCoords(surf,v3,1,1);

                            xAddTriangle(surf,v0,v1,v2);
                            xAddTriangle(surf,v3,v2,v1);
                }

                _x=0,_y=0,_z=-1;
                if(diff(a,b,c,_x,_y,_z)==1)
                {
                            int v0 = xAddVertex(surf, a, b, c);
                            int v1 = xAddVertex(surf, a+1, b, c);
                            int v2 = xAddVertex(surf, a, b+1, c);
                            int v3 = xAddVertex(surf, a+1, b+1, c);

                                xVertexNormal(surf,v0,_x,_y,_z);
                                xVertexNormal(surf,v1,_x,_y,_z);
                                xVertexNormal(surf,v2,_x,_y,_z);
                                xVertexNormal(surf,v3,_x,_y,_z);

                                xVertexTexCoords(surf,v0,0,0);
                                xVertexTexCoords(surf,v1,1,0);
                                xVertexTexCoords(surf,v2,0,1);
                                xVertexTexCoords(surf,v3,1,1);

                            xAddTriangle(surf,v0,v2,v1);
                            xAddTriangle(surf,v3,v1,v2);
                }

                _x=0,_y=1,_z=0;
                if(diff(a,b,c,_x,_y,_z)==1)
                {
                            int v0 = xAddVertex(surf, a, b+1, c);
                            int v1 = xAddVertex(surf, a+1, b+1, c);
                            int v2 = xAddVertex(surf, a, b+1, c+1);
                            int v3 = xAddVertex(surf, a+1, b+1, c+1);

                                xVertexNormal(surf,v0,_x,_y,_z);
                                xVertexNormal(surf,v1,_x,_y,_z);
                                xVertexNormal(surf,v2,_x,_y,_z);
                                xVertexNormal(surf,v3,_x,_y,_z);

                                xVertexTexCoords(surf,v0,0,0);
                                xVertexTexCoords(surf,v1,1,0);
                                xVertexTexCoords(surf,v2,0,1);
                                xVertexTexCoords(surf,v3,1,1);

                            xAddTriangle(surf,v0,v2,v1);
                            xAddTriangle(surf,v3,v1,v2);
                }

                _x=0,_y=-1,_z=0;
                if(diff(a,b,c,_x,_y,_z)==1)
                {
                            int v0 = xAddVertex(surf, a, b, c);
                            int v1 = xAddVertex(surf, a+1, b, c);
                            int v2 = xAddVertex(surf, a, b, c+1);
                            int v3 = xAddVertex(surf, a+1, b, c+1);

                                xVertexNormal(surf,v0,_x,_y,_z);
                                xVertexNormal(surf,v1,_x,_y,_z);
                                xVertexNormal(surf,v2,_x,_y,_z);
                                xVertexNormal(surf,v3,_x,_y,_z);

                                xVertexTexCoords(surf,v0,0,0);
                                xVertexTexCoords(surf,v1,1,0);
                                xVertexTexCoords(surf,v2,0,1);
                                xVertexTexCoords(surf,v3,1,1);

                            xAddTriangle(surf,v0,v1,v2);
                            xAddTriangle(surf,v3,v2,v1);
                }

                _x=1,_y=0,_z=0;
                if(diff(a,b,c,_x,_y,_z)==1)
                {
                            int v0 = xAddVertex(surf, a+1, b, c);
                            int v1 = xAddVertex(surf, a+1, b+1, c);
                            int v2 = xAddVertex(surf, a+1, b, c+1);
                            int v3 = xAddVertex(surf, a+1, b+1, c+1);

                                xVertexNormal(surf,v0,_x,_y,_z);
                                xVertexNormal(surf,v1,_x,_y,_z);
                                xVertexNormal(surf,v2,_x,_y,_z);
                                xVertexNormal(surf,v3,_x,_y,_z);

                                xVertexTexCoords(surf,v0,0,0);
                                xVertexTexCoords(surf,v1,1,0);
                                xVertexTexCoords(surf,v2,0,1);
                                xVertexTexCoords(surf,v3,1,1);

                            xAddTriangle(surf,v0,v1,v2);
                            xAddTriangle(surf,v3,v2,v1);
                }

                _x=-1,_y=0,_z=0;
                if(diff(a,b,c,_x,_y,_z)==1)
                {
                            int v0 = xAddVertex(surf, a, b, c);
                            int v1 = xAddVertex(surf, a, b+1, c);
                            int v2 = xAddVertex(surf, a, b, c+1);
                            int v3 = xAddVertex(surf, a, b+1, c+1);

                                xVertexNormal(surf,v0,_x,_y,_z);
                                xVertexNormal(surf,v1,_x,_y,_z);
                                xVertexNormal(surf,v2,_x,_y,_z);
                                xVertexNormal(surf,v3,_x,_y,_z);

                                xVertexTexCoords(surf,v0,0,0);
                                xVertexTexCoords(surf,v1,1,0);
                                xVertexTexCoords(surf,v2,0,1);
                                xVertexTexCoords(surf,v3,1,1);

                            xAddTriangle(surf,v0,v2,v1);
                            xAddTriangle(surf,v3,v1,v2);
                }
            }




    }

int diff (int i , int j , int k, int _x ,int _y, int _z)
    {
    //адрес ячейки , нормаль смещения
        int current_cell = test_data[i*size*size + j*size +k];
        int disp_cell = 0;
        if(current_cell!=0){

            int x = i+_x;
            int y = j+_y;
            int z = k+_z;


            if(x>=0 && y>=0 && z>=0){
            if(x<size && y<size && z<size){

                disp_cell = test_data[x*size*size + y*size +z];

            }}
        }
        return current_cell-disp_cell;
    }



};


moka 02.11.2012 02:31

Ответ: Странное.
 
А те трианглы что не видны (находятся между двумя кубами), они тоже добавлены? Или алгоритм учитывает и не добовляет их тем самым оптимизируя объём максимально?

Если да, то можно ещё сделать систему с учётом рядом стоящих чанков и также не рисовать не нужные трианглы.

Далее систему обновления сетки (динамично и оптимально).

И вуаля - у тебя есть свой рендер minecraft'а.

dsd 02.11.2012 03:09

Ответ: Странное.
 
для ячейки оно смотрит чтобы в ней был куб и если соседняя пустая то с той стороны добавляется грань. А еще для пущей экономии можно сделать так чтобы оно стоящие рядом грани которые находятся в одной плоскости рисовало не отдельными квадами а одним, но смысла пока не вижу. :-)Равно как и по краям экономить на квадах.

moka 02.11.2012 03:20

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

dsd 02.11.2012 03:36

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

moka 02.11.2012 05:16

Ответ: Странное.
 
А по мне так можно попробовать совместить Deferred Rendering с тенями и SSAO, и будет достаточно.

Dzirt 03.11.2012 03:42

Ответ: Странное.
 
Название этой темы всегда поднимает мне настроение :)

dsd 09.11.2012 21:34

Ответ: Странное.
 
Сочинил класс который делает процесс создания поверхностей попроще.

Код:



struct vertex{

vec3 position;
vec3 normal;
vec2 texCoords;
vertex *parent;
vertex *child;
int index;
};

struct triangle{
int v0,v1,v2;
triangle *parent;
triangle *child;
int index;
};

class surf_fabric{

public:
    Engine * eng;
    Surface * surf;
    vertex * first_vert;
    vertex * last_vert;
    triangle * first_trian;
    triangle * last_trian;

    int vert_index;
    int trian_index;
    int vert_num;
    int trian_num;

surf_fabric(){
eng = Engine::Instance();
first_vert = new vertex;
last_vert = first_vert;
vert_index = 0;
first_trian = new triangle;
last_trian = first_trian;
trian_index = 0;
}


int AddVertex(vec3 position,vec3 normal,vec2 texCoords)
{
vertex * point = new vertex;
point->parent = last_vert;
last_vert->child = point;
point->position = position;
point->normal = normal;
point->texCoords = texCoords;
point->index = vert_index;
last_vert = point;
vert_index++;
return point->index;
}

int AddTriangle(int v0, int v1, int v2)
{
triangle * trian = new triangle;
trian->v0 = v0;
trian->v1 = v1;
trian->v2 = v2;
trian->index = trian_index;
trian_index++;
last_trian->child = trian;
trian->parent = last_trian;
last_trian = trian;
return trian->index;
}

Surface * BuildSurface(){

int count_vertices = last_vert->index;
int count_indices = 3*last_trian->index;

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

while(current_vert!=last_vert){
//сначала ставлю вершины
current_vert = current_vert->child;
delete current_vert->parent;

        surf->SetVertexPosition(current_vert->index,current_vert->position);
        surf->SetVertexNormal(current_vert->index,current_vert->normal);
        surf->SetVertexTexCoord(current_vert->index,current_vert->texCoords);
}
delete last_vert;

while(current_trian!=last_trian){
//потом трианглы
current_trian = current_trian->child;
delete current_trian->parent;
surf->SetTriangle(current_trian->index,current_trian->v0,current_trian->v1,current_trian->v2);
}
delete last_trian;

surf->RecalcTangents();
surf->UnLock();

first_vert = new vertex;
last_vert = first_vert;
vert_index = 0;
first_trian = new triangle;
last_trian = first_trian;
trian_index = 0;

return surf;
}

};



теперь поверхность можно делать так:
Код:

        surf_fabric * surf = new surf_fabric();

        for(int i=0;i<100;i++){
            vec3 Position0(i+0,0,0) , Position1(i+0,0,1) , Position2(i+1,0,0) , Position3(i+1,0,1);
            vec3 Normal(0,1,0);
            vec2 texCoords(0,0);

            int v0 = surf->AddVertex(Position0,Normal,texCoords);
            int v1 = surf->AddVertex(Position1,Normal,texCoords);
            int v2 = surf->AddVertex(Position2,Normal,texCoords);
            int v3 = surf->AddVertex(Position3,Normal,texCoords);

            int t0 = surf->AddTriangle(v0,v1,v2);
            int t1 = surf->AddTriangle(v3,v2,v1);
        }

        Surface * surf0 = surf->BuildSurface();

        Entity *body0 = s->Add(surf0);
        StandartShaders::Render::OnlyNormals()->SetUniform(Shader::SU_LIGHTPOS,vec3(0,5,7));
        body0->SetShader(StandartShaders::Render::OnlyNormals());
        body0->SetPosition(0,0,0);

Может кому пригодится :)

dsd 24.11.2012 01:17

Ответ: Странное.
 
Вложений: 1
с помощью какой то матери и черной магии сделал тот же массив кубиков.

летать wasd и мышь, крутить кубик стрелки, закрыть альт+ф4
выяснилось что в
Код:

unsigned char* data = unsigned char[tex->GetDataSize()];
tex->GetData(data);
delete[] data;

tex->GetDataSize() у меня возвращает что угодно кроме нужного числа.


А можно как нибудь макросом текст вида:
Код:

uniform mat4 modelviewproj;                                               
uniform mat3 normalmatrix;                                             
uniform vec3 lightpos;                                                   
uniform mat4 model;                                                       

in vec3 position;                                                         
in vec3 normal;                                                           
in vec2 texcoord0;                                                       

out vec3 fragmentn;                                                       
out vec2 fragmentuv;                                                     
out vec3 lightvec;                                                       
out vec3 shadow;                                                         

void main(void) {                                                         
        gl_Position  = modelviewproj * vec4(position,1.0);                   
        fragmentn = normalmatrix * normal;                                     
        lightvec = lightpos - (model * vec4(position,1.0)).xyz;               
        fragmentuv = texcoord0;                                               
}

превратить в
Код:

"uniform mat4 modelviewproj;\n"
"uniform mat3 normalmatrix;\n"
"uniform vec3 lightpos;\n"
"uniform mat4 model;\n"

"in vec3 position;\n"
"in vec3 normal;\n"
"in vec2 texcoord0;\n"

"out vec3 fragmentn;\n"
"out vec2 fragmentuv;\n"
"out vec3 lightvec;\n"
"out vec3 shadow;\n"

"void main(void) {\n"
"        gl_Position  = modelviewproj * vec4(position,1.0);\n"
"        fragmentn = normalmatrix * normal;\n"
"        lightvec = lightpos - (model * vec4(position,1.0)).xyz;\n"
"        fragmentuv = texcoord0;\n"
"} \n"

И что надо заинклюдидь чтобы swprintf заработало?

И когда будет справка?

HolyDel 24.11.2012 02:35

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

tex->GetDataSize() у меня возвращает что угодно кроме нужного числа.
странно. может текстура сжата аппаратно?

Цитата:

А можно как нибудь макросом текст вида:
я не знаю способа. я добавляю файлы шейдеров прямо в проект и правлю их там.

Цитата:

И что надо заинклюдидь чтобы swprintf заработало?
<cstdio>

Цитата:

И когда будет справка?
в ближайшие месяцы - не будет.

демка показывает 1800 фпс, если выключить vsync в драйверах (на 680gt)

чтобы не обрезались кубы в ближней плоскости отсечения - теперь есть camera->SetDepthClamp(true);

dsd 24.11.2012 02:50

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

Сообщение от HolyDel (Сообщение 244655)
странно. может текстура сжата аппаратно?


я не знаю способа. я добавляю файлы шейдеров прямо в проект и правлю их там.


демка показывает 1800 фпс, если выключить vsync в драйверах (на 680gt)

обычный джпег, так что хз. Я просто ширину на высоту умножил и на 3 и получил нужный мне размер. после чего магические глюки прекратились.

ну значит можно будет приличный объем рисовать :) . в примере куб 32х32х32 и половина кубов примерно есть. то есть около 50 к треугольников. по идее в нормальном кубе 32х32х32 будет гораздо меньше полигонов, так как это нарисован худший вариант по количеству полигонов.


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

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