Toon posts:

[OPENGL] glRasterPos in window coordinates

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een vraagje m.b.t. OpenGL... ik denk dat hij hier op de juiste plaats staat, maar als hij toch in PW hoort, verplaats em dan maar....

ik wil de huidige raster positie aan de hand van rastercoordinaten veranderen, maar glRasterPos wil alleen object coordinaten hebben als parameters.. hier heb ik dus niks aan, ik wil de waarde veranderen die ik met glGet + GL_CURRENT_RASTER_POSITION terug krijg

iemand een idee?

  • Willem
  • Registratie: Februari 2001
  • Laatst online: 22:08
Misschien bij de buren inderdaad :)

move /13 -> /14

Motor (of auto) onderhoud bijhouden


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je kunt de matrices natuurlijk op identity zetten, zodat er geen transformatie plaats vindt

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
.oisyn schreef op 08 juni 2003 @ 21:12:
Je kunt de matrices natuurlijk op identity zetten, zodat er geen transformatie plaats vindt
dan zou de volgende code toch moeten werken? als ik regel 18 uit-commentariseer dan zie ik netjes een 'a' links onderin mijn scherm, maar als ik em wel meecompileer dan zie ik niks :/

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void drawInfo()
{
  GLdouble rp[4];

  glMatrixMode(GL_PROJECTION);

  glPushMatrix();   // huidige matrixmode is GL_MODELVIEW
  glLoadIdentity();

  glMatrixMode(GL_MODELVIEW);

  glPushMatrix();
  glLoadIdentity();

  
  glGetDoublev(GL_CURRENT_RASTER_POSITION, rp);

  glRasterPos4dv(rp); // regel 18

  printf("X: %f, Y: %f, Z: %f, W: %f\n", rp[0], rp[1], rp[2], rp[3]);
  glutBitmapCharacter(GLUT_BITMAP_8_BY_13, 'a');
  glPopMatrix();

  glMatrixMode(GL_PROJECTION);
  glPopMatrix();
}

[ Voor 4% gewijzigd door Verwijderd op 09-06-2003 01:06 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

wat zijn de waarden van x en y na die printf? Is dat in device-coordinaten of in clip-space coordinaten (tussen -1 en 1)?

Als het devicecoordinaten zijn is het wel logisch: als alle matrices als identity zijn geinitializeerd, dan werk je dus direct in clipspace. Maar (-1, -1) in clipspace mapt naar de linker-onderhoek in je scherm. Wat je echter wilt is dat je devicespace coordinaten op kunt geven, aangezien je het aan wilt passen

Je zult een van de matrices (de projection lijkt me het best, hoewel het niet echt uitmaakt als de ander een identity matrix is) dus zo moeten zetten dat devicecoordinaten terug worden gezet naar clipspace coordinaten.

Om van devicespace terug te gaan naar clipspace, moeten er een aantal acties gebeuren. (0, 0) is de linker-bovenhoek van je scherm, en (width, height) de rechter-onderhoek. (width/2, height/2) ligt in het midden, en dat is (0, 0) in clipspace. We moeten dus eerst transleren over (-width/2, -height/2).

Als dat gedaan is dan is -width/2 de linkerkant, en width/2 de rechterkant. Dit moet resp. -1 en 1 worden. Let wel dat het bij de y net andersom is, aangezien positieve y in devicecoordinaten omlaag lopen, terwijl het in clipspace omhoog loopt. -height/2 is dus de bovenkant van het scherm, en height/2 is de onderkant, wat gemapped moet worden naar 1 en -1
Je doet dus een schaling over (1 / (width/2), -1 / (height / 2))

En dan heb je een matrix die devicecoordinaten terugzet naar clipspace coordinaten. Als je die zet als projection matrix dan moet het volgens mij wel lukken

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
okay thnx.. ik zal het eens proberen

toch vind ik het best absurd dat je de raster positie alleen in object coordinaten kan invoeren en alleen in raster coordinaten kan uitlezen :/ het enige dat ik er eigenlijk mee wil bereiken is een textout functie maken die bij een '\n' de raster verandert naar (0, oude_rp[1] + 13) net zoals glut bij glutBitmapCharacter() zelf al de rasterpos verandert als hij een character bitmap wegschrijft

Verwijderd

Topicstarter
argh.. nu zie ik pas dat die deltaX en deltaY gewoon met glBitmap worden meegegeven :D ik gebruik wel gewoon die met width en height op 0

Verwijderd

Topicstarter
heel fijn.. nu blijkt dat GL_CURRENT_RASTER_POSITION niet verandert bij glBitmap, terwijl de daadwerkelijke rasterpositie dat toch echt wel doet :\

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik kwam zojuist dit artikel tegen: http://developer.nvidia.com/docs/IO/1325/ATT/oglpitfall.pdf
check punt 13

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1