Как стать автором
Обновить
134
0.2

Пользователь

Отправить сообщение
Лицензию на код? Я в них не разбираюсь. Как называется лицензия, если вы можете делать с кодом абсолютно всё, что захотите? Free?
А на Github я не могу выложить — я никогда не работал с такими системами разработки и понятия не имею, как там вообще осуществляется работа. Я попытался понять, нифига не понял, что там вообще нужно делать. Дело в том, что я в команде никогда не работал (хоть я и пишу ПО по работе в НИИ, но я самоучка); у нас таких систем не применяется и опыта работы с ними у меня полный ноль.
Прикольно. :) Правда, а это точно софтверный рендер — вот то, что с освещением? Вроде как карта освещенённости используется, но её в софверном варианте довольно дорого выводить.
Ну, портировать-то как раз просто. Нужно просто в cVideo задать адрес буфера, выделенного с помощью malloc или new. А после рисования вывести этот буфер чем угодно. А клавиатура в движке привязана классом CKeyboard. То есть, клавиатура там виртуальная.
Кстати, я под QNX предыдущую версию портировал.

#include "cmain.h"

CMain cMain;
extern CVideo cVideo;

//-Конструктор класса--------------------------------------------------------
CMain::CMain()
{
 VideoBufferPtr=new unsigned long[WINDOW_WIDTH*WINDOW_HEIGHT];
 cVideo.SetVideoPointer(VideoBufferPtr,WINDOW_WIDTH); 
}
//-Деструктор класса---------------------------------------------------------
CMain::~CMain()
{ 
 delete[](VideoBufferPtr);
}
//-Замещённые функции предка-----------------------------------------------
//-Новые функции класса------------------------------------------------------

//----------------------------------------------------------------------------------------------------
//открытие окна
//----------------------------------------------------------------------------------------------------
bool CMain::OpenWindow(void)
{
 PgSetDrawBufferSize(65535);
 cControl.Init(); 
 return(true);
}
//----------------------------------------------------------------------------------------------------
//закрытие окна
//----------------------------------------------------------------------------------------------------
bool CMain::CloseWindow(void)
{
 cControl.Close();	
 return(true);	
}
//-Функции обработки сообщений класса----------------------------------------
//----------------------------------------------------------------------------------------------------
//нажали или отпустили кнопку мыши
//----------------------------------------------------------------------------------------------------
void CMain::OnActivate_MouseButton(long x,long y,bool left,bool right,bool center)
{
 OnPaint();
}
//----------------------------------------------------------------------------------------------------
//перерисовать картинку
//----------------------------------------------------------------------------------------------------
void CMain::OnPaint(void)
{
 PhDim_t ImageSize;
 int ImageBPL=WINDOW_WIDTH*sizeof(unsigned long);
 ImageSize.w=WINDOW_WIDTH;
 ImageSize.h=WINDOW_HEIGHT;
 PhPoint_t pos;
 pos.x=0;
 pos.y=0;
 PgDrawImagev(VideoBufferPtr,Pg_IMAGE_DIRECT_8888,&pos,&ImageSize,ImageBPL,0);  
}

//----------------------------------------------------------------------------------------------------
//обработка таймера
//----------------------------------------------------------------------------------------------------
void CMain::OnActivate_Timer(void)
{ 
 cVideo.SetVideoPointer(VideoBufferPtr,WINDOW_WIDTH);
 cControl.Processing();	
 OnPaint();
}

//-Новые функции класса------------------------------------------------------

//-Прочее--------------------------------------------------------------------



/* Y o u r   D e s c r i p t i o n                       */
/*                            AppBuilder Photon Code Lib */
/*                                         Version 2.03  */

/* Standard headers */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <photon/PkKeyDef.h>
#include <Ph.h>
#include <Pt.h>
#include <Ap.h>

/* Local headers */
#include "ablibs.h"
#include "abimport.h"
#include "proto.h"
#include "ckbrd.h"

extern CKeyboard cKeyboard;

int OnActivate_Raw(PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )
{
 if (cbinfo->event->type==Ph_EV_KEY)
 {
  PhKeyEvent_t *kev=(PhKeyEvent_t *)PhGetData(cbinfo->event);
  long scan=kev->key_scan;
  if (kev->key_flags&Pk_KF_Scan_Valid) 
  {
   if (kev->key_flags&Pk_KF_Key_Down) cKeyboard.SetKeyState(scan,true);
                                else  cKeyboard.SetKeyState(scan&0x7f,false);
   //printf("Scan:%i\r\n",scan);                                
  }
 }
 return(Pt_CONTINUE);
}
Э… А зачем нужно от Direct Draw отвязываться? К нему наоборот привязываться надо исходя из соображений быстродействия.
Кстати, я тут про софтверный движок статью сделал: ссылка Там есть вариант с геометрическим порталом. Для работы под OpenGL достаточно из этого портала выкинуть нафиг софтверную отрисовку графики и обрезание граней при отрисовке. А вот обрезания порталов нужно оставить. Порталами у вас будут пустые грани клеток (где нет стен), а секторами — сами клетки. И вот в таком виде, думаю, все ваши проблемы с трассировкой лучей легко решатся.
Аккуратно-то аккуратно, но в устаревшей манере — я в современном Си++ плаваю, как топор (всякие лямбды и прочее для меня тёмный лес).
Там в Direct Draw просто получается адрес видеопамяти, который передаётся в класс видео CVideo. Дальше интерфейсный класс CIEngine определяет все функции вывода графики и загрузки данных. От этого класса унаследован класс CEngine_Base, в котором определены многие функции и добавлены защищённые функции, общие для все трёх вариантов движков (текстурирование линий, например). А уже от этого класса унаследованы сами движки. Все эти классы первым делом у CVideo запрашивают параметры видеоэкрана, а рисуют уже как в MS-DOS — записью в видеопамять.
Надо же. :) Ну а у меня только Amiga 500 есть. :)
Нет, через Direct Draw. В cvideo задаётся адрес видеопамяти и размер строки, которые получены от Direct Draw при захвате вторичной плоскости.
Так положить можно просто умножив вектор координат точек плоскости на матрицу вращения вокруг X на угол 90 градусов.
Это вы про Amiga 500 и 1200? :)
Да. Только не США, а РФ. :) И опыт именно в указанной сфере. :)
ведь должен же кто-то программировать системы наведения ядерных ракет.


Поперхнулся чаем. Уверяю вас, там всё сейчас очень грустно с вменяемыми программистами. Это из личного опыта.
И не забывайте автомат Вольфрама с правилом номер 30. :)
В журнале Радио были статьи о принципах работы этих систем. И насколько я помню, там нифига не простейший фильтр, и весьма серьёзная математика была.
А его уже гнобили век назад. От церкви отлучили. И до сих пор отлучение не снято, несмотря на просьбы.
А откуда на мелкозернистом матовом стекле появляется виньетирование? Там же нет дифрагм.
Да, спасибо за информацию. :) Я не думал, что можно так сделать и оно выйдет. :) Это почти чит — разменять фигуры и уйти в эндшпиль, в котором есть ситуации, когда человеку просчитать куда как проще, чем программе. Тут таблицы Налимова могут помочь. Но я их не делал.
А вы попробуйте. Я сканировал достаточно много фотографий на его режиме 4800 DPI и там основную. роль играет смазанность картинки на фотоплёнке.
А epson scan v200 photo? У него 4800 DPI оптическое разрешение.
В Новое газете? Или на сайте по ссылке?

Информация

В рейтинге
2 406-й
Откуда
Санкт-Петербург и область, Россия
Зарегистрирован
Активность