Skocz do zawartości

[C++][OGL]+[SDL] Ustawienie początku układu.


lrac

Polecane posty

Witam,
mam taki problem mały, gdy pisałem z użyciem glaux, wszystko ładnie działało, ale gdy zarzuciłem do SDL'a to już nie bardzo.
Najpierw dam kawałek kodu (w sumie to cały) a potem wyjaśnie.
Pascal#include <SDL/SDL.h>
#include <gl/gl.h>
int main(int argc, char *argv[]){
SDL_Event klawisz;
int stop = 0;
SDL_Init(SDL_INIT_VIDEO);
SDL_SetVideoMode(500, 500, 0, SDL_OPENGL | SDL_OPENGLBLIT | SDL_HWSURFACE);
SDL_WM_SetCaption ("jakis progz", NULL);

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0, 0, 500, 500);
glOrtho(0.0f, 500.0f, 0.0f, 500.0f, 0.0f, 0.0f);

while(!stop){
glLoadIdentity();

glBegin(GL_POINTS);
glColor3f(1.0f, 1.0f, 0.0f);
glVertex2i(0, 0);
glEnd();

SDL_GL_SwapBuffers();
SDL_PollEvent(&klawisz);

if(klawisz.key.keysym.sym == SDLK_ESCAPE)
stop = 1;
}
SDL_Quit();
return 0;
}

1. No więc tak, najpierw inicjalizuje SDL'a itp.
2. Czyszcze okno, Viewport ustawia mi widok na całe okno, Ortho ustawia mi bryłe obcinania.
3. Petla czeka na ESC, LoadIdentity zeruje układ współrzędnych.
4. Rysuje punkt (GL_POINTS) w układzie (x=0, y=0)
I on sie ładnie rysuje tylko że na samym środku okna, jak dam inne współrzędne niż 0,0 to się wcale nie rysuje.
Niby mam ustawiony widok i obcinanie a mimo to się rysuje na środku, i tylko gdy jest 0,0.
Gdy próbowałem narysować kwadrat (glRectf()) to rysował się od srodka aż do końca krawędzi okna, nawet gdy miał mieć tylko kilka px, to kończył się na górnej i prawej krawędzi okna od środka.

No i tu moje pytanie, co właściwie jest nie tak, bo wg mnie powinno działać wszystko. A nie wiem czy robie coś źle z OGL czy SDL.
Link do komentarza
Udostępnij na innych stronach

dodaj glu.h
i tam gdzie jest Viewport i glOrtho daj:
Pascal
gluOrtho2D(0,500,500,0);
glViewport (0, 0, 500, 500);


bo jest:
[quote] glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); [/quote]
A ten zapis gluOrtho2D to niemalże na żywca z mojego projektu wink.gif
więc możesz też użyć glOrtho, tylko żeby Top było 0, a Bottom 500 i powinno być dobrze, jeśli nie to, to w SetVideoMode może trzeba coś zmienić :>
Na razie sprawdź to wink.gif
Jeśli pomogło Ci to, to daj mi "Pomógł biggrin.gif"

Link do komentarza
Udostępnij na innych stronach

Hmm, to nie przez to chyba.
Już wiem czemu nie można było ustawic punktu w innym miejscu, bo próbowałem zawsze 1.0f, a 1.0 to granica okna - chodzi o to że jakie by okno nie było duże to 1.0 to odległość od środka do krawędzi, jak ustawiłem 0.1f to działa tylko że odległość 0,1 jest troche za duża.
Próbowałem też w sdl'u ustawić powierzchnie SDL_Surface * ale też nie bardzo pomaga.
Link do komentarza
Udostępnij na innych stronach

to nie możesz skorzystać z przeształcenia np. glTranslatef(x,y,z) ? i "oddalisz" widok.
Ewentualnie możesz wstawić kamerę.

CYTATnawet gdy miał mieć tylko kilka px eee parametry podawane przecież we wszystkich funkcjach np. glVertex3f() nie są przecież wyrażane w pixelach.

[quote] Rysuje punkt (GL_POINTS) w układzie (x=0, y=0)
I on sie ładnie rysuje tylko że na samym środku okna [/quote].

Przy nie zmienianiu niczego środek układu jest w środku okna chyba nie ?

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...