Среда, 24 Апреля 2024, 19:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Записи участника » Alkosha [230]
Результаты поиска
AlkoshaДата: Суббота, 10 Мая 2014, 02:50 | Сообщение # 201 | Тема: Масштабирование содержимого экрана XNA 4.0
участник
Сейчас нет на сайте
Всё пытаюсь начать создание 2д платформера, но до сих пор не могу определится толком на основе чего он будет рендериться.
Основные требования - масштабирование (типа, камера приближается\удаляется), а так же изменение палитры текстуры.
Но и помимо этого готовенький исходник, в котором описаны прыжок по параболе с гравитацией, да коллизия с матрицей уровня.
Из туторов нашёл только SMLF, но заставить его компилиться в код-блоксе мне так и не удалось (ранее создавал уже тему на этом форуме)

Потому я решил обратить взор на XNA.
Тут уже по туторам описано создание платформера с коллизией. Так же в XNA есть возможность задать "светофильтр" на спрайте (но там дефайнами, то бишь заранее заданными переменными, пока не знаю как менять цвет "светофильтра" именно числовым значением).

Впрочем, это всё потом... В первую очередь интересует каким образом можно zoom-ировать картинку в XNA (разрешение игрового окна константное , разумеется), и возможно ли вообще такое?


Сообщение отредактировал Alkosha - Суббота, 10 Мая 2014, 02:51
AlkoshaДата: Понедельник, 24 Марта 2014, 15:24 | Сообщение # 202 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
Цитата JunkerKun ()
Запусти дебаггер, он тебе и покажет строку кода и ошибку,


Машинного кода ведь ? Насколько мне известно, дебаггер отображает лишь дизассемблированную прогу и состояния регистров процессора.

Добавлено (24.03.2014, 15:24)
---------------------------------------------
Цитата JunkerKun ()
Либо ДЛЛ не от GCC


Брал отсюда в самой верхней таблице с боковой надписью "виндовс" 5-ая строка сверху, в первом столбце (GCC 4.7 MinGW (DW2) - 32 bits) видовс у меня 32-ух разрядная.
http://www.sfml-dev.org/download/sfml/2.0/


Сообщение отредактировал Alkosha - Понедельник, 24 Марта 2014, 15:25
AlkoshaДата: Пятница, 21 Марта 2014, 00:52 | Сообщение # 203 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
Цитата First ()
сам юзаю sfml, компилится и работает норм

В кодблоксе компилишь?

Добавлено (21.03.2014, 00:52)
---------------------------------------------
Ну вот всё последовательно как и тут делал. И версия код-блокса такая же, и версия SFML. И у того штриха тоже 7-ка...

Всё равно такое вот:

AlkoshaДата: Среда, 19 Марта 2014, 00:47 | Сообщение # 204 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
Цитата Storm54 ()
DLL самого иррлихта в чем скомпилирована? Обычно идет 2 версии: GCC и Visual Studio. Если к exe, скомпилированному в GCC, поместить дллку студии, то программа вылетает. И наоборот.

)

Так дело в том, что с иррлихтом у меня как раз таки нет проблем... Проблема именно с SFML.

Добавлено (19.03.2014, 00:45)
---------------------------------------------
Либы SFML тоже для компилятора mingw gcc качал.

Добавлено (19.03.2014, 00:47)
---------------------------------------------
Цитата Storm54 ()
Если рассматривать екземплы, то все они требуют папки с ресурсами. Возможно, что она лежит не там, где нужно.

Не смотря на то, что я ацкий ламер, про такие вещи я осведомлён. Тем паче для примера типа "хыллоу ворлд", где рисуется векторная фигура закрашенного кружочка, никаких ресурсов не требуется, ибо это процедурная графика.


Сообщение отредактировал Alkosha - Среда, 19 Марта 2014, 00:58
AlkoshaДата: Вторник, 18 Марта 2014, 13:39 | Сообщение # 205 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
Цитата
If you dynamically link the C runtime on Windows, you may need to put the following DLL files in your project directory:
- libgcc_s_dw2-1.dll
- libstdc++-6.dll


взято отсюда

я так и поступил, скачал эти две ДЛЛ-ки, поместил в каталог с экзэшником... теперь стартует , и... "вындавс пытается найти способ устранения ошибки" (что-то в этом роде). Причём та же ситуация и на прекомпилированных экзэмплах, поставляемых в комплекте с движком.
Быть может это от того, что сама вындавс -- 7-ка. В общем хз.

Теперь-то вы понимаете почему я решил всё-таки перевести исходник под ту либу, которая и компилится, и запускается безупречно ?


Сообщение отредактировал Alkosha - Вторник, 18 Марта 2014, 13:40
AlkoshaДата: Понедельник, 17 Марта 2014, 14:07 | Сообщение # 206 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
Ладно, в таком случае как проапгрейдить версию компилятора GCC в код-блоксе ?

Добавлено (17.03.2014, 12:48)
---------------------------------------------
А, не. Тут указывается, что для конкретной версии gcc нужна конкретная версия SFML.... попробую исходники пересобрать, авось прокатит

