Šta je novo?

OpenGL iscrtavanje pozicije kursora na koju je kliknuto misem

psycho84

Slavan
Učlanjen(a)
03.12.2007
Poruke
178
Poena
320
Moja oprema  
CPU & Cooler
Thermalright Assain King 90
Matična ploča
MSI B550M Pro-VDH Wifi
RAM
2x16GB 3000MHz G.Skill Aegis
GPU
RX6800 16GB Powercolor Reaper
Storage
WD SN550 1TB + Toshiba Canvio Basics external 3TB
Zvuk
Integrated + EIDA 9038D
PSU
Seasonic SGX 500W SFX-L
Kućište
SKTC HX Box 100
Monitor
Lenovo ThinkVision T24v 24"
Miš & tastatura
Drevo Gramr full RGB 75% mechanical Gateron Brown, Logitech Triathlon + MS IMO 1.1a
Ostale periferije
HifiMan Sundara CB
Mobilni telefon
iPhone 13 mini
Pristup internetu
  1. Optički internet
  2. Mobilni internet
Dakle znam kako dobijem openGL koordinate misa uz koriscenje:
glReadPixels() i gluUnProject() i dobijam x,y,z ali ne mogu nikako da izvedem da mi se
na tom mjestu npr. iscrta krstic. Pokusavam ovako da iscrtam kao cosak:

Kod:
glMatrixMode (GL_MODELVIEW);
glLoadIdentity(); 
gluLookAt(ScreenXpos, ScreenYpos, ScreenZpos, ScreenXpos, ScreenYpos, 0.0, 0.0, 1.0, 0.0);
glPushMatrix();
//glRotated(180, 1.0, 0.0, 0.0);

glColor3f(0.0, 1.0, 0.0); //green
glLineWidth(2.0);
		
glBegin(GL_LINE_STRIP);
			
glVertex2d(posX*FAKTOR, (posY+20)*FAKTOR);
glVertex2d(posX*FAKTOR, posY*FAKTOR); 
glVertex2d((posX+20)*FAKTOR, posY*FAKTOR);
//glVertex2d(posX1, posY2);
glEnd();

glPopMatrix();

posX i posY su openGL koordinate gdje je kliknuto misom.FAKTOR je faktor skaliranja.

Dakle treba mi na postojeci crtez kad kliknem misem da se na toj poziciji iscrta krstic
ili tako nesto da se zna gdje je kliknuto misem.

Ako neko zna neko rjesenje ili da mi ukaze sta pogresno radim savjeti su dobrodosli.
Hvala svima unaprijed!
 
Kod:
void Begin2DMode(vec2i size)
{
	glMatrixMode(GL_PROJECTION); 
	glPushMatrix();	
	glLoadIdentity();
	glOrtho(0.0, size.x, size.y, 0.0, -1.0, 1.0);
	glMatrixMode(GL_MODELVIEW);	 
	glPushMatrix();	
	glLoadIdentity();
}

void End2DMode()
{
	glPopMatrix(); 
	glMatrixMode(GL_PROJECTION); 
	glPopMatrix(); 
	glMatrixMode(GL_MODELVIEW);
}


Negde u programu:
...
// neka je koordinata misa u mouseX i mouseY
// neka je velicina krstica u crossSize
Begin2DMode(velicina_viewporta);
// crtanje krstica
glColor3f(1,0,0); // crvena boja
glBegin(GL_LINES);
 glVertex2f(mouseX - crossSize, mouseY);
 glVertex2f(mouseX + crossSize, mouseY);
 glVertex2f(mouseX, mouseY - crossSize);
 glVertex2f(mouseX, mouseY + crossSize);
glEnd();
End2DMode();

Moja preporuka je da crtas prvo sve u 3D pa onda predjes u 2D mode i iscrtas sve UI stvari i taj krstic.
Begin2DMode postavlja 2d mode crtanja tako da je 0,0u gornjem levom cosku.. tako je bar lakse programerima.

gluUnproject ti racuna 3d koordinatu tog pixela. To je potrebno samo za neki jednostavan object picking.
2d koordinatu misa dobijes od windowsa.. samo prati WM_MOUSEMOVE poruku.
 
Poslednja izmena:
Vrh Dno