játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5511
FZoli:    4894
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2529

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2198
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] > 70 < [75] [80] [82]
Birmacher - Törzstag | 516 hsz       Online status #23870   2006.08.03 01:27 GMT+1 óra  
nem ezt akartam, azt már megoldottam, viszont most kipihenve és belegondolva nem tom mér tettem fel a kérdést, na mind1, azér köszi

   
MaNiAc - Szerkesztő | 1735 hsz       Online status #23859   2006.08.02 23:14 GMT+1 óra  
Ezt akartad kerdezni tegnap este MSN-en? Ha igen, a valaszom:

Elsore nem nagyon vagtam le, mi köze lenne a display listnek a bump maphez. De ha a bump maped nem annyiban merül ki, h rahuzol egy texturat + egy masikat, s a ketto blendelese kiemeli az eleket, hanem pl. shaderrel csinalod full dinamikusra, amit befolyasol a per-pixel feny, etc. akkor tenyleg nem lehet... Szerintem.
Dare to imagine!
http://www.insaneidea.hu
   
Birmacher - Törzstag | 516 hsz       Online status #23841   2006.08.02 15:52 GMT+1 óra  
Nehe tutorban olvastam, hogy Bump Mappingnél nem használható Display List ez igaz?

   
gaborlabor - Moderátor | 4449 hsz       Online status #23556   2006.07.31 17:50 GMT+1 óra  
Ok, holnap, vagyis még ma megpróbálom minél jobban helyrerázni a kódot, aztán majd bemásolom ide.
Ja, egy kis gond már most is van. Az egérkezelő függvényt a
glutPassiveMotionFunc()-kal akartam először kezeltetni. Viszont ha ez
Kód:
glutPassiveMotionFunc(mouse) ;

benne volt a main függvényben, akkor a program főablaka, vagyis a teljes képernyős megjelenítés meg sem jelent, csak a konzol ablak.
Ezért az egér kezelését kénytelen voltam ideiglenes úgy megoldani, hogy van egy időzített függvény, ami 20 ezredmásodpercenként meghívja a mouse(int x, int y) függvényt. A 20 ms nem lehet túl sok, mert kipróbáltam hogy billentyűzetet is így kezelek és az megy rendesen. Aztán megpróbáltam úgy is, hogy az időzített függvényt kidobtam, és helyette a renderelő függvény elején hívom meg a mouse(int x, int y) függvényt. Ez meg még rosszabb, mert nagyon szaggat az egérkezelés.
A legjobb az lenne, ha meg tudnám csinálni, hogy a glutPassiveMotionFunc() kezelje az egérkezelő függvényt.

   
KergeDelfin - Törzstag | 667 hsz       Online status #23553   2006.07.31 17:23 GMT+1 óra  
Hát csak akkor láttam utoljára ilyet, amikor ezt tesztképpen 90-re állítottam. ^o)
Igen, furcsán viselkedik és lassan követi az egér mozgását. Jó lenne ha tudnál kódot is másolni, mert csak tippelgetni tudok/tudunk, az meg nem elég jó
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
gaborlabor - Moderátor | 4449 hsz       Online status #23550   2006.07.31 17:15 GMT+1 óra  
Jó is hogy felvetetted, mert ezt még nem értem teljesen. Valami oylasmit olvastam azzal a parméterrel kapcsolatban, hogy az az a szög, amekkorát a felhasználó zár be a monitorral. Ha mondjuk képzeletben húzok egy vonalat köztem és a monitor közepe között, akkor az a vonal 90°-ot zár be a monitorral. Viszont ha köztem és a monitor egyik széle között húzok egy vonalat, akkor az a szög lehet akár 45°-os is. Azért nem értettem, mert láttam példaprogramot amiben 90 volt, meg láttam olyat is amiben meg 45. Ezt tisztázhatná valaki egy kicsit.
De te honnét gondoltad, hogy nálam 90-re van állítva? Mert 45-ön van:
Kód:
gluPerspective(45, w / h, 0.01, 1000);