Добавлено (17.03.2014, 14:07)
---------------------------------------------
Только как создать в кодблоксе проект для компиляции smlf ? выбрать console aplication , а затем добавить в этот проект add files все cpp hpp файлы во всех подкаталогах исходника ?


Сообщение отредактировал Alkosha - Понедельник, 17 Марта 2014, 14:07
AlkoshaДата: Суббота, 15 Марта 2014, 21:07 | Сообщение # 207 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
Цитата JunkerKun ()
Это можно сделать и в 2Д просто высчитывая координаты бэкграунда как координаты_камеры/2 (хотя по факту лучше по формуле перспективы, которую можно найти на той же википедии)

Та не.. Я имел ввиду не плоскостной параллакс. А примерно такой (хотя тут такой эффект достигнут за счёт скроллинга отдельных строк с разной итерацией)

Цитата JunkerKun ()
Ну это уже не из-за либы, согласись

Ну дык, это скорее всего из-за версии mingw, или хз из-за чего. Факт в том, что банально застопорился на настройке компилятора.

Цитата JunkerKun ()

Бред, ибо см. выше про шейдеры и функцию смешения цветов.

Я особо не вникал, как устроен SFML, просто лишь предположил, что он схож по принципу с SDL. Ни о каких шейдерах на нём я не был в курсе.

Добавлено (15.03.2014, 21:07)
---------------------------------------------
Даже русскоязычного комьюнити на эту SFML похоже, что нету...

AlkoshaДата: Суббота, 15 Марта 2014, 19:36 | Сообщение # 208 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
Цитата JunkerKun ()
Это библиотека для разработки рейл-тайм 3Д приложений, 2Д там достаточно рудиментарно.

за счёт того, что спрайты (точнее текстурки, натянутые на параллеллепипед с размерами x*y*0) находятся в трёхмерном пространстве и в зависимости от ракурса камеры можно сделать эффект параллакс-скроллинга. Ну и по ходу можно влепить ещё чёнить трёхмерного в 2д мир.
набросок

Цитата JunkerKun ()
Тип FloatRect опять же принадлежит SFML, у типа rect<T> из Irrlicht нет никакого поля "left", у него есть поле "position" (или как-то так), которое возвращает двухмерный вектор с положением прямоугольника.

Эт я уже заметил

Цитата JunkerKun ()
Вывод - не занимайся ерундой, а просто продолжай делать на SFML. Irrlicht не для 2Д был написан.

С радостью бы... Но, во-первых, не могу толком настроить код::блокс на эту либу. Делал как тута. компилит нормально, но линкует как-то не так, ибо при запуске экзешника ругается на libgcc_s_dw2-1.dll (версия кодблокса 10.05).
Во-вторых, я собираюсь динамически менять цветовую гамму на слоях бэкграунда \ спрайтах. Например, в рэтро-приставках это делалось изменением набора цветов палитры видеоконтроллера. В Irrlicht'e попробую через шейдеры (правда малость геморно).

SFML , как я понял, некое подобие SDL. То есть подобной функции там нет, это значит, что придётся попиксельно считывать картинку и по определённому условию задавать цвет пикселя, выводя на экран. Иными словами, ЦП будет адово нагружен.


Сообщение отредактировал Alkosha - Суббота, 15 Марта 2014, 19:40
AlkoshaДата: Суббота, 08 Марта 2014, 11:54 | Сообщение # 209 | Тема: Как рипнуть скелетку из игры на UE3 ?
участник
Сейчас нет на сайте
Давно качал этот вьювер отсюда:
анрил вьювер

И ГУЙ к нему (с какого-то буржуйского сайта, уже и не помню откуда именно)
вот

Но почему-то он не вскрывает бэтмановские модельки.

Добавлено (07.03.2014, 23:37)
---------------------------------------------
Но вот интересно, как им котобабу удалось загрузить...


Может то из-за сырого GUI ?

Добавлено (08.03.2014, 04:46)
---------------------------------------------
А всё, разобрался. Через командную строку всё нормально открывается.

Добавлено (08.03.2014, 11:54)
---------------------------------------------
Только вот не могу найти анимашки с катсцен (помимо пререндеренных, там есть ещё на движке).
И с лицевой анимацией чё-то не то. Ротяка слиплась, а челючсть при этом гуляет.

AlkoshaДата: Пятница, 07 Марта 2014, 12:49 | Сообщение # 210 | Тема: Как рипнуть скелетку из игры на UE3 ?
участник
Сейчас нет на сайте
Приветик, мальчишки))))
Как выдрать модели со скелетной анимацией из игор на UE3 (в частности интересует Batman AC), чтоб можно было в дальнейшем импортнуть в 3дмакс, например ?)))
Какими утилитами ?))

Зачастую выдирают онли моделки да текстурки, без анимации)))
А вот как именно с анимашкой выдрать?))))))
AlkoshaДата: Пятница, 21 Февраля 2014, 21:07 | Сообщение # 211 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
Код

