Перейти к содержанию

Открытая конференция  ·  1 пользователь

Что-то

Инфа

Авторизация  
  • запись
    1
  • комментариев
    45
  • просмотра
    542
  • Рейтинг блога
    0

Авторы этого блога



45 Комментариев


Рекомендуемые комментарии



Охота на 3д рендер, идем по следам

 

К рассмотрению >>

https://habr.com/post/248153/

 

Только там под OpenGL, у меня же DirectX. Но ниче там пока напрямую граф. API не касаются как раз таки.

А засел на понимании кода работы с TGA изображениями - tgaimage.h / tgaimage.cpp

Как раз поигрался с выравниваниями в памяти структур данных.

 

Помогло >> https://habr.com/post/142662/

В данном коде там чисто побайтовый, идущий друг за другом доступ к данным.

2018-12-28_154527.jpg.78c9fe778ea4dc15e3e1d23f55827648.jpg

 

Где-то дальше оно полюбому пригодится - походу на записи в файл, так как БЕЗ выравнивания данных пишет НЕ корректный файл.

Конкретно технически выравнивание это строка #pragma pack(push,1) где 1 это выравнивание на каждый байт, а #pragma pack(pop) это возвращение дефолтного выравнивания компилятору.

Грубо говоря этими директивами указали последовательное побайтовое размещение в памяти данной структуры, при этом остаток байтов останется "в хвосте"

Изменено пользователем Redee86

Поделиться этим комментарием


Ссылка на комментарий

Еще куча сверок внизу. Может даже придется спецификацию TGA формата нарыть, чтобы самому переписать.

Вообще если честно не люблю кучу сверок.

Идеальные примеры это когда минимальный код под минимальный пример БЕЗ нагруженности функционалом.

А тут уже все "под капотом".

Спойлер

bool TGAImage::write_tga_file(const char *filename, bool rle) {
	unsigned char developer_area_ref[4] = {0, 0, 0, 0};
	unsigned char extension_area_ref[4] = {0, 0, 0, 0};
	unsigned char footer[18] = {'T','R','U','E','V','I','S','I','O','N','-','X','F','I','L','E','.','\0'};
	std::ofstream out;
	out.open (filename, std::ios::binary);
	if (!out.is_open()) {
		std::cerr << "can't open file " << filename << "\n";
		out.close();
		return false;
	}
	TGA_Header header;
	memset((void *)&header, 0, sizeof(header));
	header.bitsperpixel = bytespp<<3;
	header.width  = width;
	header.height = height;
	header.datatypecode = (bytespp==GRAYSCALE?(rle?11:3):(rle?10:2));
	header.imagedescriptor = 0x20; // top-left origin
	out.write((char *)&header, sizeof(header));
	if (!out.good()) {
		out.close();
		std::cerr << "can't dump the tga file\n";
		return false;
	}
	if (!rle) {
		out.write((char *)data, width*height*bytespp);
		if (!out.good()) {
			std::cerr << "can't unload raw data\n";
			out.close();
			return false;
		}
	} else {
		if (!unload_rle_data(out)) {
			out.close();
			std::cerr << "can't unload rle data\n";
			return false;
		}
	}
	out.write((char *)developer_area_ref, sizeof(developer_area_ref));
	if (!out.good()) {
		std::cerr << "can't dump the tga file\n";
		out.close();
		return false;
	}
	out.write((char *)extension_area_ref, sizeof(extension_area_ref));
	if (!out.good()) {
		std::cerr << "can't dump the tga file\n";
		out.close();
		return false;
	}
	out.write((char *)footer, sizeof(footer));
	if (!out.good()) {
		std::cerr << "can't dump the tga file\n";
		out.close();
		return false;
	}
	out.close();
	return true;
}

 

 

Поделиться этим комментарием


Ссылка на комментарий

Оптимизация окружения или синхра по умному

 

Получаем локальную синхронизацию каталогов по запросу.

При этом нам ничто НЕ мешает единый каталог backup-ов - засинхрить на тот же гуглДиск.

Примечательна давняя удобная команда >>

robocopy [src] [dst] /e /purge

https://ss64.com/nt/robocopy.html

 

2019-01-30_003013.jpg.392a5dbaaddcbf6fc35275a2d0d8c956.jpg

 

Пример

2019-01-30_002520.jpg.588043cc6f2c9b1af77a711f1b0281c0.jpg

 

copy.bat >>

setlocal enabledelayedexpansion
chcp 65001

set /a n=0
for /f "usebackq delims=" %%a in ("data.txt") do (
    set /a n+=1
    set str!n!=%%a
)

set src=%str1%
set gd=%str2%

robocopy "%src%" "%gd%" /e /purge

data.txt >>

d:\\MyProgs_Add
d:\\GD\\MyProgs_Add\\MyProgs_Add

Поделиться этим комментарием


Ссылка на комментарий

DirectX и хардкод

 

