3Dimensionāla kamera

Parunāsim par OpenGL
Message
Author
CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

3Dimensionāla kamera

#1 Post by CodeWolf » 28 May 2011, 13:33

Sveiki... Uhh kādu labu laiciņu jau nevaru tikt gala ar Kameru..Izmeiģināju dažādus variantus + skatijos pec pamacibam , bet nekas īsti nav sanācis.
Lietiņa tāda ,ka kamera negriežas un neseko līdzi objektam + tā aiziet kautkur galīgi garām..
kods Pozicijai + rotacijai

Code: Select all

Phy.Pos.x += (float)sin(heading*piover180)*5 ;			// Move On The X-Plane Based On Player Direction
		Phy.Pos.z += (float)cos(heading*piover180) *5;			// Move On The Z-Plane Based On Player Direction
		Phy.Gd = 0.1f;
Un kameras

Code: Select all

//gluLookAt(Phy.Pos.x,100,Phy.Pos.z+250,Phy.Pos.x,0,Phy.Pos.z,0,1,0);
	glTranslatef(0,-100,-250+Z);
	glTranslatef(Phy.Pos.x,0,Phy.Pos.z);
	//glRotatef(Phy.Pos.z,0,1,0);
:)
kods ir mainīts vairākas reizes taka ...tagad nav īsti sakarīgs..
//OpenGL

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: 3Dimensionāla kamera

#2 Post by snake5 » 28 May 2011, 15:04

Pēc koda nevaru saprast, ko tieši gribi panākt ar kameru. Vajag, lai griežas ap objektu un visu laiku skatās uz to?
Tā kā kods izskatās savākts no NeHe sliktajiem tutoriāļiem ("piover180" ir tik īpašs konstantes apzīmējums, ka Google nespēj noslēpt autoru :D ), nevaru arī saprast, vai ir pielāgots tavai asu sistēmai un visam pārējam.

Tāpēc sākam ar to, ka pastāsti, ko tieši gribi panākt, ar kādiem uzstādījumiem strādā (asu sistēmām*) u.tml.

*Ja vēl tikai sāc mācīties visu 3D un visu laiku kopē XZ asu bāzes kodu, iesaku laicīgi pāriet uz XY bāzi (un sakarīgākām pamācībām). XZ radās no slinkuma, ne veselā saprāta (tajos laikos, kad 3D API lietoja tikai zīmēšanai ekrāna telpā). Reāli visa 2D matemātika strādā ar X un Y un tā kā pārsvarā tā tiek lietota 3D horizontālajā plaknē, tad nebūs jācīnās ar Y/Z jaukšanu, kad tiek lietotas šādas funkcijas.

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: 3Dimensionāla kamera

#3 Post by CodeWolf » 28 May 2011, 16:13

mm Gribu panākt 3ešās personas kameru kura skatās uz noteiktu objektu..
līdzīgu postu rakstiju vecajā foruma kad stradaju ar xna...
Image
tikai strādājot ar Opengl nevaru isti saprst ko jaliek pie
glRotatef(...,0,1,0);//Y rotacijas
+ bieži vien ir tā ka kamera sagriežas galīgi atšgārni.
:D tikko sapratu ka liela nozīme ir secībai..
Pārliku šādi... itka viss ir labi

Code: Select all

gluLookAt(Phy.Pos.x,100,Phy.Pos.z+250,Phy.Pos.x,0,Phy.Pos.z,0,1,0);
	glRotatef(-Phy.YRot,0,1,0);
	glTranslatef(0,0,250+Z);
	glTranslatef(Phy.Pos.x,0,+Phy.Pos.z);
Neskaitot to ka kamera pa Zassi nekustas. ja uzliek negatīvu poziciju tad attalinas.. :?
//OpenGL

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: 3Dimensionāla kamera

#4 Post by snake5 » 28 May 2011, 16:37

kura skatās uz noteiktu objektu..
Tas ir īpaši skops apraksts. Pēc tāda atbilde ir "gluLookAt( cam.x, cam.y, cam.z, obj.x, obj.y, obj.z, up.x, up.y, up.z );".

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: 3Dimensionāla kamera

#5 Post by CodeWolf » 29 May 2011, 13:42

A. tatad translate nemaz nav vajadzīgi :D
Atstājot tikai LookAt.. un Rotatef uz Y ass ,kamera nedaudz par atru pagriežas vai ari izskatas ka seko citām koardiatem.
Video:
http://95.68.95.215/gfx/gfx.html
kods

Code: Select all

gluLookAt(Phy.Pos.x,100,Phy.Pos.z+250,Phy.Pos.x,0,Phy.Pos.z,0,1,0);
	glRotatef(-Phy.YRot,0,1,0);
:?
//OpenGL

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: 3Dimensionāla kamera

#6 Post by snake5 » 29 May 2011, 15:58

Var visu darīt daudz vienkāršāk.
Normalizē objekta virziena vektoru, atņem to, pareizinātu ar attālumu, no objekta pozīcijas un dabūsi kameras pozīciju. Būs šausmīgi primitīvi, bet vismaz pareizi. :P

User avatar
Arrovs
Posts: 107
Joined: 09 Dec 2010, 18:09
Location: Saldus-Jelgava

Re: 3Dimensionāla kamera

#7 Post by Arrovs » 29 May 2011, 17:15

Šo es izmantoju priekš saviem projektiem.
Īsi un vienkārši. Pārveido tā lai atpazītu tava sistēma.
Šeit neesu iekļāvis kameras sadursmes, bet man nav ne jausmas kā tas rukā tev.
////////////
temp = fcos(camera.tilt,-kameras_distance);
vec_set(camera.x,vector(my.x + fcos(camera.pan,temp),my.y + fsin(camera.pan,temp),my.z + 20 + fsin(camera.tilt,-kameras_distance)));
///
Sākumā iegūstu vertikālo leņķi, ko pēc tam piereizinu horizontālajam aplim, lai iegūtu sfēru.
Kameras distanci var dinamiski pielāgot.
un my = tavs sekojamais objekts.
Vari arī pēc tam to ierobežot noteiktos leņķos, lai nevar apgriezt kameru kājām gaisā.
Arrovs vēl joprojām dzīvs.

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: 3Dimensionāla kamera

#8 Post by CodeWolf » 29 May 2011, 19:42

hmm, meiģināju Snake5 metodi.Itkā kamera kustas līdzi + rotē , bet nedaudz.. Objektam pagriežoties kamera minimāli pagriežas+ nestāv precizi uz Z ass.

Code: Select all

if( keyarr['w'] )
	{
		Atrums.x += (float) sin(RotY*PiOver180)*4.04f;
		Atrums.z += (float) cos(RotY*PiOver180)*4.04f;
		
	}
	if( keyarr['s'] )
	{
		Atrums.x -= (float) sin(RotY*PiOver180)*4.04f;
		Atrums.z -= (float) cos(RotY*PiOver180)*4.04f;
		
	}

	Pos /*+*/=Atrums;
	Virz = Atrums;
	Virz.normalize();
	KPos = Pos - Virz * 250 ;
	gluLookAt(-KPos.x,100,-KPos.z,-Pos.x,0,-Pos.z,0,1,0);
:roll:
//OpenGL

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: 3Dimensionāla kamera

#9 Post by snake5 » 29 May 2011, 22:24

Objektam pagriežoties kamera minimāli pagriežas+ nestāv precizi uz Z ass.
Pirmkārt, nevajag apgriezt otrādi pozīcijas vektoru, tas ir galīgi nevajadzīgi. Otrkārt, virziens nav tas pats, kas ātrums. Ja radīsies gļuki, kad objekts stāvēs uz vietas, nevajag teikt, ka nebrīdināju. ;)
Un es vēl joprojām neesmu iebraucis asu sistēmā - nezinu, kura tavā kodā lietota. Ja tu lieto divas dažādas cauri visam kodam, nebūs brīnums, ja kādā asī kaut kas rādīsies nepareizi.

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: 3Dimensionāla kamera

#10 Post by CodeWolf » 30 May 2011, 00:10

Pag, ar kādu formulu varēja iegūt virzienu? Vectors... = .... (RotacijaY,Pozicija) vai ka tur bija :?
Un es vēl joprojām neesmu iebraucis asu sistēmā
Praktiski viss jau te ir nosaukts...
//OpenGL

Post Reply

Return to “OpenGL”