#include <irrlicht.h>
#include <math.h>

#define MAX_FPS 100
#define IDLE_TIME  (1000 / MAX_FPS)

using namespace irr;

using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endif
f32 col[4];
IVideoDriver* driver;

int resw=800;// разрешение ёпта
int resh=600;

float offsetX=0, offsetY=0;

const int H = 12;
const int W = 40;

char* TileMap[H] = {

"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
"B                    B     B",
"B                    B     B",
"B                    B     B",
"B                    B     B",
"B         0000                BBBB     B",
"B                    B     B",
"BBB                    B     B",
"B              BB                BB    B",
"B              BB                      B",
"B    B         BB         BB           B",
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",

};

class PLAYER {

public:

float dx,dy;
rect<s32> rectan;
bool onGround;

float currentFrame;

     PLAYER()
    {
//    sprite.setTexture(image);
  rectan=rect<s32>(7*32,9*32,40,50);

  dx=dy=0.1;
  currentFrame = 0;
    }

    void update(float time)
    {

   rectan.left += dx * time;
   Collision(0);

   if (!onGround) dy=dy+0.0005*time;
   rect.top += dy*time;
   onGround=false;
      Collision(1);

    currentFrame += 0.005*time;
    if (currentFrame > 6) currentFrame -=6 ;

    if (dx>0) sprite.setTextureRect(IntRect(40*int(currentFrame),244,40,50));
    if (dx<0) sprite.setTextureRect(IntRect(40*int(currentFrame)+40,244,-40,50));

    sprite.setPosition(rect.left - offsetX, rect.top - offsetY);

    dx=0;
    }

    void Collision(int dir)
    {
      for (int i = rect.top/32 ; i<(rect.top+rect.height)/32; i++)
    for (int j = rect.left/32; j<(rect.left+rect.width)/32; j++)
   {
      if (TileMap[i][j]=='B')
      {
          if ((dx>0) && (dir==0)) rect.left =  j*32 -  rect.width;
       if ((dx<0) && (dir==0)) rect.left =  j*32 + 32;
    if ((dy>0) && (dir==1))  { rect.top =   i*32 -  rect.height;  dy=0;   onGround=true; }
    if ((dy<0) && (dir==1))  { rect.top = i*32 + 32;   dy=0;}
      }

    if (TileMap[i][j]=='0')
                      {
                     TileMap[i][j]=' ';
                      }

      }

    }
};

bool jumpf=false;

const int bitmapy=10,bitmapx=20;
//char bitmap[bitmapy][bitmapx];

char bitmap[bitmapy][bitmapx]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,
                    0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,
                    1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,
                    1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
                    1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,
                    1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,
                    1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,1,
                    1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,
                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};

s32 newMaterialType = 0;
class MyShaderCallBack : public IShaderConstantSetCallBack
{
public:

    virtual void OnSetConstants(IMaterialRendererServices* services,
          s32 userData)
    {
        // Передаём индекс(номер текстуры), в пиксельный(фрагментный шейдер)
     s32 TextureLayerID = 0;
        services->setPixelShaderConstant("myTexture", reinterpret_cast<f32*>(&TextureLayerID), 1);

         // Передаём во фрагментный шейдер нужный цвет

             services->setPixelShaderConstant("myColor", col, 4);

    }
    virtual void OnSetMaterial (const SMaterial &material)
    {
         Color = SColorf(material.AmbientColor);
    }
private:
     SColorf Color;
};

void createmat()
{

    io::path vsFileName; // filename for the vertex shader
    io::path psFileName; // filename for the pixel shader
    psFileName = "shdr/frag.glsl";
    vsFileName = "shdr/vert.glsl";

     // Создание нового шейдерного материала
    IGPUProgrammingServices* gpu = driver->getGPUProgrammingServices();

       MyShaderCallBack* mc = new MyShaderCallBack();

       newMaterialType = gpu->addHighLevelShaderMaterialFromFiles(
             vsFileName, "vertexMain", EVST_VS_1_1,
             psFileName, "pixelMain", EPST_PS_1_1,
             mc,EMT_TRANSPARENT_ALPHA_CHANNEL);
}

class MyEventReceiver : public IEventReceiver
{
public:
         // наш собственный обработчик событий
         virtual bool OnEvent(const SEvent& event)
         {
                 // просто запоминаем состояние любой клавиши - нажата/отжата
                 if (event.EventType == EET_KEY_INPUT_EVENT)
                         KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown;

                 return false;
         }

         // метод возвращающий состояние для запрошенной клавиши
         virtual bool IsKeyDown(EKEY_CODE keyCode) const
         {
                 return KeyIsDown[keyCode];
         }

         //конструктор, в цикле сбрасываем статус для всех клавиш
         MyEventReceiver()
         {
                 for (u32 i=0; i<KEY_KEY_CODES_COUNT; ++i)
                         KeyIsDown[i] = false;
         }

private:
         // массив для хранения статусов клавиш
         bool KeyIsDown[KEY_KEY_CODES_COUNT];
};

  MyEventReceiver receiver;

