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

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

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

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

Ответ
 
Опции темы
Старый 05.02.2012, 16:47   #391
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

ну косяк и так и так будет лишь при переполнении буфера, если работать в одном потоке.

просто вариант с локальной переменной самодостаточен, а для варианта со статические определенной глобальной переменной нужно ее еще определить где-то.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (05.02.2012)
Старый 06.02.2012, 09:34   #392
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
Мой первый макрос
Вроде работает, вроде удобно
char msgBuffer[129];
#define text(a,b,c,d) \
sprintf(msgBuffer,c,d);\
xText(a,b,msgBuffer)

text(120,120,"current FPS is: %d",xGetFPS());
и сразу же второй
#define b_for(a,b) for(int a=0;a<b;a++)
вот для цикла макрос прокатит, а для функции text лучше написать inline функцию, а не макрос. ИМХО
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (06.02.2012)
Старый 06.02.2012, 13:05   #393
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

кстати да.

inlinte text(int x, int y, const char *foo, ...)
{
char buff[16535];
sprintf_s(buff,foo);
xtext(x,y,buff);
}
так наверное будет лучшее
(Offline)
 
Ответить с цитированием
Старый 06.02.2012, 15:21   #394
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

А по-моему макрос лучше.
И если макросу в принципе пофиг какие там типы входных данных, то для функции либо писать дополнительные варианты, либо писать шаблоном. Так что на мой вкус в данном случае функции лишнее, а макрос самое то.
(Offline)
 
Ответить с цитированием
Старый 06.02.2012, 17:33   #395
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

я извиняюсь, так просто все не работает.

работает с ms-специфик функцией vsprintf

inlinte text(int x, int y, const char *foo, ...)
{
va_list ap;
char buff[16535];
va_start(ap, foo);
vsprintf_s(buff,foo,ap);
va_end(ap);
xtext(x,y,buff);
}
просто так можно ее использовать как то так:
Print(L"The FPS:%d, Tris:%d, MousePos(%d,%d)",eng->GetStatistics()->GetFPS(),eng->GetStatistics()->TrisRendered(), MouseX(), MouseY());
а в твоем варианте ограниченно только одной переменной.

кстати, объясните мне пожалуйста почему первая функция не работает? можно ли как то сделать не ms специфик версию?

Последний раз редактировалось HolyDel, 06.02.2012 в 18:54.
(Offline)
 
Ответить с цитированием
Старый 06.02.2012, 18:30   #396
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Сообщение от HolyDel Посмотреть сообщение

а в твоем варианте ограниченно только одной переменной.
Это единственное, что я понял из всего поста.

Кстати инлайн значит, что компилятор вместо имени функции подставляет её код. Макрос делает тоже самое но на уровне препроцессора. Так что я не вижу особой разницы. Тем более, что в интернетах вычитал, что современные компиляторы игнорируют слово инлайн и сами решают что лучше, а также посыл начинающим прогерам типа меня, сильно не умничать и не пытаться бестолку оптимизировать код с учетом того, что компилятор почти всегда справится лучше на не оптимизированном по сравнению с криво оптимизированным текстом.
(Offline)
 
Ответить с цитированием
Старый 06.02.2012, 19:38   #397
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

макросы всегда зло.

им пофиг на тип переменных, они вычисляют значения своих параметров каждый раз, и самое главное они ничего не знают об области видимости.
в частности WinAPI мне портит немало нервов из за того, что назвала макрос LoadImage. А у меня так метод называется. Ошибку трудно найти сразу, потому, что препроцессор. И хорошо, что оно еще не скомпилировалось
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
dsd (06.02.2012), Mr_F_ (06.02.2012), pozitiffcat (07.02.2012)
Старый 07.02.2012, 01:57   #398
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Странное.

Сообщение от HolyDel Посмотреть сообщение
я извиняюсь, так просто все не работает.

работает с ms-специфик функцией vsprintf

inlinte text(int x, int y, const char *foo, ...)
{
va_list ap;
char buff[16535];
va_start(ap, foo);
vsprintf_s(buff,foo,ap);
va_end(ap);
xtext(x,y,buff);
}
Страуструп не рекомендует использовать эту возможность языка.

inline ? А void чего опустили?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dzirt (23.02.2012)
Старый 07.02.2012, 09:32   #399
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
Это единственное, что я понял из всего поста.

Кстати инлайн значит, что компилятор вместо имени функции подставляет её код. Макрос делает тоже самое но на уровне препроцессора. Так что я не вижу особой разницы. Тем более, что в интернетах вычитал, что современные компиляторы игнорируют слово инлайн и сами решают что лучше, а также посыл начинающим прогерам типа меня, сильно не умничать и не пытаться бестолку оптимизировать код с учетом того, что компилятор почти всегда справится лучше на не оптимизированном по сравнению с криво оптимизированным текстом.
макросы используются в других вещях. Нахера ты все в кучу мешаешь. Вот макрос с циклом ты правильно написал, тут можно использовать, но нахера макросом описывать функцию O_o
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (07.02.2012)
Старый 07.02.2012, 12:58   #400
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Сообщение от pozitiffcat Посмотреть сообщение
макросы используются в других вещях. Нахера ты все в кучу мешаешь. Вот макрос с циклом ты правильно написал, тут можно использовать, но нахера макросом описывать функцию O_o
Примерно по тем же причинам по которым ты высказываешь негодование по этому поводу, потому что я могу это.
(Offline)
 