DXUT как часть Microsoft DirectX SDK (June 2010) >> c:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\DXUT\

Используется для построения GUI.
Есть дока в chm >> "c:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Documentation\DirectX9\directx_sdk.chm" 

2019-02-21_131334.jpg.289387c42a879e8f47531ae589ae2f86.jpg

 

Преимущество для отрисовки и логики формы - отрисовка всего через DX.

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

Поделиться этим комментарием


Ссылка на комментарий

Visual Studio - cтатическая линковка MSVC

 

Статическая линковка MSVC.

Получаем EXE который НЕ зависит от установки на машину MSVC redistributable.

Цитата

C/C++ then 'Code Generation'. Change the 'runtime library' setting to 'multithreaded'

2019-02-21_155647.jpg.422653ae9610cb5c4be5c96c1b57ba4f.jpg

Поделиться этим комментарием


Ссылка на комментарий

Что читать ?

 

Да вот что >> 

Роджерс Д., Адамс Дж. - Математические основы машинной графики - 2001

https://rutracker.org/forum/viewtopic.php?t=4735251

 

И еще одна книга в продолжение >

Роджерс Д. - Алгоритмические основы машинной графики - 1989

http://www.studmed.ru/rodzhers-d-algoritmicheskie-osnovy-mashinnoy-grafiki_99ccb2eefa7.html

 

Луна Ф. - Введение в программирование 3d игр с DirectX 9.0 - 2003

http://padabum.com/d.php?id=43251

http://gamesmaker.ru/books/vvedenie-v-programmirovanie-3d-igr-s-directx-9/

 

2019-02-23_190616.thumb.jpg.de84f8729c4ec8cece599c881eab4641.jpg  2019-02-24_130656.thumb.jpg.9dfeefcb14be2b8e177f74b14c34176c.jpg  2019-03-06_215854.thumb.jpg.f17e2753a9977d8c5e679a3764dffd8e.jpg

Изменено пользователем Redee86

Поделиться этим комментарием


Ссылка на комментарий

Аппроксимация - разложение на более простые составляющие - например кривую можно описать множеством отрезков.

Допустим чистая прямая без эффектов сглаживания - растрируется на экране пикселями.

 

2019-03-05_000321.jpg.e44b0aa6d1bd0837e9b7ccb8e7c84ea5.jpg

Поделиться этим комментарием


Ссылка на комментарий

Почитывая Дэвида Роджерса, понимаешь что это все круто и классно, но на это нужно много времени.

Да мы можем НЕ понимать как аппаратно "числа" устроены в видеокарте.

Но можем что-то сделать по примерам и уже по прикладной части ориентироваться.

Роджерс хорош как справочник скорее, когда роешь более глубоко для конкретных нужд.

 

Щас думаю может вернуться в DirectX - Фрэнка Луны.

А что получим в итоге. Максимум что можно вынести - это свой рендер на DX.

 

И еще ведь потребуется делать минимальный движок - это тоже время.

Поэтому задумываюсь может брать готовый движок, тот же UE4 и уже его изучать, потому что это огромное количество времени и сил чтобы получить Свое "с нуля".

 

Хоть меня и НЕ устраивает тяжеловесность и тормознутость бесплатных САПР по созданию игр, но вместе с этим НЕ нахожу более оптимального решения для быстрого результата.

 

То есть для простой 3д игры лучше брать готовый движок - так как мы ее получим быстрее, чем будем создавать свой движок, а потом делать игру.

Тут всегда 2 выбора или Свое но долго и сложно, но получаешь Скорость исполнения и максимальную оптимизацию под свою игру, либо брать Универсальное с большим функционалом, НО требовательное к ресурсам компа.

Изменено пользователем Redee86

Поделиться этим комментарием


Ссылка на комментарий

Вектор определяется 1 точкой по X Y Z относительно начала системы координат.

Вектор хранит лишь 2ва параметра - направление и длину - sqrt(x² + y² + z²).

 

Можем спокойно вычислить координату в будущее прибавляя длину по гипотенузе - опираясь на любое из соотношений катета к гипотенузе - sin или cos.

Используя нормализацию вектора - приведение к единичной длине - x/длина, y/длина, z/длина.

Тем самым узнаем как изменяются координаты за единицу длины.

 

Нормализация наглядно проверяется если гипотенуза равна катету, тобиж угол между ними равен 0° - например x=0, y=0, z=2.

Будет sqrt(0² + 0² + 2²) = как видно длина равняется 2.

Далее 0/2, 0/2, 2/2 = 0, 0, 1.

2019-03-06_171302.jpg.dfa7df2d29135634139f25e461bd5716.jpg

 

Чтобы легче представлять - катеты определяются по осям, затем результирующая точка направляется в начало системы координат.

Допустим в начале определили точку по x и y потом подняли на n единиц по оси z - образовали 3 катета.

 

1ый класс 2ая четверть, но все же все же - для лучшего усвоения ).