ICameraSceneNode* cam;
  IrrlichtDevice *device;
ISceneManager* smgr;

  ISceneNode* back;
  ISceneNode* pers;
  ISceneNode* fognod=0;
  ISceneNode* nebo;

ISceneNode* kub;

  ILightSceneNode* light;
IAnimatedMesh* mesh ;
ISceneNode* node = 0;

int maintimer = 0;

bool go=false;
int frametime;
bool rainflag = true;
  IParticleSystemSceneNode* ps;

  IBillboardSceneNode * bill1;
f32 fdt;

void move();
void movepers(int dir);
void water();
void addfog();
void setpar(vector3df pos,vector3df scal,char * mat);
void init();
void jump();

class MYgg
{

public:
float x,y;
ITexture * tex[10];

void movepers(int dir){
if(dir==1)
{
     x+=0.1;
     pers->setMaterialFlag( EMF_FRONT_FACE_CULLING, false);
pers->setMaterialFlag( EMF_BACK_FACE_CULLING, true);
}
if(dir==0.1)
{
     x-=1;
pers->setMaterialFlag( EMF_FRONT_FACE_CULLING, true);
pers->setMaterialFlag( EMF_BACK_FACE_CULLING, false);
}
pers->setPosition(vector3df(x*2600,y*2600,495));
light ->setPosition(vector3df(x,100,-400));
frametime+=1000*fdt;

if(frametime>00&&frametime<=100)pers->setMaterialTexture(0, tex[1]);//Эту шляпу
if(frametime>100&&frametime<=200)pers->setMaterialTexture(0, tex[2]);//можно было
if(frametime>200&&frametime<=300)pers->setMaterialTexture(0, tex[3]);//циклом зафигачить
if(frametime>300&&frametime<=400)pers->setMaterialTexture(0, tex[4]);
if(frametime>400&&frametime<=500)pers->setMaterialTexture(0, tex[5]);
if(frametime>500&&frametime<=600)pers->setMaterialTexture(0, tex[6]);
if(frametime>600&&frametime<=700)pers->setMaterialTexture(0, tex[7]);
if(frametime>700&&frametime<=800)pers->setMaterialTexture(0, tex[8]);

if(frametime>800)frametime=0;
go=true;
}

};
MYgg gg;

class MYcamera
{
public:
float posx;
float posz;
float posy;

};

MYcamera camera;

bool flrf;
class MYphys{

public : void collis(){

for(int i=gg.y-2;i<gg.y+2;i++)
{
     for(int j=gg.x-2;j<gg.x+2;j++)
     {
         if(i>=0 && i<=bitmapy && j>=0 && j<=bitmapx)
         {
             if(bitmap[i][j]==1 && i>0)flrf=true;
         }

     }
}

/*
for(int i=0;i<bitmapy;i++)
{
     for(int j=0;j<bitmapx;j++)
     {
          if(bitmap[i][j]== 1&&bitmap[i-1][j]== 1)
        {
            if(gg.x>=j*500+241&&gg.x<=j*500+480&&gg.y>=-i*500&&gg.y<=-i*500+480){
            gg.x+=80;
            pers->setPosition(vector3df(gg.x,gg.y,500));
            }
             if(gg.x>=j*500&&gg.x<=j*500+240&&gg.y>=-i*500&&gg.y<=-i*500+480){
            gg.x-=80;
            pers->setPosition(vector3df(gg.x,gg.y,500));
            }
        }

      if(bitmap[i][j]== 1&&bitmap[i-1][j]== 0)
        {
            if(gg.x>=j*500&&gg.x<=j*500+480&&gg.y>=-i*500&&gg.y<=-i*500+480){
            gg.y+=80;
            pers->setPosition(vector3df(gg.x,gg.y,500));
            flrf=false;
            }
        }

         if(bitmap[i][j]== 0) // пустота внизу
        {
            if(gg.x>=j*500&&gg.x<=j*500+480&&gg.y>=-i*500&&gg.y<=-i*500+480){
          flrf=false;
            }
        }
     }
}*/
}

public : void gravity()
{
if(flrf==false)
{
gg.y-=0.5;
}
}

};

MYphys phys;