Ответить с цитированием
Старый 07.02.2012, 14:19   #401
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
потому что я могу это.
дык не только ты можешь
(Offline)
 
Ответить с цитированием
Старый 07.02.2012, 14:56   #402
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

да ладно, чо вы пристали к парню )) один раз потратит ночь на отладку программы из-за некстати объявленного макроса, и не будет их пользовать больше в случаях, где можно без них обойтись

inline ? А void чего опустили?
сорри. в браузере набирал.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (07.02.2012)
Старый 12.02.2012, 21:54   #403
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

HolyDel, в общем э...
CSurface *surf = new CSurface(24,36);
Смотрел на примере куба. Перовое число это количество точек в поверхности. Второе я не понял. Что это?
Из конструктора сplane я не догнал что это и как мне посчитать кол-во этих индексов, если я захотел сделать свой примитив. Как?
indices_ = new unsigned char[count_indices_*index_size_];
ZeroMemory(indices_,count_indices_ * index_size_);
vao_ =0;
vbo_ =0;
uabo_ =0;
ibo_ =0;
Или я не туда лезу? Справку я не понял
(Offline)
 
Ответить с цитированием
Старый 12.02.2012, 23:19   #404
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

второе - это число индексов. Так как сейчас единственный способ рисования сюрфейсов - это triangles list, то его можно понимать как кол-во триугольников * 3.

Те сюрфейсы, что ты смотришь - это часть движка. Я могу ползоваться реализацией (потомучто наглый), а пользователи не должны, для них есть интерфейс. На пользовательской части сюрфейс можно создать както так:

Surface *user_surface = eng->CreateSurface(24,12);
user_surface->Lock();
user_surface->SetVertexPosition(i,i,i,i);
user_surface->SetTriangle(i,v1,v2,v3);
user_surface->UnLock();
справку сложно понять - ее ведь нет ))
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (12.02.2012)
Старый 13.02.2012, 13:55   #405
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Испытал проблемы с прорисовкой моего треугольника.
Оно стало рисоваться только после добавления моей поверхности к сцене из стандартного примера.
Так и надо? Или просто мой треугольник не попадал в кадр?

#include <axelynx/axelynx.h>
using namespace axelynx;

int main()
{
        Engine *eng = Engine::Init();
        Window *wnd = eng->AddWindow(800,600);
        //TODO: Place your resource loading and scene creating code here


        Scene *s = eng->AddScene();
        Camera *cam = s->AddCamera();
        Surface *cube = StandartSurfaces::Cube();
        Entity *body = s->Add(cube);
	StandartShaders::Render::OnlyNormals()->SetUniform(Shader::SU_LIGHTPOS,vec3(0,5,7));
        body->SetShader(StandartShaders::Render::OnlyNormals());
        body->SetPosition(0,0,-6);

        Entity *turret = s->Add(cube);
        turret->SetParent(body);
        turret->SetShader(StandartShaders::Render::OnlyNormals());
        turret->SetPosition(0,0.0,-1.25);
        turret->SetScale(0.25);

        turret = turret->Copy();
        turret->SetPosition(0,0,1.25);

        turret = turret->Copy();
        turret->SetPosition(0,-1.25,0);

        turret = turret->Copy();
        turret->SetPosition(0,1.25,0);

        turret = turret->Copy();
        turret->SetPosition(-1.25,0,0);

        turret = turret->Copy();
        turret->SetPosition(1.25,0,0);


//*****************************************************
        Surface *user_surface = eng->CreateSurface(3,6);
        user_surface->Lock();

        user_surface->SetVertexPosition(0,0,-16,6);
        user_surface->SetVertexPosition(1,16,0,6);
        user_surface->SetVertexPosition(2,-16,0,6);

        user_surface->SetVertexTexCoord(0,vec2(0.5,1));
        user_surface->SetVertexTexCoord(1,vec2(1,0));
        user_surface->SetVertexTexCoord(2,vec2(0,0));

        user_surface->SetVertexNormal(0,0,1,0);
        user_surface->SetVertexNormal(1,0,1,0);
        user_surface->SetVertexNormal(2,0,1,0);

        user_surface->SetVertexColor(0,vec4(1.0f,1.0f,1.0f,1.0f));
        user_surface->SetVertexColor(1,vec4(1.0f,1.0f,1.0f,1.0f));
        user_surface->SetVertexColor(2,vec4(1.0f,1.0f,1.0f,1.0f));

        user_surface->SetTriangle(0,0,2,1);
        user_surface->SetTriangle(0,0,1,2);

        user_surface->RecalcTangents();
        user_surface->UnLock();
        //отрисовалось только после этого. Это правильно?
        s->Add(user_surface);
//****************************************************

        float dx=0,dy=0;

        while(wnd->isRunning())
        {
                if(KeyDown('A'))
                        dx -= 1.0;
                if(KeyDown('D'))
                        dx += 1.0;
                if(KeyDown('W'))
                        dy -= 1.0;
                if(KeyDown('S'))
                        dy += 1.0;
                //TODO: Place your rendering code here
                float dt = Timer::Delta() * 0.01;

                dx *= 0.95;
                dy *= 0.95;
                body->Turn(dt*dy,dt*dx,0);

                s->Render();

                wnd->Flip();
        }
        //TODO: Place your deinitalize code here
        eng->Free();
}
Нормали оно само пересчитывать не умеет?

Последний раз редактировалось dsd, 13.02.2012 в 16:53.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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