Поделиться этим комментарием


Ссылка на комментарий
D3DXPLANE pl;
D3DXVECTOR3 n(0, 0, 3);
D3DXVECTOR3 p(0, 0, 10);
D3DXPlaneFromPointNormal(&pl, &p, &n);

Debug_Plane(pl);
	
// ABCD = 0 0 3 -30

// D = -n * p
// (0 0 -3) * (0 0 10) = 0*0 + 0*0 + -3*10 = -30

// проверка точки на плоскости
// 5, 1, 10
// Ax + By + Cz + D = 0
// 0*5 + 0*1 + 3*10 + (-30) = 0 + 0 + 30 - 30 = 0

// на плоскости, отрицательное и положительное полупросранство
std::cout << D3DXPlaneDotCoord(&pl, &D3DXVECTOR3(2, 4, 10)) << std::endl;
std::cout << D3DXPlaneDotCoord(&pl, &D3DXVECTOR3(2, 4, 9.5f)) << std::endl;
std::cout << D3DXPlaneDotCoord(&pl, &D3DXVECTOR3(2, 4, 11.5f)) << std::endl;

// если вектор нормали единичный (нормализованный)
// Ax + By + Cz + D или n * p + D = расстояние от точки к плоскости

n = D3DXVECTOR3(0, 0, 1);
D3DXPlaneFromPointNormal(&pl, &p, &n);
Debug_Plane(pl);
std::cout << D3DXPlaneDotCoord(&pl, &D3DXVECTOR3(2, 4, 10)) << std::endl;
std::cout << D3DXPlaneDotCoord(&pl, &D3DXVECTOR3(2, 4, 9.5f)) << std::endl;
std::cout << D3DXPlaneDotCoord(&pl, &D3DXVECTOR3(2, 4, 12.5f)) << std::endl;

Поделиться этим комментарием


Ссылка на комментарий

Wolfram Mathematica не только для удобных вычислений задач, но и для поиска общей информации и структуризации данных.

Можно получать комплексную информацию - просто вводим два знака равно "==" перед фразой.

Так скажем в чем-то более продвинутый "гугл".

Один нюанс конечно - запрос и ответ только на английском.

 

2019-03-10_225605.thumb.jpg.226176624a299b54e28417b6504ebe54.jpg   2019-03-10_225440.thumb.jpg.d77706887e13fa9a6adb55071fbdeafb.jpg

Изменено пользователем Redee86

Поделиться этим комментарием


Ссылка на комментарий

Маржинальная торговля применяется для открытия позиций в короткую - в "short".

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

 

Потери на позиции минусуют ваш маржинальный счет - если плече 1 к 4, зашли на $10, то открывается позиция на общую сумму в $50.

То есть если идет минус по $50, допустим $3, получилось $47 - он отражается на $10, получается $7.

Кредитор в этом случае вообще ничем НЕ рискует, если потери укладываются в $10 - минус полностью оплачиваем мы.

В случае если мы зарабатываем и закрываем плюсово позицию - просто возвращаем займ "плече", а профитный остаток зачисляется на маржинальный счет.

 

На биржах есть граница ликвидации, но потери при ликвидации Гораздо выше, чем если выставлен почти на том же уровне Стоп лимит - тобиж сохраняем средства, а не "обнуляем" маржинальный баланс.

При открытии маржинальной позиции берется комиссия каждый раз за определенное время. Поэтому держать их долго тоже убыточно.

Читаем внимательно о комиссиях, когда открываем позиции через "плечи".

Изменено пользователем Redee86

Поделиться этим комментарием


Ссылка на комментарий

А че показатель RSI - норм тема - 3 раза в месяц в среднем на 4ех часовом графике - под эту тему и можно заходить с максимальным 100ым плечом по маржиналке на BitMEX.

Грубо говоря когда биток сходит в район 3700-3600, если сходит - можно искать точку входа в Long.

Изменено пользователем Redee86

Поделиться этим комментарием


Ссылка на комментарий

Индикатор RSI, если выходит за рамки

снизу - переПроданность - избыток монеты, цена низкая или Должна падать

закупаем Лонг, когда RSI снизу + низкая цена

 

сверху - переКупленность - дефицит монеты, цена высокая или Должна повышаться

продаем Шорт, когда RSI сверху + высокая цена

 

2019-03-28_170747.jpg.149d32c1012951160a8fb09d2fd4205d.jpg

Изменено пользователем Redee86

Поделиться этим комментарием


Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

Ограничения

Сайт предназначен для лиц старше 18 лет. Pushfold.ru не участвует в организации игр на реальные деньги, сайт носит исключительно информационный характер. Деятельность портала осуществляется в соответствии с законодательством РФ.

Поддержка

telegram: skyzuhel

skype: pushfold.ru

e-mail: info@pushfold.ru

Информация

Наша команда

Реклама на сайте


ПРИСОЕДИНЯЙТЕСЬ К НАМ
×