class sky
{
public:void rain(){
if(rainflag==true){
rainflag = false;

  ps = smgr->addParticleSystemSceneNode(false);
   IParticleEmitter* em1 = ps->createBoxEmitter(
                 aabbox3d< f32 >(0,00,00,resw,1,1), // размер эмиттера(куба)
                vector3df(0.5f,-2.0f,0.0f),   // начальное направление
                 50,100,                             // частота испускания (мин,макс)
                 SColor(0,255,255,255),       // самый темный цвет
                 SColor(0,255,255,255),       // самый яркий цвет
                 400,800,30,                         // време жизни (мин,макс), угол
                 dimension2df(32.f,32.f),         // минимальный размер частиц
                dimension2df(96.f,32.f));        // максимальный размер частиц

         ps->setEmitter(em1); // отдаем эмиттер системе
         //em->drop(); // а лично нам он не нужен

         IParticleAffector* paf = ps->createFadeOutParticleAffector();

         ps->addAffector(paf); // отдаем аффектор системе и дропаем, т.к. нам он не нужен
         paf->drop();

         ps->setPosition(vector3df(gg.x,500,0));
         ps->setScale(vector3df(4,2,2));
         ps->setMaterialFlag(EMF_LIGHTING, false);
         ps->setMaterialFlag(EMF_ZWRITE_ENABLE, false);
         ps->setMaterialTexture(0, driver->getTexture("xyu\\list.png"));
         ps->setMaterialType(EMT_TRANSPARENT_VERTEX_ALPHA);
        //ps->setMaterialType(EMT_TRANSPARENT_ALPHA_CHANNEL);

}
};

public:void draw()
{
for(int i=0;i<resh;i++){
driver->draw2DLine(position2d<s32>(0,i),position2d<s32>(resw,i),SColor(255, 20,10,0+i/3));
}
if(rainflag==false)ps->setPosition(vector3df(gg.x-2500,1200,0));

};

public:void recolor()
{

};

};

class sloy
{
public: void create1(){
setpar(vector3df(8700,50,800),vector3df(320,320,0),"xyu\\bus.png");
setpar(vector3df(-256,-100,590),vector3df(723,256,0),"xyu\\home1.png");
setpar(vector3df(-256,0,501),vector3df(723,256,0),"xyu\\home2.png");

for(int i=-6000;i<18000;i+=6000){
setpar(vector3df(i,-1675,500),vector3df(600,80,0),"xyu\\ground1.png");
}

setpar(vector3df(5800,-650,501),vector3df(200,128,0),"xyu\\zabor1.png" );

setpar(vector3df(11000,-650,501),vector3df(200,128,0),"xyu\\zabor1.png" );
back->setMaterialFlag(EMF_BACK_FACE_CULLING,false);
back->setMaterialFlag(EMF_FRONT_FACE_CULLING,true);

setpar(vector3df(35000,620,2000),vector3df(850/1.2,760/1.2,0),"xyu\\rock.png");
setpar(vector3df(25000,20,-100),vector3df(397/1.5,387/1.5,0),"xyu\\tree.png");
setpar(vector3df(15950,-2320,497),vector3df(200,215,0),"xyu\\platform1.png");
setpar(vector3df(17700,-2200,500),vector3df(168,185,0),"xyu\\gorka.png");
setpar(vector3df(17700+1650,-2200-950,501),vector3df(168,185,0),"xyu\\gorka.png");
setpar(vector3df(17700+1735*2,-4200,495),vector3df(200,215,0),"xyu\\platform1.png");
setpar(vector3df(22970,-3700,500),vector3df(190,110,0),"xyu\\ground2.png");
setpar(vector3df(22970+1900,-3700,500),vector3df(190,110,0),"xyu\\ground2.png");
setpar(vector3df(35000,620,2000),vector3df(850/1.2,760/1.2,0),"xyu\\door.png");

};
};

sloy sloy1;

