řekl jsem si, že se konečně dám cestou 3D programování a po chvilce hledání jsem našel výtečné tutoriály přesně pro mě - NeHeho pro OpenGL, tak jsem se poté, co jsem nenašel absolutně nic pro 3D přes Allegro :D
Nicméně jsem narazil na větší/menší problémek. U tutoriálu č. 10 http://nehe.ceske-hry.cz/tut_10.php je vysvětleno jak naprogramovat jednoduchý engine, který, pokud mu dodáme grafiku a data "světa" je schopen vykreslit 3D svět polepený grafikami. V tutoriálu však není vysvětleno, jak vytvořit onen svět. Pochopil jsem, jak poskládat trojúhelníky, aby dávaly smysl, rovněž jak třeba namapovat různé textury na zdi a na podlahy. Nicméně jsem nepochopil jak správně namapovat textury na zdi a podlahy (hrátky s různými texturami jsem totiž prováděl na světě kterej byl v rámci zdrojáku ke stažení, ale jakmile jsem začal dělat svůj, nastaly problémy), lépeřečeno nepochopil jsem to vůbec. Můžete mi někdo poradit? Moc díky předem.
PS: když mi napíšete jak do programu nainstalovat myš a získat její XY koordináty vzhledem k oknu aplikace, budu vděčen ;)
Ty trojúhelníky máš definované třemi vrcholy. Pro každý vrchol máš jeho souřadnice v prostoru (x,y,z) a souřadnice v textuře (u,v). Nechápu v čem je problém.
Co se týče té myši, tak pokud používáš tu verzi, jak se ve WndProc zpracovávají zprávy WM_KEYDOWN atd., tak by mělo stačit přidat zpracování WM_MOUSEMOVE.
Problém byl například v tom, vůči kterému bodu se souřadnice u,v inkrementují, metodou pokus-omyl se mi ten bod podařilo stanovit na levý spodní (přičemž vykresluju z levého horního).
Díky za odkaz na WM_MOUSEMOVE, bohužel se mi ho nepodařilo zprovoznit, definoval jsem WM_MOUSEMOVE, includnul jsem windowsx.h, vytvořil si GLuint MouseX; a pak jsem do kódu, který zjištuje jaká klávesa byla stisknuta dopsal tento kód:
#6Doomista
Nevidím tvůj kód, ale už z výroku "definoval jsem WM_MOUSEMOVE" usuzuji, že trochu tápeš.
WinAPI je založeno na zprávách, které si jednotlivá okna (komponenty) navzájem posílají. Jednou z těchto zpráv je i WM_MOUSEMOVE, která nese informaci o pozici kurzoru. Tyto zprávy se zpracovávají v tzv. smyčce okna, což je funkce, která byla předána při inicializaci okna. Tato funkce přebírá 2 argminety, běžně označované jako lParam a wParam. Tudíž lParam si nemůžeš "jen tak" deklarovat. Jak by se do něj dostala požadovaná data?
Toť trocha teorie, která není příliš podstatná. Předpokládám, že kód máš zkopírovaný z nějakého tutoriálu a moc se v něm neorientuješ. Jak jsem psal výše, než upravovat smyčku okna, bude pro tebe lepší použít funkci GetCursorPosition, kterou můžeš volat kdykoliv a kdekoliv a vrátí ti pozici kurzoru na obrazovce (nikoliv v okně). Použití je následující:
POINT point;
GetCursorPos(&point);
//struktura point nyní obsahuje pozici kurzoru.
//souřadnici x získáš voláním point.x
//součadnici y získáš voláním point.y
Nahlásit jako SPAM
IP: 85.160.57.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Bohužel můj předchozí příspěvek již nejde upravit a uvědomil jsem si jednu mou chybu. Zapomněl jsem ti napsat, jak tyto souřadnice vzhledek k obrazovce převedeš na souřadnice v rámci okna.
K tomu slouží funkce ScreenToClient (http://msdn.microsoft.com/en-us/library/dd162952%28v=VS.85%29.aspx), která předané souřadnice převede. Jako argument jí musíš předat handle okna, vůči kterému chceš souřadnice vztáhnout. Jak jsem se zběžně mrkl do NeHe, tak tam je definován jako hWnd. Volání tudíž bude vypadat následovně:
POINT point;
GetCursorPos(&point);
//struktura point nyní obsahuje pozici kurzoru v rámci obrazovky
ScreenToClient(hWnd, &point);
//struktura point nyní obsahuje pozici kurzoru v rámci okna
//souřadnici x získáš voláním point.x
//součadnici y získáš voláním point.y
EDIT: Tak jsem se ještě mrkl do zdrojáků toho tutoriálu. Smyčka ona je definována na řídku 471 a jmenuje se WndProc. V něm můžeš vidět switch, který určuje chování podle typu přijaté zprávy (uMsg). Aby jsi mohl použít radu od zlz, musel by jsi do tohoto switche přidat case WM_MOUSEMOVE: a zde ošetřit zpracování pohybu myši.
Doufám, že jsi nyní o něco chytřejší.
Nahlásit jako SPAM
IP: 85.160.57.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
#8yaqwsx
Díky, podmínka už funguje, ještě by byla fajn funkce, která by mi umožnila nastavit pozici kurzoru. Jinak máš pravdu, tápu a to víc než málo. K NeHemu jsem přešel prakticky rovnou od CMD s tím, že jsem se API ani nesnažil pochopit. Uznávám, asi je to dost stupidní