Problem med OpenGL

Tags:    c++

<< < 12 > >>
Hej. Jeg får ikke sat noget på på skærmen, når jeg bruger glVertex kaldene. Kan I se, hvad der er galt?

main.cpp (sikkert ikke relevant):
Fold kodeboks ind/udKode 

opengl.cpp:
Fold kodeboks ind/udKode 

opengl.h:
Fold kodeboks ind/udKode 

wndproc.cpp:
Fold kodeboks ind/udKode 

wndproc.h:
Fold kodeboks ind/udKode 

Resultatet er en blå skærm, som jeg sætter den med glClearColor.



11 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
gluLookAt er trods alt heller ikke en nødvendighed, så glRotate og Translate er sådan set udemærket.

For at få noget shading på objekterne kan du "enable" lighting med flg.
Fold kodeboks ind/udKode 

Ud over lighting generelt, gøres et specifikt lys også tilgængeligt (+ farver sættes)

Da du nok højest sansynligt vil komme til at tegne flere faces (poly/triangles), er det nødvendigt at slå GL_DEPTH_TEST til for at de enkelte figurer tegnes korrekt.
Fold kodeboks ind/udKode 


De to ovenstående stykker kode kan du evt. placere i sidst glEnable.

I glRender, i kaldet til glClear er det endvidere nødvendigt at tilføje GL_DEPTH_BUFFER_BIT.
dvs. så det bliver:
Fold kodeboks ind/udKode 


(vector)normalen for den flade du tegner sættes med glNormal3f(GLfloat, GLfloat, GLfloat)
I nedenstående eksempel tegnes to trekanter der peger væk fra hinanden. Tilmed sættes positionen for LIGHT_0.
Fold kodeboks ind/udKode 


normalen kan bare pege ud ad fra overfladen på trekanten.

Det er godt nok lidt rodet, men det kan være at du kan bruge det til noget alligevel.



Nu er jeg ikke den store Windows API haj, men du gør intet for at enable OpenGL for dit vindue, og din OpenGL kode bliver ikke kaldt nogen steder fra.

Kig evt. her forbi: http://nehe.gamedev.net/

Der er ALT om OpenGL.



Har du prøvet at flytte:

glRender ();
glDrawScene ();
SwapBuffers (hdc);

til "messageloopet"?

Fold kodeboks ind/udKode 




Robert > Det gør jeg da i WM_CREATE? Og min OpenGL kode bliver kaldt i WM_PAINT.

Simon > Jeg har ikke prøvet på lige netop den der måde, men jeg har prøvet at sætte glFunktionerne i det loop der. Det virkede ikke, men derfor kan jeg godt lige prøve din måde.



Desuden, så virker min OpenGL. Jeg farver skærmen via OpenGL, som jeg også gør opmærksom på! Det er glVertex kaldene, den ikke reagerer på. Og jeg synes ikke om NeHes side.



har du prøvet at flippe din trekant?
glVertex2f (1.0f, 0.0f);
glVertex2f (0.0f, 0.0f);
glVertex2f (0.5f, 1.0f);

NB: ikke fordi jeg synes det ville give stor mening i 2d, men det er jo et let test.



Indlæg senest redigeret d. 24.08.2007 18:18 af Bruger #5620
eeeh... eller prøv at sætte viewporten op sidst i glEnable:
Fold kodeboks ind/udKode 


Hvor bredden og højden selvfølgelig skal stemme overens med bredde og højden på billedet.

Og prøv yderligere at ryk billedet lidt tilbage inden du tegner trekanten.
Fold kodeboks ind/udKode 

(i starten af glDrawScene)



Nørden > Hvorfor skal jeg flippe min trekant? Jeg kan jo ikke engang få den vist :(

Simon > Jeg plejer kun at ændre på viewporten i WM_SIZE, hvilket heller ikke hjalp på problemet. Jeg besluttede mig så for at kode det hele om. Først puttede jeg det i windowsproceduren. Der virkede det ikke. Så puttede jeg det i WinMain funktionen, der virkede det. Men jeg plejer godt at kunne putte det i windowsproceduren??

Nå, i sidste ende var det jo din idé, der frembragte det ønskede resultat, så pointene går til dig, selvom jeg stadig er lidt loren over at det ikke virker i windowsproceduren længere.

Edit
Hvis jeg har et hus (eller rettere end firkant med 4 glVertex2f kald, men med lidt fantasi ligner det et hus), og jeg gerne vil kunne gå rundt om det hus, hvilke(n) funktion(er) vil I så foreslå? Jeg har indtil videre brugte glRotatef, men den får huset til at se helt fladt ud, når man går "rundt" om det. Tænkte på gluPerspective, men den kan jeg ikke rigtigt få til at virke. Eventuelt nogen med et eksempel? Mit hus består af 3 firkanter, så det ser tredimensionalt ud, men glRotatef får det alligevel til at se todimensionalt ud.



Indlæg senest redigeret d. 24.08.2007 21:52 af Bruger #8985
Til at nagivere kan du også prøve med gluLookAt, hvor man kan angive ens position og "synsvinkel". Men glRotate og glTranslate er såmænd udemærket.

Mht. at huset ser fladt ud... har du slået lighting til og angivet de korrekte normaler?



Jeg kan hverken finde ud af gluLookat eller normaler. Nu har du jo ganske vist allerede modtaget pointene, men jeg ville virkelig værdsætte, hvis du ville lave et eksempel. Det ville også være narjs nok, hvis du kan integrere eksemplet i min kode, men det er ikke nødvendigt.



Indlæg senest redigeret d. 25.08.2007 22:13 af Bruger #8985
<< < 12 > >>
t