Úgyhogy nem ezzel van a probléma. Nálad is olyan furcsán viselkedett az egérlezelés? Úgy tűnik, mintha az átlós mozgásra érzékenyebb lenne mint a függőleges vagy vízsszintes mozgatásra, pedig elvileg nem lehetne ilyen.

   
KergeDelfin - Törzstag | 667 hsz       Online status #23549   2006.07.31 16:58 GMT+1 óra  
gluPerspective első paramétere (Field of View) mekkorára van állítva?
90 fok az egy picit sok, állítsd át mondjuk 45-re.
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
gaborlabor - Moderátor | 4449 hsz       Online status #23547   2006.07.31 16:36 GMT+1 óra  
Újabb fejlemények. Rájöttem mitől volt a függőleges irányú forgás darabossága. Abban nem az egérkezelő volt a hibás, hanem azt az egész részt én rontottam el úgy hogy van. Azt kompletten újraírtam a vizszintes forgás alapján. Ezután a darabosság megszűnt, normálisan forog minden irányba. Viszont ez az egérkezelési módszer nem tutti, vagy csak az én függvényem rossz, mert néha nagyon belassul tőle a program, néha meg rakoncátlankodik.
Kódot azért nem rakok be, mert annyira gány az az egész a sok átirogatástól, vagdosástól, hogy még énis alig igazodok ki rajta.
Inkább nézzétek meg az exét, ha kipofoztam a kódot, majd rakhatok be azt is.
3D.exe

   
gaborlabor - Moderátor | 4449 hsz       Online status #23545   2006.07.31 16:04 GMT+1 óra  
Na, asszem sínen vagyok. Ahogy az előző hsz-emben irtam, ugy most lekódoltam és a lényege müxik. Bár a kamrea forgatása lassú mégis darabos, de legalább müxik és az egérrel lehet irányítani. Már bevezettem néhány változót, amikkel a sebességeket lehet állítani, de még nem sikerült belőnöm úgy hogy normálisan lehessen irányítani. Remélem ez már csak apróbb munkálatokat fog igényelni.
Köszönöm az ötleteket és a segítséget!

   
gaborlabor - Moderátor | 4449 hsz       Online status #23544   2006.07.31 14:54 GMT+1 óra  
igen, tudom, a spectator móddal kapcsolatban igazad van, azért irtam utána, hogy mire is gondolok. (bár asszem cs1.6-ban nincs ütközésvizsgálat olyankor, a pályáról is ki lehet "repülni".
Megpróbálom ugy megoldani, hogy a program legelején az egérkurzort elhelyezem a képernyő közepére. Ezután ciklikusan megvizsgálom hogy az x és az y mennyivel változott meg, és ennek megfelelően járok el, végül pedig visszahelyezem középre az egérkurzort, és kezdődik előlről. Ennek igy müködnie kell, remélem meg tudom oldani.
Köszi a segítséget!

   
KergeDelfin - Törzstag | 667 hsz       Online status #23542   2006.07.31 14:47 GMT+1 óra  
Ütközésvizsgálat van, legalábbis a JK2-ben - spectator módban is (Q3 motor)
A DirectInputnak semmi köze az itt felvetett kérdéshez Főleg mert ez az OpenGL topic
De amúgy beast is írta, a legegyszerőbb ha minden egérmozgás lekezelésekor megnézed mennyi az elmozdulás a képernyő közepéhez, ehhez asszociálsz egy megfelelő szöggel történő elforgatást (egérérzékenység, stb figyelembevételével), forgatsz, az egérkurzort pedig visszadobod középre és kezdődhet a móka elölről.
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
gaborlabor - Moderátor | 4449 hsz       Online status #23540   2006.07.31 14:30 GMT+1 óra  
Köszi mindenkinek!
Csaba42: A feladat azon része mr meg van oldva. De mondjuk az sem elég jó első ránézésre, mert én kezdetnek olyan progit szeretnék írni ami olyan mint mikor egy fps-ben spectator vagy, vagy be van kapcsolva a fly meg a falonátjárás. Szóval nincs ütközésdetektálás és gravitáció. Kezdetben azt gondoltam, meg tudom irni magamtól, de ahogy belekezdtem, felismertem a buktatóit. A legtöbb szívás azzal volt, hogyha a FEL nyilat lenyomva a nézőpontot megemeltem (mintha felfelé néznél) és úgy nyomtam le a W-t, akkor már nem csak előre kellett mennie, hanem felfelé is, tehát a center felé kell haladnia mindeképp. Ehhez kell itt is az elfordulási szöggel kalkulálni. A lényeg, hogy találtam egy példaprogit, amiben úgy lehetett mozogni mint a doom2-ben. Azt sikeresen megbuheráltam úgy, hogy legyen benne oldalazás is, ne csak forgás, és megcsináltam azt is, hogy a fel-le nyilakkal az előbb említett függőleges irányú elmozdulás is lehetséges legyen. Annak a programnak is az a lelke, hogy az elfordulási szögekkel és sinussal és cosinussal számolgat. Tehát már mindem megvan ami a mozgást és nézelődést illeti:
W - előre
A - oldalazás balra
S - hátra
D - oldalazás jobbra
FEL - nézés felfelé
LE - nézés lefelé
BALRA - forgás balra
JOBBRA - forgás jobbra.
Na, ezek közül kéne nekem a fel, le, jobbra, balra gombok akcióit átírnom egérre, és kész is lennék.
Dinputtól meg nem azért idegenkedek, mert nem szeretem a directx-et, de úgy gondolom, hogyha eddig mindent megoldottam a directx és directinput nélkül, akkor valahogy biztosan meglehet oldani az egérkezelést is, csak lehet hogy kicsivel nehezebb.

   
beast - Törzstag | 1241 hsz       Online status #23524   2006.07.31 13:08 GMT+1 óra  
De ha jól elolvastad, akkor látod, hogy a középpontól (width/2, height/2) való elmozdulással alapszik. Ha mozgatod az egeret, akkor csak pár pixeles elétrésekkel dolgozik, majd megint a képernyő közepére dobja a kurzort. NIncs semmi 1023->0. Vagy mi a kérdés?
Amúgy sztem ez nem GerzSonka saját kódja, inkább gametutorialos...

   
Csaba42 - Törzstag | 946 hsz       Online status #23521   2006.07.31 13:03 GMT+1 óra  
Én arra gondoltam, hogy amint eléri vmelyik határt, 0-zod az adott számot (pl.: 1023->0), és veheted ezt is mozgásnak. Persze, ez csak egy futó gondolat volt, talán nem is működik (bevallom, OpenGLben nem vagyok otthon).

Kód:
void CCamera::SetViewByMouse()
{
POINT mousePos;
int middleX = SCREEN_WIDTH  / 2;
int middleY = SCREEN_HEIGHT / 2;
float angleY = 0.0f;
float angleZ = 0.0f;
static float currentRotX = 0.0f;

GetCursorPos(&mousePos);

if( (mousePos.x == middleX) && (mousePos.y == middleY) ) return;

SetCursorPos(middleX, middleY);

// Kiszámoljuk az elfordulás szögét, amit radiánban (valós számként) tárolunk.
// A radián alapja a pi! A pi értéke 180 fok, amely radiánban 3,14! Ez kapcsolatba
// hozható a kör kerületével. Ennek következtében pi/2 = 90 fok, stb. Így tárolunk
// szögeket valós számként.
angleY = (float)( (middleX - mousePos.x) ) / 1000.0f;
angleZ = (float)( (middleY - mousePos.y) ) / 1000.0f;

currentRotX -= angleZ;

if(currentRotX > 1.0f)
currentRotX = 1.0f;
else if(currentRotX < -1.0f)
currentRotX = -1.0f;
else
{
CVektor vAxis = Cross(m_vView - m_vPosition, m_vUpVector);
vAxis = Normalize(vAxis);

RotateView(angleZ, vAxis.x, vAxis.y, vAxis.z);
RotateView(angleY, 0, 1, 0);
}
}

Ez persze nem az enyém, GerzSonka tulajdona, de hátha segít!

   
gaborlabor - Moderátor | 4449 hsz       Online status #23518   2006.07.31 12:42 GMT+1 óra  
DInputot, ha eddig mellőztem (billentyűzetkezelés müxik rendesen glut-tal), nem most fogom elővenni. Igen, énis igy oldanám meg glut-ban. Az aktuális mousecoordot azt le tudom kérdezni, mozgatásnál ezt vehetjük a réginek. Ehhez viszonyítva meg tudom állapítani hogy az egér új x, és y koordinátája nőtt vagy csökkent. Egészen addig amíg el nem érem az ablak határait, vagyis teljes képernyős módnál az 1023 és a 767 a max, és ha onnét húzza tovább, azt is kezelni kéne valahogy. Még dolgozok rajta. Ha bárkinek eszébe jut valami, ne habozzon írni.

   
Hacker - Törzstag | 567 hsz       Online status #23465   2006.07.31 05:35 GMT+1 óra  
DirectInput . GLUT-vel eléggé nehéz lesz, de nem megoldhatatlan. Csak tudni kell a régi mouse coord-ot és az újjal összehasonlítani és úgy mozgatni. Vagyis én így oldanám meg DirectInput nélkül.
No [img] !
Programozz ne háborúzz!!!!

   
gaborlabor - Moderátor | 4449 hsz       Online status #23453   2006.07.31 04:48 GMT+1 óra  
Na, sikeresen megoldottam a mozgást a 3d-s térben, minden irányba, mint egy fps játékban. Csak most még billentyűzettel lehet irányítani. A forgást át szeretném írni, hogy egérrel lehessen irányítani.
Valamelyik GLUT-os egérkezelő függvényre gondoltam. Azt kéne meghatározni, hogy az egér melyik irányba mozdult el, a kurzor ablakbeli relativ pozicioja és a gombok lenyomva tartása nem lényeges. Ti melyik függvénnyel/módszerrel oldanátok meg?
THX

   
gaborlabor - Moderátor | 4449 hsz       Online status #22914   2006.07.26 12:01 GMT+1 óra  
Igen, pont erre gondoltam énis mikor belegondoltam és rájöttem, hogy én ezt nemtudom megcsinálni. Szerintem a középiskolás matek az a minimum a 3d-hez, csakhogy én még azon sem vagyok ám túl...
Addigis maradnak másoktól ellesett megoldások. De mint mondtam abban a példaprogiban nem tűnt olyan bonyolultnak. Asszem 1-2 sin() meg cos() függvény az alapja az egésznek.

   
KergeDelfin - Törzstag | 667 hsz       Online status #22904   2006.07.26 10:59 GMT+1 óra  
Trigonometriára szükséged lesz mindenképpen, ajánlatos körbenézni a gömbi koordináták háza táján ha mouselookot akarsz csinálni.
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
gaborlabor - Moderátor | 4449 hsz       Online status #22889   2006.07.26 08:53 GMT+1 óra  
Megnéztem a progi kódját, és ahogy elnéztem elég bonyolult matematikai számításokkal oldja meg a mozgatást. Egyenlőre nem siekrült teljesen átlátnom az egész működését, de persze nem várok csodát 30 perc alatt. Viszont a LightHouse3d-n találtam egy hóemberes példaprogramot, ami ugyanazt csinálja, csak sokkal rövidebb, egyszerűbb, és átláthatóbb számításokat/megoldásokat használ. Valszeg abból fogok kiindulni, de azért köszi a segítséget és a linket!

   
gaborlabor - Moderátor | 4449 hsz       Online status #22883   2006.07.26 07:10 GMT+1 óra  
THX a lot! Letöltöttem, még csak az exe-t néztem meg, de nagyon tetszik, pont ilyenre gondoltam!
Beleásom magam a kódba, hátha sikerül megtalálnom benne a nekem fontos részt. Köszi mégegyszer!

   
beast - Törzstag | 1241 hsz       Online status #22871   2006.07.26 04:35 GMT+1 óra  
Szerintem ezt nézd meg, hátha találsz valami érdekeset benne!

   
gaborlabor - Moderátor | 4449 hsz       Online status #22869   2006.07.26 04:28 GMT+1 óra  
Köszi a választ! A mozgást nagyjából sikerült megoldanom. Viszont az egérrel már nem volt könnyű dolgom. Úgy próbáltam megoldani, hogy a program legelején a
Kód:
GetCursorPos(&mouse);

kóddal lekérdezem az egér x és y koordinátáját és azokat a mouse.x és mouse.y-ban tárolom,
és a glut-os mousefunc()-kal pedig megvizsgálom, hogy ez egér új pozicioja hogyan tér el az indulási koordinátáktól és ez alapján a center-t módosítom, mintha forogna a kamera:
Kód:
void mousemove(int x, int y)
{
    if (mouse.x < x)
    {
        centerx -= 3;
    }
    if (mouse.x > x)
    {
        centerx += 3;
    }
}

Elvileg működnie kéne, de nem tökéletes, mert néha akdozik, néha az ellenkező irányba forog, néha pedig nem is reagál a mozgatásra. Ezt majd még talán meg tudom oldani valahogy, de van egy ennél nagyobb gondom is.
Ha pl az egérrel a "kamerát" elforgattam kicsit jobbra meg kicsit felfelé, és utána nyomom le az előre nyilat, akkor már nem csak az eyez -t kell módosítanom, mert a "kamera" már nem a negatív z tengely irányába néz. És erre nem tudtam még rájönni, hogy hogyan számítsam ki, hogy az eyex,eyey,eyez közül melyiket és hogyan kell módosítanom, hogy a szem pozíciója úgy mozduljon el, hogy a center felé halad, ahová nézek. Tehát hogy olyasmi legyen, mint mikor egy fps-ben spectator vagy és tudsz menni akármerre.

Ha bárki tudna segíteni, annak nagyon örülnék!
Köszi.

   
KergeDelfin - Törzstag | 667 hsz       Online status #22710   2006.07.24 13:36 GMT+1 óra  
****** cenzúrázva, én voltam figyelmetlen
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
KergeDelfin - Törzstag | 667 hsz       Online status #22709   2006.07.24 13:34 GMT+1 óra  
Nem csak az eyex, eyey, eyez-t kell módosítani, hanem a center-eket is.
A gluLookAt-re úgy gondolj, mint egy kamerára, ahol meg van adva az a pont, ahol van a kamera, és az as pont, ahová néz. Hogyha pl a center a kamera előtt van, te mozgatod előre a kamerát, de a centert nem, akkor amint a kamera túljut a centeren, megfordul, és már nem jó az egész.
Persze az opengl-ben nincs kamera, illetve mindig a (0,0,0) pontban van, tehát nem a nézőpont változik a gluLookAt-tel, hanem a színtér lesz eltolva, forgatva, stb.
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
gaborlabor - Moderátor | 4449 hsz       Online status #22676   2006.07.24 08:30 GMT+1 óra  
Hy all! Első 3d-s progimat szeretném megírni, de akadt néhány problémám. Olyan progit szeretnék irni, ami egy-két egyszerű objektumot, pl kockát rajzol ki, és a nyilak segítségével tudom a kamerát, azaz a nézőpontot mozgatni, úgy mint az FPS játékokban.
A rajzoló függvényem csak egy kockát rajzol ki:
Kód:
glBegin(GL_QUADS);
        //szemközti oldal
glVertex3f(0, 0, 0);
glVertex3f(5, 0, 0);
glVertex3f(5, 5, 0);
glVertex3f(0, 5, 0);
        //jobb oldal
glVertex3f(5, 0, 0);
glVertex3f(5, 0, -5);
glVertex3f(5, 5, -5);
glVertex3f(5, 5, 0);
        //bal oldal
glVertex3f(0, 0, 0);
glVertex3f(0, 5, 0);
glVertex3f(0, 5, -5);
glVertex3f(0, 0, -5);
        //alsó oldal
glVertex3f(0, 0, 0);
glVertex3f(5, 0, 0);
glVertex3f(5, 0, -5);
glVertex3f(0, 0, -5);
        //felső oldal
glVertex3f(0, 5, 0);
glVertex3f(5, 5, 0);
glVertex3f(5, 5, -5);
glVertex3f(0, 5, -5);
        //hátsó oldal
glVertex3f(0, 0, -5);
glVertex3f(5, 0, -5);
glVertex3f(5, 5, -5);
glVertex3f(0, 5, -5);
glEnd();


A látóteret a gluPerspective()-vel akartam specifikálni, mert a glFrustum-mal nem siekrült úgy, hogy meg is jelenjen a kocka (nem találtam normális leírást, vagy működő példát). Tehát a látóteret így állítom be:
Kód:
glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(90.0f, 4/3 , 0.01f ,1000.0f);


Ezzel megjelenik egy négyzet, úgy, hogy a bal alsó sarka a képernyő közepén van. Úgy terveztem, hogy a kameramozgást a gluLookAt()-tel fogom megoldani, de ehhez megintcsak elég szegényes leírást találtam. Próbálkoztam többféleképpen, de nem sikerült úgy megoldanom, hogy a kockát a képernyő közepén lássam szemből. A kameramozgást pedig úgy próbáltam megoldani, hogy a rajzoló függvény elején ottvannak a
Kód:
glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz);

sorok, és a billentyűzetkezelő függvényben módosítom a az eyex, eyey, eyez értékeket, de ezt sem sikerült megoldanom úgy, hogy a mozgás megfelelő legyen (pl néha forgás lett, néha meg nem abba az irányba ment amerre szeretném stb).
Ehhez szeretnék segítséget kérni, hogy a gluPerspective-et és a gluLookAt-et hogyan specifikáljam az elején, és hogy mely változókat hogyan módosítsam az egyes mozgásokhoz.
A segítséget előre is köszönöm!

   
gaborlabor - Moderátor | 4449 hsz       Online status #21577   2006.07.13 08:36 GMT+1 óra  
Kipróbáltam amit mondtál. Az idlefunc-ot teljesen kivettem és a glutPostRedisplay-t beirtam a renderelő függvény végére. Valószínűleg nem azzal volt a baj. Az eredmény:
- A program általánosságban hozzányúlás nélkül 10 fps-sel kevesebbel megy mint eddig. Most igy 130-cal ment átlagban.
- A jelenség továbbra is fentáll, csak azzal a különbséggel hogy most nem 300-ra ugrik fel az fps, hanem csak 260-ra.

Ez jelenség nem is igazán probléma nálam, mert müködik igy is a program. Viszont sehogy nem fér a fejembe, hogy hogy képes megduplázódni az fps érték. Meg ha egyszer tud menni 260-300 FPS-sel, akkor alapból miért nem megy annyival?

   
cs_adam - Tag | 11 hsz       Online status #21570   2006.07.13 07:06 GMT+1 óra  
Egy GLUT-ot használó (és működő) alkalmazás (nevezetesen a lib3ds példa programja) a DisplayFunc vége:
...
glutSwapBuffers();
glutPostRedisplay();
...
Szerintem ha ezeket berakod a DisplayFunc végére te is, és az Idle-ben nem renderelsz, akkor komoly esély van rá hogy megjavul.
   
gaborlabor - Moderátor | 4449 hsz       Online status #21569   2006.07.13 06:52 GMT+1 óra  
Az IdleFunc-kal kapcsolatban lehet hogy igazad van, de ezt nem magamtól vettem hogy ott rendereltetem ujra. Rengeteg tutorialban és leirásban láttam, hogy a glutIdleFunc()-ban ez áll:
glutPostRedisplay(); vagyis ujrarajzoltatja a képernyőt. Leggyakrabban ezt azért nem használják számításokra, mert ez akkor hívódik meg ha a proci "ráér", és így minden gépen más sebességgel futna a program, a proci órajelétől függően, ezt meg senki nem akarja. Kipróbáltam hogy nem használo az IdleFunc-ot, úgy meg nem frissíti a képetm tehát 1 FPS-sel megy és nem frissül a tartalom. Ezért gondolom kell az oda. Még mindíg azt furcsállom hogy miért ugrik meg az fps érték.

   
cs_adam - Tag | 11 hsz       Online status #21559   2006.07.13 05:19 GMT+1 óra  
A figyelmetlenségért elnézést kérek.
Ha teljes képernyős, és átváltasz, akkor nincs már hova rendereljen. Ezért továbbra is fenn tartom hogy akkor nem kéne renderelnie, legfeljebb off-screen bufferekre.
Nem emlékszem sokra a glut használatából, de a glutIdleFunc() mintha kisebb számításokra lenne, és nem további renderelésre. Talán éppen ez a gond. Próbáld meg hogy ott nem renderelsz semmit, csak a DisplayFunc-ban.
   
gaborlabor - Moderátor | 4449 hsz       Online status #21532   2006.07.12 15:54 GMT+1 óra  
Köszi, értem mire gondolsz. Csakhogy zárójelben ott van hogy Fraps-szel mérve. Tehát az értékek valószínűleg reálisak.
Nekem nem tűnik furcsának hogy inaktív állapotban is renderel. Nem a tálcán van csak inaktiv mert átváltok a konzol ablakra. Viszont a glutIdleFunc() miatt amikor "ráér" akkor renderel ujra. És a helyzet továbbra is ez, függetlenül a program összetettségétől és méretétől.

   
cs_adam - Tag | 11 hsz       Online status #21508   2006.07.12 13:03 GMT+1 óra  
Eleve értelmetlen fps-ről beszélni, ha inaktív, hiszen nem kéne rajzolnia semmit. Ha mégis rajzol, akkor kezdd itt a javítgatását a proginak. A 80-90 fura, mert ha rendes program inaktív állapotban nagyon hamar végigér a main loop-on, és a 80-90 helyett nagyságrendekkel magasabb érték kéne. A felgyorsulásra azt javaslom nézd meg FRAPS-szel, vagy valami megbízható cuccal, hátha csak az fps számlálód rossz.
   
gaborlabor - Moderátor | 4449 hsz       Online status #21359   2006.07.10 14:55 GMT+1 óra  
Hi. Van egy dolog, amit már régóta nem tudok megérteni, és kicsit furcsállom.
Van egy win32 console application projektem, és abban irtam az opengl-es progit. GLUT-ot használ alakozáshoz, és teljes képernyős módhoz. Ez a progi átlag 140-150 FPS-sel megy (Fraps-szel mérve). Ha alt+tabbal átváltok a console ablakra, akkor látom, hogy a háttérben lévő teljes képernyős ablak kb 80-90 FPS-sel megy. És azt nem értem, hogy miért van az, hogy mikor visszaváltok alt+tabbal, akkor a megszokott 140-15 FPS helyett felugrik 290-310-re, és úgy is marad egészen a kilépésig. Szal nekem ez egy kicsit furcsa. Miért lesz attól gyorsabb hogy átváltok róla, aztán meg visszaváltok? Tudtok erre valami magyarázatot?
Köszi!

   
Hacker - Törzstag | 567 hsz       Online status #21097   2006.07.08 01:37 GMT+1 óra  
OpenIL-ben hogyan lehet beállítani a Color Key-t vagyis a transparent color-t. Az ilKeyColor-al bűvészkedtem de sajnos eddig még eredménytelenül .
No [img] !
Programozz ne háborúzz!!!!

   
gaborlabor - Moderátor | 4449 hsz       Online status #20987   2006.07.06 04:31 GMT+1 óra  
nem saját loader, hanem a nehe lesson33-ból származik. szinte egy az egyben lekoppintottam, és csak azt irtam át benne ami nagyon muszály volt, pl hogy ne csak 2 textúrát töltsön be a loader hanem amennyit akarok meg ilyenek. kivettem a sallangokat, és beágyaztam az én progimba. (vagyis az én progimat építettem eköré ). De most úgy néz ki, hogy müxik! A blendFunc-cal kellett variálni, úgy jó lett ahogy warlock irta. Köszönöm! Most müködik az hogy betöltök egy textúrát amben van átlátszó rész. Most akarom kipróbálni azt, hogy több textúrát rakok egymás fölé és mindegyikben van átlátszó rész...

szerk.:
kipróbáltam azt hogy 2 polygont rajzoltam és mind a kettőre ugyanazt a keretet ábrázoló textúrát húztam, és végre úgy működik ahogy kell! Mindenkinek köszönöm a segítséget!!

Ezt a hozzászólást gaborlabor módosította (2006.07.06 04:46 GMT+1 óra, ---)

   
warlock - Törzstag | 704 hsz       Online status #20979   2006.07.06 03:02 GMT+1 óra  
már amennyiben jó a loadered

   
Hacker - Törzstag | 567 hsz       Online status #20978   2006.07.06 03:02 GMT+1 óra  
Akkor nincs ötletem. Újra csak Nehe -t ajánlom. Nézz szét: http://nehe.gamedev.net/lesson.asp?index=02
No [img] !
Programozz ne háborúzz!!!!

   
warlock - Törzstag | 704 hsz       Online status #20977   2006.07.06 03:01 GMT+1 óra  
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

   
gaborlabor - Moderátor | 4449 hsz       Online status #20976   2006.07.06 02:58 GMT+1 óra  
Kipróbáltam, sajnos ugyanaz
próbáltam 4-essel is meg GL_RGBA-val is, de mindig ugyanaz, mintha 3ason hagytam volna.

   
Hacker - Törzstag | 567 hsz       Online status #20975   2006.07.06 02:33 GMT+1 óra  
Újra csere :

Kód:
glTexImage2D(GL_TEXTURE_2D, 0, 3, texture[loop].width, texture[loop].height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture[loop].imageData);


erre:

Kód:
glTexImage2D(GL_TEXTURE_2D, 0, 4, texture[loop].width, texture[loop].height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture[loop].imageData);


Bár ez csak enyhe sejtés, de szerintem érdemes kipróbálni. Az InternalFormat vagyis a 3. paraméter arra valaó, hogy kijelölöd milyen színkomponenseket fogod hsználni textúrázásnál. R,G,B,A vagyis 4-et a te esetedben.
No [img] !
Programozz ne háborúzz!!!!

   
gaborlabor - Moderátor | 4449 hsz       Online status #20974   2006.07.06 02:22 GMT+1 óra  
Tényleg ez volt a baj! Köszi, végre igy sikerült betöltenem 32 bites képet ami meg is jelent rendesen.
Most már csak az van hátra, hogy az átlátszó rész tényleg átlátszó legyen.
glEnable(GL_BLEND);
glBlendFunc(...,...);
Ezeket beirtam a megfelelő helyre. A BlendFunc paramétereit próbálgattam, de eddig nem sikerült eltalálnom a megfelelőt. Nekem csak egy táblázatom van amiben fel vannak sorolva hogy mi lehet a 2 paraméter, de nincs leirva hogy mikor melyiket kell használni.
Ilyenkor melyiket érdemes használni?
Köszi!

   
Hacker - Törzstag | 567 hsz       Online status #20970   2006.07.06 01:06 GMT+1 óra  
Szerintem annyi a probléma, hogy ezt kell átírni:

Kód:
glTexImage2D(GL_TEXTURE_2D, 0, 3, texture[loop].width, texture[loop].height, 0, GL_RGB, GL_UNSIGNED_BYTE, texture[loop].imageData);

erre:

Kód:
glTexImage2D(GL_TEXTURE_2D, 0, 3, texture[loop].width, texture[loop].height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture[loop].imageData);


A GL_RGBA jelöli azt, hogy 4 db értéket vár a textúrára még hozzá előjel nélküli char-t.
No [img] !
Programozz ne háborúzz!!!!

   
gaborlabor - Moderátor | 4449 hsz       Online status #20968   2006.07.05 23:19 GMT+1 óra  
Hi! Hát akkor azért nem működött! Akkor mégsem a blendinggel van a baj! Én végig 24 bites tga fájlokat használtam, mert csak ezeket tölti be rendesen a loader! A 32 bites fájlokat használhatatlanul jeleníti meg. Ja, és ahhoz kellene, hogy ahol a textúra átlátszó, ott tényleg átlátszó legyen, de máshol nem mossa össze a színeket. Pl tudjak olyat csinálni, hogy olyan legyen mintha üres képkereteket raknék egymásra, de a lyukakon át lehet látni. Csakhogy ez 24 bites tga fájlokkal nem fog menni. Ezt kérdeztem már korábban is, hogy az a nehe féle (lesson33) betöltő, az nem tud betölteni 32 bites fájlokat, vagy csak nálam nem?

---
szerk.: Elvileg tudnia kéne betölteni 32 biteset is, mert van benne egy ilyen rész:
typedef struct
{
GLubyte Header[12]; // File Header To Determine File Type
} TGAHeader;

typedef struct
{
GLubyte header[6]; // Holds The First 6 Useful Bytes Of The File
GLuint bytesPerPixel; // Number Of BYTES Per Pixel (3 Or 4)
GLuint imageSize; // Amount Of Memory Needed To Hold The Image
GLuint type; // The Type Of Image, GL_RGB Or GL_RGBA
GLuint Height; // Height Of Image
GLuint Width; // Width Of Image
GLuint Bpp; // Number Of BITS Per Pixel (24 Or 32)
} TGA;

A megjegyzésben ott van hogy 24 or 32. Akkor viszont miért nem működik nálam, mikor ebben a részben semmit nem írtam át?

THX

   
KergeDelfin - Törzstag | 667 hsz       Online status #20964   2006.07.05 20:47 GMT+1 óra  
Hali! Két fontos dolog:
- A 24 bites TGA fileoknál NINCS alpha csatorna, szóval az eloszlás 8-8-8bit.
A glEnable(GL_BLEND); pedig ne a loading részbe kerüljön, hanem a renderbe, az elé az objektum elé amit átlátszóva akarsz tenni.
Kód:
glBindTexture(GL_TEXTURE_2D, texture[2].texID);
glColor4d(1.0, 1.0, 1.0, 0.5);
glEnable(GL_BLEND);
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(128.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f(128.0f, 128.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 128.0f);
glEnd();
glDisable(GL_BLEND);
// .....

Persze a blendfunc attól függ hogy mit is akarsz csinálni
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
gaborlabor - Moderátor | 4449 hsz       Online status #20962   2006.07.05 16:49 GMT+1 óra  
Semmi gond, énis hulla vagyok, de én tudatában voltam annak, hogy a blendelés nincs bekapcsolva. Most kipróbáltam úgy hogy bekapcsoltam. A loading függvénybe irtam be ezeket:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
De az eredmény még mindíg nem jó. A program egy kék négyzetet jelenitett meg idáig, melynek a közepén volt egy átlátszó négyzet ami fehér volt. Most hogy bekapcsoltam a blendelést, és a háttér narancssárgás-barna, így a négyzet kék része lila lett, de a közepén lévő átlátszó négyzet fehér maradt!
Most mit tudnék kezdeni vele?
Köszi.

-----
szerk.:

Azzal is próbálkoztam, hogy a glBlendFunc() paramétereit próbálgattam egy táblázat alapján. De sajnos igy sem jött össze a dolog.

Ezt a hozzászólást gaborlabor módosította (2006.07.05 17:02 GMT+1 óra, ---)

   
MaNiAc - Szerkesztő | 1735 hsz       Online status #20960   2006.07.05 16:05 GMT+1 óra  
Bocsi, csak átfutottam a kódot, mert hulla vagyok és még az oldalam se volt időm upgradelni ma a meló miatt A blendelés nincs bekapcsolva vagy csak én nem láttam?
Dare to imagine!
http://www.insaneidea.hu
   
gaborlabor - Moderátor | 4449 hsz       Online status #20957   2006.07.05 15:56 GMT+1 óra  
Az előző hsz-em kiegészítéseként (nem tudom szerkeszteni):
Az előbb írt problémán kívül van még egy, ami talán nagyobb is. Hiába töltök be olyan 24 bites tga fájlt, amin elvileg van átlátszó rész, a programban az mégis fehérrel jelenik meg. Hogy működjön, valamit módosítanom kell a textúrázásnál?
Azt hiszem, a legjobb lesz, ha bemásolom ide a main.cpp teljes tartalmát. Ebben van benne a betöltő függvény (legalábbis egy része) is, a hozzá tartozó 2 fejállományt és a másik .cpp fájlt nem módosítottam.
main.cpp:

#pragma comment(lib, "Glu32.lib"
#define GLUT_DISABLE_ATEXIT_HACK

#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <gl\glu.h>
#include <GL/glut.h>
#include "texture.h"

using namespace std;

bool LoadTGA(Texture *, char *);

Texture texture[3]; // Storage For 3 Textures

void loading();
void LoadGLTextures();
void reshape(GLsizei, GLsizei);
void render();
void keyboardfunc(unsigned char key, int x, int y);
void idle();

int numberoftextures;

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutGameModeString("1024x768:16";
glutEnterGameMode();
glutSetCursor(GLUT_CURSOR_NONE);
loading();
glutReshapeFunc(reshape);
glutDisplayFunc(render);
glutKeyboardFunc(keyboardfunc);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}


void reshape(GLsizei w, GLsizei h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1024, 0, 768, -1, 1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0, 0, w, h);
}

void loading()
{
glEnable(GL_TEXTURE_2D);
glClearColor(0.7f, 0.4f, 0.2f, 0.5f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
LoadGLTextures();
}

void render()
{
glClear(GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texture[2].texID);
glColor4d(1.0, 1.0, 1.0, 1.0);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(128.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f(128.0f, 128.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 128.0f);
glEnd();
glutSwapBuffers();
}

void keyboardfunc(unsigned char key, int x, int y)
{
switch(key)
{
case 27 : exit(0); break;
}
}

void idle()
{
glutPostRedisplay();
}

void LoadGLTextures() // Load Bitmaps And Convert To Textures
{
numberoftextures = 3;
// Load The Bitmap, Check For Errors.
if (
LoadTGA(&texture[0], "Data/uncompressed.tga" &&
LoadTGA(&texture[1], "Data/compressed.tga" &&
LoadTGA(&texture[2], "Data/atlatszo.tga"
)
{
for (int loop=0; loop<numberoftextures; loop++) // Loop Through Both Textures
{
// Typical Texture Generation Using Data From The TGA ( CHANGE )
glGenTextures(1, &texture[loop].texID); // Create The Texture ( CHANGE )
glBindTexture(GL_TEXTURE_2D, texture[loop].texID);
glTexImage2D(GL_TEXTURE_2D, 0, 3, texture[loop].width, texture[loop].height, 0, GL_RGB, GL_UNSIGNED_BYTE, texture[loop].imageData);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

if (texture[loop].imageData) // If Texture Image Exists ( CHANGE )
{
free(texture[loop].imageData); // Free The Texture Image Memory ( CHANGE )
}
}
}
}

a LoadGLTextures() függvényben annyit módosítottam, hogy int helyett void tipusura irtam. Ezzel a programmal nekem sikerült betöltenem a tga fájlokat és meg is jelentek rendesen, kivéve az átlátszó részeket, mert azok fehéren jelentek meg. Az atlatszo.tga fájl, amit használtam:
http://bullshit.dox.hu/atlatszo.tga

Van valami ötletetek, hogy mi miatt nem jelenik meg rendesen az átlátszó rész?

Köszi előre is!

   
gaborlabor - Moderátor | 4449 hsz       Online status #20952   2006.07.05 14:52 GMT+1 óra  
Na, végre megoldottam hogya NeHe féle tga betöltő működjön az én programom alól is. Egy gondom van vele: a 32 bites tga fájlokat rosszul jeleniti meg (használhatatlan), csak a 24 bitesek működnek rendesen.
Ez a betöltő hiányossága, vagy én rontottam el valamit?
Nagy baj az, hogyha jóminőségű képek esetén is csak 24 biteset használok? Ilyenkor hogy oszlik el a 24 bit? 6bit R + 6bit G + 6bit B + 6bit A ? Nem kevés ez egy kicsit?

THX

   
gaborlabor - Moderátor | 4449 hsz       Online status #20946   2006.07.05 12:52 GMT+1 óra  
nem, nem, a libekkel és társaival minden rendben van. (különbeen a többi progimat sem tudtam volna lefordítani). igazából ezt a problémát már megoldottam, félig-meddig az én hibám volt.
Most még a textúrázással próbálkozok, több-kevesebb sikerrel. a NeHe-s fájlt át akarom irni, mert nekem nem kellenek azok a sallangok és amúgyis glut-ot használok. most úgy néz ki, sínen vagyok. ha valami nem müxik, majd még írok
Köszönöm mindenkinek a segítséget!

Ezt a hozzászólást gaborlabor módosította (2006.07.05 13:01 GMT+1 óra, ---)

   
Birmacher - Törzstag | 516 hsz       Online status #20937   2006.07.05 11:24 GMT+1 óra  
gondolom kell a gluthoz lib fájl... ha nem linkelted be lehet az a baj, és a glut az nem találtatik meg a gépen, szal külön le kell szedni... látatlanban ennyi tippem van

   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] > 70 < [75] [80] [82]