Касательно наблюдений, просьб, замечаний итд итп
Rey - 2014-01-07 10:47:05
Вот читаю старые уроки.
Некоторые уроки написаны класно. В некоторых есть опечатки и мелкие ошибки. А некоторые очень плохо даются (по моему мнению коечто нужно былобы описать более подробнее для более лучшего понимания). Ну например урок про "Преобразования координатных пространств" из раздела Математика.Тема кстати очень важная.
И вот допустим я бы мог поделится как читатель мнением о том , что и как былобы лучше описать подробнее и где конкретно плохо понятно. Стоит ли? И если стоит то куда и как это изливать)
Я ничють не стремлюсь навязать свое мнение или упоси бог вобще не хотел бы напрягать для переписывания. Я имею ввиду,что допустим ябы мог сам както отредактировать статью указав там, что лично для меня слабо понятно. Вы бы пересмотрели и возможно чтонибуть изменили. Ну както так.
Answers:
2014-01-08 20:37:24
rshatalov
Считаю, такие замечание очень ценны. Но старые уроки лучше пока не трогать.
Для этого будут комментарии. Сейчас напишу несколько уроков и включу возможность комментировать.
коментировать новые или старые?
хоть мы и называем их старыми но всеже там реально 70% необходимого)
2014-01-08 22:17:13
rshatalov
Комментировать можно будет только новые. Со временем все важные старые перенесу.
вот прочитал урок по дх11 и захотелось вот такое создать )
http://s017.radikal.ru/i433/1401/cc/90e08d4ec34e.gif
могбы наподобии такого делать для сайта если нужно)
кстати если у меня вид.ъа не держит 11.1 дх что делать?(только 11) Я думаю много у кого еще нескоро будет такая видеоплата.
2014-01-10 18:20:01
rshatalov
> могбы наподобии такого делать для сайта если нужно)
Пока не нужно. Урок ещё будет редактироваться, там видно будет.
> кстати если у меня вид.ъа не держит 11.1 дх что делать?(только 11) Я думаю много у кого еще нескоро будет такая видеоплата.
Ставить 11_0. Сейчас пойдут уроки, где описываются основные возможности - всё будет работать и с 11_0.
открыть бы коменты к урокам много чего хотелосьбы обсудить например настройку проекта для дх11 итд
2014-01-26 20:55:15
ra9ycj
Эх, вот в последнем уроке, даже не знаю как победить чтоб запускалось (win 8.1). Даже готовый .ехе и тот не работает, вылетает ошибка (работа программы прекращена). :(
Попытки запустить в режиме совместимости положение не улучшают.
2014-01-28 01:08:59
scwosh
Роман, скажите, а комментарии к старым урокам утеряны безвозвратно? Или их можно вернуть?
сейчас пытаюсь разобратся с рестаризацией обьектов в дх. Могу сказать что у меня вызывает трудности:
1) Общая схема принципа работы дх от а до я в рестеризации т.е. Читаеш читаеш и чем дальше тем сложнее представить общюю схему работы. Я сторонник того что если непонимаеш образно механику работы то результат пониманя чего либо = 0.
Допустим теже шейдеры. Понятно что они нужны, понятно что мы их там создаем должным образом. Но крайне непонятно в общем какую функцию они выполняют. Насколько я понял именно эти шейдеры регулируют позиционирование в том чиле и анимацию движения отображения итд. Именно в них производятся умножение матриц и все то что у нас в уроках математики (за исключением камеры тут я ваще пока в недоумении). А пиксельный за цвет и возможно какоето освещение тени итд.
2) Сталкиваюсь с тем что кое где идет конкретное указание кол. вершин.Недоумение - неужели что если делать игру то везде в каждм отбьекте , ланшафте мире и всем всем при рисовании всегда нужно щитать кол вершин и указывать их? Госпади что серьезно?!
Удалось запустить урок по дх на win7 sp1 visual studio 2012 после следующих манипуляций.
1) Создание нового проекта в VS2012 и копирование исходного кода урока в новый .cpp фаил проекта.
2) Настройка проекта и подключение библиотек (Каталоги VC++ > Каталоги включения > $(DXSDK_DIR)Include, Каталоги библиотек > $(DXSDK_DIR)Lib\x86, Компановщик >
d3d11.lib
d3dcompiler.lib
d3dx11d.lib
d3dx9d.lib
dxerr.lib
dxguid.lib
winmm.lib
comctl32.lib )
3) Изменение строки D3D_FEATURE_LEVEL FeatureLevels = D3D_FEATURE_LEVEL_11_1 на 11_0. Была ошибка про 120.dll
Этобы все неплохобы в урок добавить. Нет ничего хуже когда качаеш урок а он не пашет )
Эх пропал Ромка где-то =(
2014-02-03 08:26:23
rshatalov
> ra9ycj
Какие ошибки выдаёт?
2014-02-03 08:33:26
rshatalov
> Rey
1. Нужно рассматривать в общем графический конвейер. И да, шейдеры в DirectX 11 играют определяющую роль.
2. К сожалению, да. Нужно указывать количество вершин.
> Удалось запустить урок по дх на win7 sp1 visual studio 2012 после следующих манипуляций.
Появятся комментарии, там у будет подобное собрано. Старых комментариев было много. Думаю, и сейчас люди подтянутся. В одиночку рассмотреть все варианты невозможно.
> Эх пропал Ромка где-то =(
Разбирался с DirectX под Windows 8. Сегодня дописал урок по компиляции шейдеров, заглянул в комментарии.
2014-02-03 08:34:20
rshatalov
>scwosh
>Роман, скажите, а комментарии к старым урокам утеряны безвозвратно? Или их можно вернуть?
Если сильно нужно, то могу включить на старом сайте - чтобы читать. Добавлять новые уже будет нельзя.
Ура Ромка вернулся =)
Есть вопрос. Много уроков везде по дх11 но не водном толком не нашол как нарисовать 2 разных обьекта.Я думаю это заслуживает отдельного урока. Т.е. там начинают с треугольника потом куб потом 2 куба, потом над этими кубиками издеваются итд Но вот как нарисовать допустим куб и сферу рядом негде нету =\. Очень интересует как это правильно сотворить. + еще как загружать модели допустим из 3d Maya, как вариант наполнения 3д мира усилиями внешних редакторов а не бумагой и карандашиком.
2014-02-03 21:23:19
scwosh
Да Роман, если можно - верните комментарии на старом сайте. Заранее спасибо!)
2014-02-04 18:33:03
rshatalov
> scwosh
Вернул.
2014-02-04 18:34:27
rshatalov
> Rey
Согласен, вопрос заслуживает внимания :)
Но сначала неплохо было бы дописать урок по рисованию треугольника. Дальше пока не загадываю.
2014-02-04 18:51:01
rshatalov
> Rey
Добавь, если не трудно, свой комментарий (запуск программы в Windows 7) в соответствующий урок.
Прочитал про потоки. Думаю неплохобы расширить абзац про полезность и выгоду этого явления парами предложений.Раз уж это вводный урок в такую наверно важную тему). Немного более подробно описать в теории функционал и полезность. Трудно уловить подчеркую -> насколько это важно или не важно.
Сначало хотел создать тему но решил спросить сначало здесь. Вобщем вот какая ситуация :
В данный момент бороздя просторы интернета в уроках по дх вин апи итд натыкаюсь то тут то там на некоторые источники познаний. Разные афторы по разному преподносят уроки начиная от минимум кода по конкретному вопросу до глобальных проэктов типо создаем Framework для дх итд итп. Собственно иногда изучая это все натыкаешся на что либо непонятное.
В следствии чего возникает желание это самое непонятное понять =). Так как мое окружение знакомых глядя на то что я читаю в ужасе крестятся, хотелось бы некоторые не понятные вопросы вынести на расмотрение здешней аудитории. В свою очередь я понимаю, что это отнимает время особенно если вываливать кучю кода и спрашивать АШО ЭТА ТАКОЕ АГА?!(лично я такое не люблю)Но всеже может другие пользователи откликнутся по какимто мелким вопросам. Както так. Короче как быть решать Ромке) Толи создать на форуме тему для этого толи вобще отрезать такое. Или както еще.
2014-02-06 07:38:54
rshatalov
> Прочитал про потоки. Думаю неплохобы расширить абзац про полезность и выгоду этого явления парами предложений.
Я, наоборот, ещё хотел сократить слишком затянутое вступление - два абзаца явно лишние. Считаешь, нужно что-то добавить, добавляй в теме про потоки в комментариях. Критика тоже приветствуется.
> Толи создать на форуме тему для этого толи вобще отрезать такое.
Сейчас на форуме ещё мало народу. Лично я считаю, что такое обсуждение кода полезно. У каждого свой опыт - кто-то подскажет решение, кто-то почерпнёт что-то новое.
Мне нечего добавлять в коменты туда. Я неразбераюсь в этой теме. А задавать впопросы в коменты - это значит что урок недостаточно хорош. Цель урока то изнечтожать вопросы с умов несчастных чтоб было все ясно и понятно ) Чем понятнее урок тем он лучше.
Кхм вобщем такое дело какбы это его обьяснить.
В данный момент изучаю следующее:
1) Как рисовать обьект (вертекс буфер + вертекс шейдер + интекс буфер + COLOR/NORMAL)
2) Как его двигать (установка матриц + их изменение + констант буфер)
3) Как освещать его (задавая источник света + его цвет + его тоже можно вращать/перемещать)
4) Как обтягивать его всякими текстурками.
Так вот о чем это я...Входе изучения этого всего я сталкнулся с 2 проблемами:
1) Понять что такое первые 4 пункта и зачем они нужны.
2) Взаимодействие этого всего конкретно в функции рисования.Т.е. что должно быть первое что второе и ПОЧЕМУ так, сколько раз повторять чтолибо для рисования одного обьекта и что нужно повторять также для создания уже другого.
Часть 2ая.
Если расматривать по времени и унижении моего мозга то отношение 1ой и 2ой проблемы 20/80.
Просто хочу выразить пожелания того что в ходе написания уроков по этому всему желательно уделить второй проблеме побольше внимания.
Так же мнебы с позваления мною глубокоуважемого Ромки хотелось бы, после того как я сам в этом доконца разберусь гденибуть выложить общее дополнение к этим урокам касательно второй проблемы где бы я сам описал сие действо со стороны человека который недавно в этом собсно и разобрался.
Зачем.
Потому что, в плане обьяснения чего либо тот человек который делает уроки обычно уже не может в голове родить те вопросы которые реально вылазят боком для тех кто учиться.Некоторые моменты которые он уже знает в свою очередь так же косвено думает что они будут понятны и другим. Это я почувствывал на себе читая уроки по всему интернету. И не хочу чтобы Ромкины уроки были такимиже =)
В этом всем я варюсь гдето 4 месяца от хелооворлд и до сегодня. И могу сказать что большая чать моих знаний получино именно из old.shatalov.su За что моя еще одна благодарность тебе) Просто хочеться както тоже в свою очередь помогать ресурсу а непросто надоедать вопросами итд итп. Вот и предлогаю чтонибуть такое + все что выше по теме.
2014-02-18 13:15:21
Петренко Михаил
Как насчёт того ,чтобы располагать ссылки на сайт в соц? сетях.Глядишь и народ подтянется,образованней станет :)
2014-02-23 09:15:56
Aleksey11
Rey, msdn - самый лучший учебник по DirectX.
а по всем вопросам - gamedev.ru/.net в помощь.
2014-03-22 04:32:42
Петренко Михаил
Побольше бы заданий к урокам,чтобы лучше понять темы.А к заданиям ответы,чтобы было ясно как надо делать.А примеры программ в уроках можно было бы заключать в зелёные рамки для наглядности.
Не инициализируется DirectInput. Работаю в Сode::Blocks, Visual Studio почему-то не идет. Код такой:
#include <windows.h>
#include <d3d9.h>
#include <dinput.h>
LRESULT __stdcall WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
struct vertex{
FLOAT x,y,z;
DWORD color;
};
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
WNDCLASS wc;
wc.style = CS_OWNDC;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(6);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpszClassName = "class";
wc.lpszMenuName = NULL;
RegisterClass(&wc);
HWND hWnd = CreateWindow("class","программа",WS_OVERLAPPEDWINDOW,200,100,500,500,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
IDirect3D9* d3d = NULL;
IDirect3DDevice9* dev = NULL;
IDirect3DVertexBuffer9* vb = NULL;
d3d = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS pp;
ZeroMemory(&pp,sizeof(pp));
pp.BackBufferWidth = 500;
pp.BackBufferHeight = 500;
pp.BackBufferFormat = D3DFMT_UNKNOWN;
pp.BackBufferCount = 1;
pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.hDeviceWindow = hWnd;
pp.Windowed = true;
d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&pp,&dev);
dev->CreateVertexBuffer( 6* sizeof(vertex), D3DUSAGE_WRITEONLY,D3DFVF_XYZ|D3DFVF_DIFFUSE, D3DPOOL_DEFAULT,&vb,NULL);
dev->SetRenderState(D3DRS_LIGHTING, false);
IDirectInput8* di;
IDirectInputDevice8* didev;
DirectInput8Create(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&di,NULL);
di->CreateDevice(GUID_SysMouse,&didev,NULL);
didev->SetDataFormat(&c_dfDIMouse);
didev->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
didev->Acquire();
vertex vertices[] =
{
{ -2.5, -2.5, 0, 0xff000000},
{ -2.5, 2.5, 0, 0xff000000},
{ 2.5, -2.5, 0, 0xff000000},
{ -2.5, 2.5, 0, 0xff000000},
{ 2.5, 2.5, 0, 0xff000000},
{ 2.5, -2.5, 0, 0xff000000}
};
MSG msg;
void* vb_vertices;
HRESULT hr = NULL;
DIMOUSESTATE dims;
ZeroMemory(&dims,sizeof(dims));
D3DMATRIX matWorld;
matWorld._11=1; matWorld._12=0; matWorld._13=0; matWorld._14=0;
matWorld._21=0; matWorld._22=1; matWorld._23=0; matWorld._24=0;
matWorld._31=0; matWorld._32=0; matWorld._33=1; matWorld._34=0;
matWorld._41=0; matWorld._42=0; matWorld._43=100; matWorld._44=1;
D3DMATRIX matCam;
matCam._11=1; matCam._12=0; matCam._13=0; matCam._14=0;
matCam._21=0; matCam._22=1; matCam._23=0; matCam._24=0;
matCam._31=0; matCam._32=0; matCam._33=1; matCam._34=0;
matCam._41=0; matCam._42=0; matCam._43=0; matCam._44=1;
dev->SetTransform(D3DTS_VIEW, &matCam);
D3DMATRIX matProj;
matProj._11=1; matProj._12=0; matProj._13=0; matProj._14=0;
matProj._21=0; matProj._22=1; matProj._23=0; matProj._24=0;
matProj._31=0; matProj._32=0; matProj._33=1; matProj._34=1;
matProj._41=0; matProj._42=0; matProj._43=-1; matProj._44=0;
dev->SetTransform( D3DTS_PROJECTION, &matProj );
while (1){
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
dev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,255),1.0f,0);
didev->GetDeviceState(sizeof(DIMOUSESTATE),&dims);
if (dims.rgbButtons[0] & 0x80)
for (int i = 0; i < 6; i++)
vertices[i].color = 0xffff0000;
if (dims.rgbButtons[1] & 0x80)
for (int i = 0; i < 6; i++)
vertices[i].color = 0xff00ff00;
if (dims.rgbButtons[2] & 0x80)
for (int i = 0; i < 6; i++)
vertices[i].color = 0xff0000ff;
for (int i = 0; i < 6; i++){
vertices[i].x += dims.lX;
vertices[i].y -= dims.lY;
}
matWorld._43 += dims.lZ/10;
dev->SetTransform(D3DTS_WORLD, &matWorld);
vb->Lock(0,sizeof(vertices),(void**)&vb_vertices,0);
memcpy(vb_vertices,vertices,sizeof(vertices));
vb->Unlock();
dev->BeginScene();
dev->SetStreamSource(0,vb,0,sizeof(vertex));
dev->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);
dev->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);
dev->EndScene();
dev->Present(NULL,NULL,NULL,NULL);
}
if (didev != 0){
didev->Unacquire();
didev->Release();
}
if (di != NULL)
di->Release();
if (vb != NULL)
vb->Release();
if (d3d != NULL)
d3d->Release();
if (dev != NULL)
dev->Release();
UnregisterClass("class",hInstance);
return 0;
}
LRESULT __stdcall WndProc (HWND hWnd, UINT msg,WPARAM wParam,LPARAM lParam){
switch (msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
Все библиотеки подключены. Пишет
undefined reference to 'IID_IDirectInput8A'
undefined reference to 'DirectInput8Create@20'
undefined reference to 'GUIS_SysMouse'
undefined reference to 'c_dfDIMouse'
я бы взял рабочий пример с раздела листингов (например про камеру) и скопировал настройки подключений либов.
VC проекты в Code::Blocks все равно не работают, а для исходников все равно заново библиотеки подключать нужно.
Скачал исходник sprites и подключил нужные библиотеки. Выдает те же ошибки.
2014-07-29 16:28:42
Aleksey11
Herrm, значит ты плохо подключил.
Несколько раз переподключал, на двух разных компьютерах.
Подключил в Visual Studio 2013 с помощью #pragma comment (lib,"имя_библиотеки").
Заработало!
Не получается вывести изображение на экран. Ошибка First-chance exception at 0x751B812F in DrawCube.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0030F290.
Код:
std::ifstream is("CloseButton.bmp", std::ios::binary);
const unsigned short
FILE_HEADER_SIZE = 14,
IMAGE_HEADER_SIZE = 40,
IMAGE_WIDTH = 30,
IMAGE_HEIGHT = 30;
BITMAPFILEHEADER bmh;
bmh.bfType;
bmh.bfSize;
bmh.bfReserved1;
bmh.bfReserved2;
bmh.bfOffBits;
char r = 0, g = 0, b = 0, a = 0;
is.read(reinterpret_cast<char*> (&bmh.bfType), sizeof(bmh.bfType));
is.read(reinterpret_cast<char*> (&bmh.bfSize), sizeof(bmh.bfSize));
is.read(reinterpret_cast<char*> (&bmh.bfReserved1), sizeof(bmh.bfReserved1));
is.read(reinterpret_cast<char*> (&bmh.bfOffBits), sizeof(bmh.bfOffBits));
BITMAPINFOHEADER bmih;
bmih.biSize;
bmih.biWidth;
bmih.biHeight;
bmih.biPlanes;
bmih.biBitCount;
bmih.biCompression;
bmih.biSizeImage;
bmih.biXPelsPerMeter;
bmih.biYPelsPerMeter;
bmih.biClrUsed;
bmih.biClrImportant;
is.read(reinterpret_cast<char*> (&bmih.biSize), sizeof(bmih.biSize));
is.read(reinterpret_cast<char*> (bmih.biWidth), sizeof(bmih.biWidth));
is.read(reinterpret_cast<char*> (bmih.biHeight), sizeof(bmih.biHeight));
is.read(reinterpret_cast<char*> (&bmih.biPlanes), sizeof(bmih.biPlanes));
is.read(reinterpret_cast<char*> (&bmih.biBitCount), sizeof(bmih.biBitCount));
is.read(reinterpret_cast<char*> (&bmih.biCompression), sizeof(bmih.biCompression));
is.read(reinterpret_cast<char*> (&bmih.biSizeImage), sizeof(bmih.biSizeImage));
is.read(reinterpret_cast<char*> (bmih.biXPelsPerMeter), sizeof(bmih.biXPelsPerMeter));
is.read(reinterpret_cast<char*> (bmih.biYPelsPerMeter), sizeof(bmih.biYPelsPerMeter));
is.read(reinterpret_cast<char*> (&bmih.biClrUsed), sizeof(bmih.biClrUsed));
is.read(reinterpret_cast<char*> (&bmih.biClrImportant), sizeof(bmih.biClrImportant));
char* CloseButton = new char[bmih.biWidth * bmih.biHeight * bmih.biBitCount * 4 / 32];
for (unsigned int i = bmih.biHeight; i > 0; --i)
{
for (unsigned int j = 0; j < bmih.biWidth; ++j)
{
is.read(reinterpret_cast<char*>(&b), sizeof(b));
is.read(reinterpret_cast<char*>(&g), sizeof(g));
is.read(reinterpret_cast<char*>(&r), sizeof(r));
is.read(reinterpret_cast<char*>(&x), sizeof(x));
CloseButton[(bmih.biWidth * i + j) * 4] = b;
CloseButton[(bmih.biWidth * i + j) * 4 + 1] = g;
CloseButton[(bmih.biWidth * i + j) * 4 + 2] = r;
CloseButton[(bmih.biWidth * i + j) * 4 + 3] = 0;
}
}
is.close();
RECT CloseButtonSize;
CloseButtonSize.left = WND_WIDTH - 30;
CloseButtonSize.top = WND_HEIGHT;
CloseButtonSize.right = WND_WIDTH;
CloseButtonSize.bottom = 10;
D3DLOCKED_RECT CloseButtonRect;