int main()
{
/*

int i=0;
int j=0;

  FILE *in;
   in=fopen("gav.no","r");
   char c;

//for(int i=0;i<bitmapy;i++)
  //  for(int j=0;j<bitmapx;j++)
  while ( (c=fgetc(in) ) != EOF )
{
   // while ( (c=fgetc(in) ) != EOF)

      //   c=fgetc(in);
if(c=='1'||c=='0'||c=='\n'){

              if(c=='\n'){
        i++;
        j=0;

         printf("\n");
        }

             bitmap[i][j]=c;
        j++;
        printf("%c",bitmap[i][j]);

}
             //fputc( c,out );//записываем переменную в файл data2.

}

*/
device =
   createDevice( EDT_OPENGL, dimension2d<u32>(resw, resh), 8,
    false, false, true, &receiver);

   device->getCursorControl()->setVisible(false);
  device->setWindowCaption(L"ALKO");

  driver = device->getVideoDriver();
smgr = device->getSceneManager();
//driver->setFog(SColor(50,255,255,255),
   //              EFT_FOG_LINEAR, 500, 5000, .001f, true, false);
init();

createmat();

//cam=smgr->addCameraSceneNodeFPS();
smgr->getActiveCamera()->setFarValue(10000);

light = smgr->addLightSceneNode(0, vector3df(500,1675,500),
                         SColorf(1.0f, 1.0f, 1.0f, 1.0f), 2500.0f);
device->getFileSystem()->addZipFileArchive("xyu\\xyu.penis");

u32 then = device->getTimer()->getTime();

//water();

for(int i=0;i<bitmapy;i++)
{

     for(int j=0;j<bitmapx;j++)
     {
      if(bitmap[i][j]== 1)
        {

         kub = smgr->addCubeSceneNode();
         kub->setPosition(vector3df(j*2600,-i*2600,500));
         kub->setScale(vector3df(190,190,0));

       }
     }

}

bill1 = smgr->addBillboardSceneNode();
bill1->setMaterialFlag(EMF_LIGHTING, false);
bill1->setMaterialType(EMT_TRANSPARENT_ADD_COLOR );
//bill1->setMaterialType(EMT_TRANSPARENT_VERTEX_ALPHA);
   bill1->setMaterialTexture(0,driver->getTexture("xyu\\sun.png"));
   bill1->setSize(dimension2d<f32>(8000.0f,8000.0f));
bill1->setPosition(vector3df(6000,3000,5500));
bill1->setMaterialFlag(EMF_BILINEAR_FILTER, false);

pers = smgr->addCubeSceneNode();
pers->setMaterialFlag(EMF_LIGHTING,false);

pers->setPosition(vector3df(gg.x,gg.y,500));
pers->setScale(vector3df(70,140,0));
pers->setMaterialTexture( 0, gg.tex[0] );

pers->setMaterialType(EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
pers->setMaterialFlag(EMF_BILINEAR_FILTER, false);
//sloy1.create1();

/*
nebo = smgr->addCubeSceneNode();
nebo->setMaterialFlag(EMF_LIGHTING,false);
nebo->setPosition(vector3df(4800,810,2900));
nebo->setScale(vector3df(1600,230,0));
nebo->setMaterialTexture( 0, driver->getTexture("xyu\\tucha.png") );
nebo->setMaterialType(EMT_TRANSPARENT_ALPHA_CHANNEL);
//nebo->setMaterialFlag(EMF_FOG_ENABLE,true);
*/

sky sky1;

  while(device->run())
  {
      maintimer++;
      if((maintimer%100)==true)sky1.recolor();
const u32 now = device->getTimer()->getTime();
               fdt = (f32)(now - then) / 1000.f;
                 then = now;

  u32 time = device->getTimer()->getTime();

move();
jump();
camera.posx = gg.x;
camera.posy = gg.y;
camera.posz = -1200;

cam->setPosition(vector3df(camera.posx,camera.posy,camera.posz));
cam->setTarget(vector3df(gg.x,gg.y+100,1000));
//addfog();
   driver->beginScene(true, true, SColor(255,0, 40,40));
   pers->setPosition(vector3df(gg.x,gg.y,500));
sky1.draw();
sky1.rain();
phys.collis();
phys.gravity();
   smgr->drawAll();

   driver->endScene();
         device->sleep(IDLE_TIME - (time - device->getTimer()->getTime()));
  }

  device->drop();

  return 0;
}

void move(){

if(receiver.IsKeyDown(KEY_KEY_D)){
gg.movepers(1);
    }

if(receiver.IsKeyDown(KEY_KEY_A)){
gg.movepers(0);

    }
    if(receiver.IsKeyDown(KEY_KEY_S)){
    }
    if(receiver.IsKeyDown(KEY_KEY_W)){
        jumpf=true;

    }

if(go==false){pers->setMaterialTexture(0, gg.tex[0]);}
go=false;
}

void init(){
gg.tex[0]=driver->getTexture("xyu\\gg1.png");
gg.tex[1]=driver->getTexture("xyu\\gg2.png");
gg.tex[2]=driver->getTexture("xyu\\gg3.png");
gg.tex[3]=driver->getTexture("xyu\\gg4.png");
gg.tex[4]=driver->getTexture("xyu\\gg5.png");
gg.tex[5]=driver->getTexture("xyu\\gg6.png");
gg.tex[6]=driver->getTexture("xyu\\gg7.png");
gg.tex[7]=driver->getTexture("xyu\\gg8.png");
gg.tex[8]=driver->getTexture("xyu\\gg9.png");

gg.x=0;
gg.y=0;//=-580;
frametime=0;
cam=smgr->addCameraSceneNode(0, vector3df(0,0,00), vector3df(0,100,00));
cam->setPosition(vector3df(gg.x,gg.y,-1200));
cam->setTarget(vector3df(gg.x,gg.y+100,1000));
cam->setFOV(2);

}

void water()
{
driver->setFog(SColor(255,0,255,255),
                 EFT_FOG_LINEAR, 500, 5000, .0001f, true, false);

mesh = smgr->addHillPlaneMesh( "myHill",
   dimension2d<f32>(20,20),
   dimension2d<u32>(50,50), 0, 0,
   dimension2d<f32>(0,0),
  dimension2d<f32>(2,2));

  node = smgr->addWaterSurfaceSceneNode(mesh->getMesh(0), 300.0f, 2000.0f, 300.0f);
  node->setPosition(vector3df(-200,200,3000));
node->setRotation(vector3df(270,0,0));
node->setMaterialFlag(EMF_LIGHTING, false);
node->setMaterialFlag(EMF_GOURAUD_SHADING,false);
  node->setMaterialTexture(1, driver->getTexture("xyu\\water.jpg"));

  node->setMaterialType(EMT_REFLECTION_2_LAYER);
node->setScale(vector3df(20,1,5));
//node->setMaterialFlag(EMF_FOG_ENABLE,true);
}

void addfog(){
     if(fognod==0){
    fognod = smgr->addCubeSceneNode();
fognod->setMaterialFlag(EMF_LIGHTING,false);
fognod->setPosition(vector3df(-300,-1000,480));
fognod->setScale(vector3df(455,100,0));
fognod->setMaterialTexture( 0, driver->getTexture("xyu\\fog.png") );
fognod->setRotation(vector3df(0,0,180));
fognod->setMaterialType(EMT_TRANSPARENT_ALPHA_CHANNEL);

     }

}

void setpar(vector3df pos,vector3df scal,char * mat)
{
back = smgr->addCubeSceneNode();
back->setMaterialFlag(EMF_LIGHTING,false);

back->setScale(scal);
back->setPosition(pos);
back->setMaterialFlag(EMF_BILINEAR_FILTER, false);
back->setMaterialType(EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
back->setMaterialTexture( 0, driver->getTexture(mat) );

col[0] = 0.7;
col[1]=0.0;
col[2]=0.2;
col[3]=0;
     back->setMaterialType((E_MATERIAL_TYPE)newMaterialType);

//back->setMaterialFlag(EMF_FOG_ENABLE,fog);
}

void jump()
{
     if(jumpf==true)
     {
         gg.y+=10;
     }
}

Добавлено (21.02.2014, 21:07)
---------------------------------------------
Там гибрид из того, что я начинал ранее, потом забил. Вот нашёл чё-то на SFML , хочу перевести свой платформер.

AlkoshaДата: Пятница, 21 Февраля 2014, 20:28 | Сообщение # 212 | Тема: помогите перевести исходник под иррлихт... пожалуйста...
участник
Сейчас нет на сайте
есть исходник 2д платформера под библиотеку SFML.
Хочу этот самый алгоритм заюзать, только под управлением движка irrlicht.
В первую очередь компилятор ругался на переменную типа String.
ни #include "windows.h" ни #include <string.h> не помогло, потому я заменил String на char*

Далее переменную типа FloatRect объявил так: rect<s32> rectan присвоил ей значение следующим образом: rectan=rect<s32>(7*32,9*32,40,50);

сейчас ругается на строчку rectan.left += dx * time; ,

E:\TURBO\platform\main.cpp|75|error: 'class irr::core::rect<int>' has no member named 'left'|

но ведь структуре rect<s32> присутствует поле left

AlkoshaДата: Среда, 08 Января 2014, 20:08 | Сообщение # 213 | Тема: Оптимизация рейкастинга
участник
Сейчас нет на сайте
Вы сперва определитесь с понятием "3д". Зачастую анаглифное кино тоже называют ТРИ ДЭ.

таки да, первый дум можно отнести к три дэ, имхо. Так как у спрайтов там как минимум три параметра положения в пространстве, как и в дюке нюкеме ТРИ ДЭ.
Но это не полигональное три дэ, а рейкастинг однозначно. Для скептиков есть чит IDCLIP , при прохождении за пределы стен замечательно видно, что рендерится картинка столбцами, как и положено рейкастингу.

Но как бы там ни было, итоговая картинка всё равно проецируется на двухмерную плоскость, то бишь дисплей юзера.
AlkoshaДата: Понедельник, 06 Января 2014, 03:58 | Сообщение # 214 | Тема: Графика консольная (Спрайты)
участник
Сейчас нет на сайте
ASCII-арт != спрайты

Тут скорее всего придётся самому писать прогу, для замены пикселя символом.
Я видел лишь единственный пример на openGL, где отрендеренная картинка конвертировалась в символы посредством шейдеров glsl


Сообщение отредактировал Alkosha - Понедельник, 06 Января 2014, 13:26
AlkoshaДата: Суббота, 04 Января 2014, 22:45 | Сообщение # 215 | Тема: Оптимизация рейкастинга
участник
Сейчас нет на сайте
Цитата OpenGOO ()
ДОС эмитируется когда она запускается в окне. чтобы был чистый ДОС надо выгрузить винду.


Но запускаю-то я в фуллскрине. Тем паче, я даже при выгруженной винде (перезагрузка в режиме MS-DOS) запускал те же самые descent'ы , и квейк , и nfs... Разница лишь в том, что в этом режиме не грузятся дрова на мышу, потому в квейке , например, только клавой можно управлять. А fps примерно такой же.

Цитата OpenGOO ()
Кстати, в движках Duke Nukem 3D и Doom не использовался рейкастинг.

О_о
Эммм... Вы наверное спутали с третьим думом и с дюком нюкемом форэва.

В дюке нюкеме 3д есть возможность вертеть камеру вверх/вниз, и там нет сдвига перспективы по вертикали, то есть нет точки схода по оси Y, ровно так же, как нет её hertic'e , hexen'e, или воксельном, но в то же время рейкастинговом comanche. Или rise of triad, в котором движок основан вообще на wolf3d.
И ещё одна отличительная черта рейкастинговых движков - нет этажа над этажом. уровни двухмерные при виде сверху в любом случае.

Добавлено (04.01.2014, 22:45)
---------------------------------------------
Цитата OpenGOO ()
есть ZDoom.

Промелькала такая мысля. Но будет ли там возможность всё сделать на свой лад? То есть не очередной клон дума, а полностью видоизменить от и до.
ZDoom этож вроде типа готового конструктора (а-ля, гей-мейкеры всякие)


Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 22:52
AlkoshaДата: Суббота, 04 Января 2014, 16:08 | Сообщение # 216 | Тема: Оптимизация рейкастинга
участник
Сейчас нет на сайте
Цитата Alkosha ()
Судя по описанию eduke32 использует OpenGL Doom95 использует DirectX.


Там есть опциональный выбор рендеринга. На openGL вообще не прёт, ибо видяха не тянет это API. (видяшка ATI Rage II)
и при выборе софтверного рендеринга в eduke, там именно рейкастинговый графон, а не спрайтово-полигональное 3д, как если бы было на openGL.
А на DX видяха вообще адски медленно рисует. Есть несколько игор с выбором D3D рендерера и софтверного.
На D3D значительно тормознее, тот же MDK, или motorace. Хоть она фильтрует текстуры, производит коррекцию перспективы, тонирование Гуро дизерингом. Но по скорости уступает тому, что рисует непосредственно проц, поэтому всегда выбираю именно software render.

Кстати установленная ОСь win98 SE. Где всё ещё была поддержка ДОС-программ.
Или вы хотите сказать, что DOS эмулируется , и картинку выводит исключительно DX ?


Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 16:11
AlkoshaДата: Суббота, 04 Января 2014, 11:43 | Сообщение # 217 | Тема: Оптимизация рейкастинга
участник
Сейчас нет на сайте
Цитата OpenGOO ()
У тебя просто проц уже не справляется, уменьши разрешение хотя бы. У тебя какая хоть видюха, а то даже Descent 3 в 1999г. уже использовал аппаратное ускорение.


Всё проц справляется.

На софтверном рендеринге Descent 1 и Descent 2 на разрешениях 640*480 летают. А там, как всем известно, даже полигональное 3д.
Рейкастинги тем более он шпарит только так. Порт дюка eduke32 на разрешении 800*600 тоже работает идеально (чуток проседает правда, когда много wav-семплов воспроизводит, но если понизить воспроизведение сэмплов до 22 килогерц, то всё ровненько идёт)
Порт дума Doom95 тоже идеально работает на разрешении 640*480. И даже сравнить тот же дум, где разная высота стен, векторное построение карт, куча спрайтов, ИИ, воспроизведение звуковых сэмплов, и тот пример, который я разбираю.

Добавлено (04.01.2014, 11:43)
---------------------------------------------
Даже полигональное 3дэ для того проца раз плюнуть, если не используется коррекция перспективы при текстурировании.
NFS 1 (NFS SE), и подобные гоночки, например.


Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 11:44
AlkoshaДата: Пятница, 03 Января 2014, 00:59 | Сообщение # 218 | Тема: Оптимизация рейкастинга
участник
Сейчас нет на сайте
Цитата OpenGOO ()
Ты что-то не то делаешь


Даже элементарное заполнение пикселями на 166-ти мегагерцовом пентиуме MMX выдаёт 5 кадров в секунду на разрешении 800*600 (32 бита)
(процедура вывода пикселя для заполнения взята отсюда http://plg.lrn.ru/doc/sdl/lesson1.html)

Что на SW-сюрфейсе , что на HW-сюрфейсе мэдлэнно.


Сообщение отредактировал Alkosha - Пятница, 03 Января 2014, 01:00
AlkoshaДата: Четверг, 02 Января 2014, 23:35 | Сообщение # 219 | Тема: Оптимизация рейкастинга
участник
Сейчас нет на сайте
Дело оказывается не в рейкастинге.
Сама SDL медленно выводит пиксели.
Нужно непосредственно записывать в видео-озу vga-контроллера. Похоже придётся прибегнуть к асму, либо искать альтернативу SDL'ке для попиксельного вывода.
AlkoshaДата: Пятница, 27 Декабря 2013, 12:31 | Сообщение # 220 | Тема: Оптимизация рейкастинга
участник
Сейчас нет на сайте
Ну тут очевидно, что самые затратные участки там, где происходит выборка пикселей из текстур (пола\потолка\спрайтов). Со сплошным закрашиванием этот рейкастинг достаточно шустрый.

Добавлено (27.12.2013, 12:31)
---------------------------------------------
Ага. У операции сдвига приоритет меньше , чем у сложения и вычитания. Вот от чего была "текстурная шляпа". Нужно было просто в скобки заключить.

Код
  int d = (y <<8) - d2 + d1;
Форум игроделов » Записи участника » Alkosha [230]
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг