Miten saisin muutettua kordinaatteja niin että vasemmassa-yläkulmassa x on 0 ja y on 0 ja oikeassa alakulmassa x on 800 ja y on 600. Eli miten saisin muutettua kordinaatistoa?
Siis, meinaatko että vaihtaa resoluutiota 800*600-kokoiseksi?
En, Kun openGl:ssä on 0,0 ihan siinä ruudun keskellä ja -1,-1 on vasen alakulma jne... Niin haluaisin kordinaatiston samanlailla kun sdl:ssäkin.
http://www.mevis.de/opengl/glOrtho.html Tuolla saat ihan itse määritellä pisteen 0,0.
Jee!! Kiitos paljon remontti-reiska! :D
Mulla on toinenkin ongelma.. Olen sitä jo päivän yrittänyt ratkaista mutta en ole onnistunut. Ton koodin pitäisi piirtää viiva kohdasta x,y kohtaan ex,ey mut se piirtää sen viivan toisen pään aina vasempaan laitaan kiinni.
/***Pää-ohjelma***/ #include "initializings.h" int main(int argc, char *argv[]) { if( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "SDL:n alustus ei onnistunut: %s", SDL_GetError()); return 1; } //if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024)==-1) { // fprintf(stderr, "SDL_Mixer:n alustus ei onnistunut: %s", SDL_GetError()); // return 1; //} SDL_Surface * screen; screen = SDL_SetVideoMode(RESOLUTION_X, RESOLUTION_Y, 32, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF|SDL_OPENGL); SDL_WM_SetCaption("AniMaker", NULL); SDL_ShowCursor(1); Mouse Mouse; Keyboard Keyboard; Ani Ani; Stick Ukko; //Sound SoundOne("Data\\Sounds\\Effects\\Sound02.wav", 1); //SoundOne.Volume(100); //SoundOne.Play(0); glOrtho(0,RESOLUTION_X, RESOLUTION_Y,0,-1,1); Ukko.Vektors[0].ey = 400; Ukko.Vektors[0].ex = 700; Ukko.Vektors[0].thickness = 10.0; while (1) { SDL_Event event; SDL_PollEvent(&event); Uint8* keyboard; Keyboard.Buttons=SDL_GetKeyState(NULL); Mouse.Buttons=SDL_GetMouseState(&Mouse.x, &Mouse.y); Ukko.Vektors[0].x = Mouse.x; Ukko.Vektors[0].y = Mouse.y; glClear(GL_COLOR_BUFFER_BIT); glColor3f(5.0f, 5.0f, 5.0f); glBegin(GL_POLYGON); glVertex2f(0,0); glVertex2f(RESOLUTION_X,0); glVertex2f(RESOLUTION_X, RESOLUTION_Y); glVertex2f(0,RESOLUTION_Y); glEnd(); glColor3f(.0f, .0f, .0f); Ukko.DrawAll (); SDL_GL_SwapBuffers(); if(Keyboard.Buttons[SDLK_ESCAPE]) break; } //Mix_CloseAudio(); SDL_Quit(); return 0; }
/***pirrustushommelit***/ class Ani { }; class Vektor { public: int type; double thickness; double x ,y; double angle; double length; double ex,ey; }; class Stick{ public: Vektor Vektors[]; void DrawAll (); void DrawVektor (double thickness, double x, double y, double x2, double y2, int type); void DrawMovePoint (double x, double y, double type); }; void Stick :: DrawVektor (double thickness, double x, double y, double x2, double y2, int type){ if(type == 0 || type == 1){ glLineWidth(thickness); glBegin(GL_LINES); glVertex2f(x, y); glVertex2f(x2,y2); glEnd(); for (double i = 0; i<6.3; i+= 0.1){ glBegin(GL_LINES); glVertex2f(sin(i)*0+x, cos(i)*0+y); glVertex2f(sin(i)*thickness/20+x, cos(i)*thickness/20+y); glEnd(); glBegin(GL_LINES); glVertex2f(sin(i)*0+x2, cos(i)*0+y2); glVertex2f(sin(i)*thickness/20+x2, cos(i)*thickness/20+y2); glEnd(); } } } void Stick :: DrawMovePoint(double x, double y, double type){ if(type == 0) glColor3f(5.0f, 0.0f, 0.0f); if(type == 1) glColor3f(5.0f, 3.0f, 0.0f); for(double i=0; i<6.3; i+= 0.001){ glBegin(GL_LINES); glVertex2f(sin(i)*0+x, cos(i)*0+y); glVertex2f(sin(i)*0.1+x, cos(i)*0.1+y); glEnd(); } } void Stick :: DrawAll(){ for (int i= 0; /*Vektors[i].x != NULL*/i<1; i++){ DrawVektor(Vektors[i].thickness, Vektors[i].x, Vektors[i].y, Vektors[i].ex, Vektors[i].ey, 0); DrawMovePoint(Vektors[i].ex, Vektors[i].ey, 0); } }
intializings.h sisältää hiiri - ja näppäintoiminnot ja se sisältää myös kaikki tarpeelliset kirjastot...
Jos jossakin on vikaa, niin tuossa pääsilmukassa. SDL_PollEvent-funktiota ei kuulu käyttää noin. Jos et aio niitä viestejä käsitellä, laita SDL_PumpEvents(), muussa tapauksessa laita SDL_PollEvent-funktio while-silmukkaan ja muuta pääsilmukkaa hieman:
SDL_Event e; int silmukka = 1; while (silmukka) { while (SDL_PollEvent(&event)) { if (e.type == SDL_QUIT) { silmukka = 0; } } // Muut pääsilmukan koodit }
Näin sivumennen sanoen, koodisi on tavattoman rumaa kieleltään. Vektor >_<, mikä se on? Ja jätä rivien lopuista turhat välit pois tiedoston kokoa kasvattamasta.
Laitoin kuin käskit, mutta ei se auttanut olleskaan...
No kyllä tuo minulla toimi aivan odotetusti, veti viivan kohdasta (700, 400) hiiren osoittimeen.
Niin juu, kannattaa niille "vektoreille" varata tilaa.
Vektor Vektors[];
Tuo ei ole oikein hyvä, laita sinne jokin luku väliin, vaikkapa yksi.
Outoa... Minulla tulee nyt vain musta ikkuna hetkeksi ja ohjelma sammuu parin sekunnin kuluttua... Mitähän mä oon taas möhliny...´
Edit: Blaze: Umh.. Tää ei oo tekstitilaohjelma :D
http://pp.kpnet.fi/blaze/codefaq/#justflashes
Edit: Hups... Tämän siitä saa kun irkkaa ja selaa tätä yhtäaikaa... ^_^;;
Ootko varmistanu, että se tosiaan sammuu, ettei kaadu (esim. puskuriylivuotoon)?
Mistäs se tarkistetaan? :D
Mut on se aika outoa jos koodi toimii Metabolixilla oikein mut mul ei toimi...
Katsot, mitä se pukkaa stderriin. Windowsilla tuo stderr kai ohjautuu stderr.txt-nimiseen tiedostoon ohjelman hakemistossa.
Se "SDL parachute deployed" sitten meinaa, että se kaatu. Silloin debuggeri esille ja seuraamaan, missä kohdin näin käy.
Toinen asia olisi se, että ei kannata määritellä muuttujia ja tyyppejä samoilla nimillä. Mouse Mouse
, ei näin.
Laitoithan nyt vektoreille lukumäärän?
Haha... Nyt toimii... Debuggailin ja rivi joka laitto sen kaatumaan on:
if (Keyboard.Buttons[SDLK_ESCAPE]) break;
Sitte poistin ton rivin ja se toimi, sit sähläsin ton PollEvent homman kaa nii sain toimii ton virhe-rivin :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.