Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Abbiamo provato il nuovo HUAWEI Pura 80 Pro. Parliamo di uno smartphone che è un vero capolavoro di fotografia mobile, grazie ad un comparto completo in tutto e per tutto, In questa colorazione ci è piaciuto molto, ma i limiti hardware e software, seppur in netto miglioramento, ci sono ancora. Ma HUAWEI ha fatto davvero passi da gigante per questa nuova serie Pura 80. Buona anche l'autonomia e soprattutto la ricarica rapida sia cablata che wireless, velocissima.
Opera Neon: il browser AI agentico di nuova generazione
Opera Neon: il browser AI agentico di nuova generazione
Abbiamo provato il nuovo web browser con intelligenza artificiale della serie Opera accessibile tramite abbonamento. Ecco le nostre prime impressioni sulle funzionalità di Opera Neon basate su AI e come funzionano
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-12-2007, 16:28   #1
Maverick18
Senior Member
 
L'Avatar di Maverick18
 
Iscritto dal: Aug 2005
Messaggi: 2020
Opengl, matrici di trasformazione

Sto facendo un mini space invaders per smanettare un po' con opengl (in c), in vista dell'esame di grafica computazionale. Il problema è che non riesco a creare il proiettile nella stessa posizione della navicella e nello stesso tempo a visualizzarlo su un altro sistema di riferimento. Come faccio a procurarmi la matrice di trasformazione della navicella in modo da moltiplicarla col quella del proiettile ?
Maverick18 è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 16:33   #2
variabilepippo
Senior Member
 
L'Avatar di variabilepippo
 
Iscritto dal: Mar 2007
Messaggi: 1792
Potresti prendere spunto dal codice di Space Invaders GL.

variabilepippo è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 16:42   #3
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Maverick18 Guarda i messaggi
Sto facendo un mini space invaders per smanettare un po' con opengl (in c), in vista dell'esame di grafica computazionale. Il problema è che non riesco a creare il proiettile nella stessa posizione della navicella e nello stesso tempo a visualizzarlo su un altro sistema di riferimento. Come faccio a procurarmi la matrice di trasformazione della navicella in modo da moltiplicarla col quella del proiettile ?
la matrice di trasformazione della navicella e del proiettile non centra nulla.

Innanzitutto: stai lavorando in 2d o 3d?

Il proiettile deve avere una sua matrice indentità per renderizzarlo nella scena.

poi non si capisce cosa vuoi fare: vuoi renderizzare un proiettile insieme alla navicella oppure vuoi che il proiettile vada contro la navicella?


Se vuoi che il proiettile sia alla stessa posizione, in world space, della navicella devi assegnare al proiettile le stesse coordinate.


poi come hai creato la navicella e il proiettile?... l'hai fatti come mesh.x?

ti posso aiutare nel limite ma considera che uso directx ma se sono calcoli vettoriali ti posso aiutare ma devi spoiegare bene cosa vuoi fare.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 16:47   #4
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Maverick18 Guarda i messaggi
...Il problema è che non riesco a creare il proiettile nella stessa posizione della navicella e nello stesso tempo a visualizzarlo su un altro sistema di riferimento...
il sistema di riferimento deve essere lo stesso se no o la navicella o il proiettile saranno in posizioni assurde.

Quote:
...Come faccio a procurarmi la matrice di trasformazione della navicella in modo da moltiplicarla col quella del proiettile ?...
Se la navicella è renderizzata a video nello spazio dovresti sapere la sua matrice identità e di trasformazione a meno che stai lavorando su codice non tuo.

allora 2d o 3d?

come sono fatti la navicella e il proiettile in .x (mesh) oppure sono texture per il 2d?
okay è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 16:47   #5
Maverick18
Senior Member
 
L'Avatar di Maverick18
 
Iscritto dal: Aug 2005
Messaggi: 2020
Quote:
Originariamente inviato da okay Guarda i messaggi
la matrice di trasformazione della navicella e del proiettile non centra nulla.

Innanzitutto: stai lavorando in 2d o 3d?

Il proiettile deve avere una sua matrice indentità per renderizzarlo nella scena.

poi non si capisce cosa vuoi fare: vuoi renderizzare un proiettile insieme alla navicella oppure vuoi che il proiettile vada contro la navicella?


Se vuoi che il proiettile sia alla stessa posizione, in world space, della navicella devi assegnare al proiettile le stesse coordinate.


poi come hai creato la navicella e il proiettile?... l'hai fatti come mesh.x?

ti posso aiutare nel limite ma considera che uso directx ma se sono calcoli vettoriali ti posso aiutare ma devi spoiegare bene cosa vuoi fare.
Mi sono spiegato decisamente male.
Lavoro in 2D, la mia navicella è un triangolo bidimensionale. Vorrei che la navicella sparasse un proiettile(un triangolino) da un vertice del triangolo.
Il mio problema sta nel fatto che non riesco a trattare navicella e proiettile come due entità diverse e nello stesso tempo rappresentarle in sistemi di riferimento diversi. (il proiettile deve avere come sistema di riferimento inziale, il sistema di riferimento della navicella al momento dello sparo)
Maverick18 è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 16:57   #6
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Maverick18 Guarda i messaggi
Mi sono spiegato decisamente male.
Lavoro in 2D, la mia navicella è un triangolo bidimensionale. Vorrei che la navicella sparasse un proiettile(un triangolino) da un vertice del triangolo.
Il mio problema sta nel fatto che non riesco a trattare navicella e proiettile come due entità diverse e nello stesso tempo rappresentarle in sistemi di riferimento diversi. (il proiettile deve avere come sistema di riferimento inziale, il sistema di riferimento della navicella al momento dello sparo)
allora 2d.

la navicella deve avere coordinate xy per esempio pos_navicella(10, 28)

non devi far altro che dare le coordinate al proiettile a pos_proiettile(10, 28)

poi muovi il proiettile sulla y pos_proiettile(x,y)+=0.1f

Considera che la navicella si muove sulla x ora nel momento in cui spari visualizzi il proiettile alle coordinate di dove si trovava la navicella al momento dello sparo per esempio (13,28) ora muovi e renderizzi il proiettile a coordinate iniziali (13,28) aumentando solo la y tipo:
pos_proiettile(x,y)+=0.1f //y=28.01
pos_proiettile(x,y)+=0.1f //y=28.02
pos_proiettile(x,y)+=0.1f //y=28.03
pos_proiettile(x,y)+=0.1f //y=28.04
pos_proiettile(x,y)+=0.1f //y=28.05

ecc ecc

se c'è una collisione con astronave nemica (collisione) allora esegui l'esplosione facendo sparire l'astronave colpita (metti a 0 i.ma posizione della matrice) se è simile a space invader 2d


Edit:

ogni oggetto deve avere la sua matrice identità come quella della navicella per essere renderizzato che stiano nello stesso sistema di riferimento.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 17:12   #7
Maverick18
Senior Member
 
L'Avatar di Maverick18
 
Iscritto dal: Aug 2005
Messaggi: 2020
Il mio problema non sono le posizioni, ma le matrici in sè, non capisco nè come utilizzarle nè come ottenerle.

Premetto che per ora la mia navicella si muove in questo modo:

se premo 'w' o 's' : traslo sist. rif. su asse y
se premo 'a' o 'd' : ruoto sist. rif su asse z
se non tocco nulla la navicella resta ferma.

Fin qui nessun problema, il problema nasce quando devo inserire il proiettile. Come faccio ad adottare per il proiettile lo stesso sistema di riferimento della navicella ? Con glPushMatrix() e glPopMatrix() riesco a mettere da parte la matrice della navicella, e a operare su una sua copia, ma il proiettile a quel punto diventa parte del sistema di riferimento della navicella.

Invece vorrei fare così:
salvarmi la matrice della navicella, moltiplicare quest'ultima per la matrice identità del proiettile, disegnare il proiettile.

Forse non è questo il metodo esatto ?
Maverick18 è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 17:31   #8
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Maverick18 Guarda i messaggi
Il mio problema non sono le posizioni, ma le matrici in sè, non capisco nè come utilizzarle nè come ottenerle.

Premetto che per ora la mia navicella si muove in questo modo:

se premo 'w' o 's' : traslo sist. rif. su asse y
se premo 'a' o 'd' : ruoto sist. rif su asse z
se non tocco nulla la navicella resta ferma.

Fin qui nessun problema, il problema nasce quando devo inserire il proiettile. Come faccio ad adottare per il proiettile lo stesso sistema di riferimento della navicella ? Con glPushMatrix() e glPopMatrix() riesco a mettere da parte la matrice della navicella, e a operare su una sua copia, ma il proiettile a quel punto diventa parte del sistema di riferimento della navicella.

Invece vorrei fare così:
salvarmi la matrice della navicella, moltiplicare quest'ultima per la matrice identità del proiettile, disegnare il proiettile.

Forse non è questo il metodo esatto ?
te lo ripeto:
la navicella ha la sua matrice e non serve moltiplicarla o averne una copia.
Non puoi assegnare la matrice della navicella al proiettile solo per dargli le stesse coordinate, il proiettile si muoverebbe insieme alla navicella.

il proiettile deve avere, come la navicella, una sua propria matrice identità

in directx per esempio si usa questo per le matrici identità (per farti capire):

D3DXVECTOR3 Position(0,0,0)
D3DXVECTOR3 posNavicella(30,0,18)

D3DXMATRIX Navicella
D3DXMATRIX proiettile

D3DXMatrixTranslation(&Navicella, posNav.x, posNav.y, posNav.z);
SetTrasform(Navicella) //renderizzo a video
/*
if sparo prendo la posizione della navicella e la passo a proiettile
Position=posNav
*/
if(sparo){
Position.y+=0.1f;
D3DXMatrixTranslation(&proiettile, Position.x, Position.y, Position.z);
SetTrasform(proiettile) //renderizzo a video
}

come vedi devi avere 2 matrici una per la navicella e una per il proiettile
eccole:
D3DXMATRIX Navicella
D3DXMATRIX proiettile

per il proiettile invece puoi fare delle copie ma riguarda solo l'immaggine e la copia ha sempre una matrice identità propria es:

D3DXVECTOR3* Position[8] //proiettili

puoi usare la stessa matrice per renderizzare il triangolo del proiettile così:
D3DXMatrixTranslation(&proiettile, Position[0].x, Position[0].y, Position[0].z);
SetTrasform(proiettile) //renderizzo a video
D3DXMatrixTranslation(&proiettile, Position[1].x, Position[1].y, Position[1].z);
SetTrasform(proiettile) //renderizzo a video
D3DXMatrixTranslation(&proiettile, Position[2].x, Position[2].y, Position[2].z);
SetTrasform(proiettile) //renderizzo a video

...questi sono 3 proiettili sparati e visualizzati dalla stessa matrice identità ma le loro coordinate sono differenti in definitiva i 3 proiettili verranno renderizzati con la stessa immagine ma a coordinare differenti tutti 3 insieme.



spero di essere stati chiaro.

questo con le dx ma con le opengl la tecnica è la stessa cambiano solo le istruzioni.


ciao

Ultima modifica di okay : 03-12-2007 alle 17:37.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 17:40   #9
Maverick18
Senior Member
 
L'Avatar di Maverick18
 
Iscritto dal: Aug 2005
Messaggi: 2020
Quote:
Originariamente inviato da okay Guarda i messaggi
te lo ripeto:
la navicella ha la sua matrice e non serve moltiplicarla o averne una copia.
Non puoi assegnare la matrice della navicella al proiettile solo per dargli le stesse coordinate, il proiettile si muoverebbe insieme alla navicella.
Non voglio assegnarla, vorrei solo moltiplicarla per ottenere la posizione della navicella.
Quote:
in directx per esempio si usa questo per le matrici identità (per farti capire):
questo con le dx ma con le opengl la tecnica è la stessa cambiano solo le istruzioni.
Sì, questo ragionamento l'avevo fatto anch'io, ma per ora non ho trovato istruzioni per farlo allora mi sono buttato sulle matrici. Sto facendo un po' di confusione
Grazie per l'aiuto, appena risolvo ti dico.

Ultima modifica di Maverick18 : 03-12-2007 alle 17:44.
Maverick18 è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 17:51   #10
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Maverick18 Guarda i messaggi
Non voglio assegnarla, vorrei solo moltiplicarla per ottenere la posizione della navicella.


Sì, questo ragionamento l'avevo fatto anch'io, ma per ora non ho trovato istruzioni per farlo allora mi sono buttato sulle matrici. Sto facendo un po' di confusione
Grazie per l'aiuto, appena risolvo ti dico.
in opengl si usa:

primo triangolo renderizzato (navicella)
glBegin (GL_TRIANGLES);
glTranslatef (nx, ny, nz); //posizione
glVertex3fv (&Data.Verts.Pos);
glEnd ();

secondo triangolo renderizzato (proiettile)
glBegin (GL_TRIANGLES);
glTranslatef (px, py, pz); //posizione
glVertex3fv (&DataVerts.Pos);
glEnd ();
okay è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 18:01   #11
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Maverick18 Guarda i messaggi
Invece vorrei fare così:
salvarmi la matrice della navicella, moltiplicare quest'ultima per la matrice identità del proiettile, disegnare il proiettile.
Il problema e' abbastanza semplice ed e' indipendente dalla libreria che usi o dall'essere in 3D o 2D. E' un semplice problema di geometria.

Associa ad ogni oggetto una sua matrice che ne definisce l'orientamento e la posizione nel mondo. Se vuoi l'interpretazione matematica, stai costruendo una matrice che porta dal sistema di riferimento locale dell'oggetto al sistema di riferimento del mondo. Questa e' la matrice che OpenGL o D3D "usera'" in qualche modo per disegnare l'oggetto.

Quindi la tua navicella avra' una matrice di trasformazione che chiamiamo N.
Ora vuoi sparare un proiettile che vuoi disegnare, per fare un esempio, mezzo metro di fronte alla navicella. Stai quindi lavorando in questo caso nel sistema locale della navicella, e devi calcolare una matrice che porta dal sistema locale del proiettile (che e' locale rispetto alla navicella) al sistema di riferimento del mondo.

Prima matrice locale del proiettile:
P1 = matrice di traslazione di un metro in avanti (decidi tu l'asse)
N = matrice di trasformazione della navicella che mantieni da qualche parte nel tuo codice (non te la deve restituire OpenGL, la memorizzi tu nell'oggetto navicella)

La matrice di trasformazione P da associare al proiettile diventa:
P = P1 * N;

Passi la matrice P a OpenGL ed hai finito. Il procedimento generale e' che ogni volta che passi da un sistema locale ad un altro, premoltiplichi la matrice di trasformazione.

Nota che il procedimento e' indipendente dall'essere in 2D o in 3D: in 2D hai solo un asse in meno.

Quote:
Originariamente inviato da okay Guarda i messaggi
D3DXMatrixTranslation(&Navicella, posNav.x, posNav.y, posNav.z);
SetTrasform(Navicella) //renderizzo a video
Uh?!
Questo non e' D3D. SetTransform non renderizza nulla
fek è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2007, 19:12   #12
Maverick18
Senior Member
 
L'Avatar di Maverick18
 
Iscritto dal: Aug 2005
Messaggi: 2020
Quote:
Originariamente inviato da fek Guarda i messaggi
Il problema e' abbastanza semplice ed e' indipendente dalla libreria che usi o dall'essere in 3D o 2D. E' un semplice problema di geometria.

Associa ad ogni oggetto una sua matrice che ne definisce l'orientamento e la posizione nel mondo. Se vuoi l'interpretazione matematica, stai costruendo una matrice che porta dal sistema di riferimento locale dell'oggetto al sistema di riferimento del mondo. Questa e' la matrice che OpenGL o D3D "usera'" in qualche modo per disegnare l'oggetto.

Quindi la tua navicella avra' una matrice di trasformazione che chiamiamo N.
Ora vuoi sparare un proiettile che vuoi disegnare, per fare un esempio, mezzo metro di fronte alla navicella. Stai quindi lavorando in questo caso nel sistema locale della navicella, e devi calcolare una matrice che porta dal sistema locale del proiettile (che e' locale rispetto alla navicella) al sistema di riferimento del mondo.

Prima matrice locale del proiettile:
P1 = matrice di traslazione di un metro in avanti (decidi tu l'asse)
N = matrice di trasformazione della navicella che mantieni da qualche parte nel tuo codice (non te la deve restituire OpenGL, la memorizzi tu nell'oggetto navicella)

La matrice di trasformazione P da associare al proiettile diventa:
P = P1 * N;

Passi la matrice P a OpenGL ed hai finito. Il procedimento generale e' che ogni volta che passi da un sistema locale ad un altro, premoltiplichi la matrice di trasformazione.
Ok, la spiegazione l'ho capita, sono gli argomenti che sto affrontando anche in robotica. E' la parte in grassetto che non comprendevo, pensavo che la matrice mi venisse fornita direttamente da opengl. Quindi le matrici le devo implementare io, poi le elaboro con le varie chiamate. Appena ho tempo ci provo.
Maverick18 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
Michael Burry sfida la febbre AI: maxi s...
Windows 11 e 10: bug negli aggiornamenti...
Huawei presenta due desktop next-gen con...
WhatsApp sbarca ufficialmente su Apple W...
WhatsApp proteggerà gli utenti se...
Neuralink e Tesla Optimus: controllo cer...
Arriva in Italia Ring Intercom Video: il...
Falsi avvisi su Windows 10 a fine suppor...
Epic e Google raggiungono un accordo sto...
Apple rilascia la prima beta di iOS 26.2...
Affare lampo: Google Pixel 10 a 699€ e G...
Apple pronta a entrare nel mercato dei l...
Windows 11 26H1 fa la sua prima (timida)...
L'alternativa che aspettavamo al Magic T...
Apple prepara il lancio del chip M5 Ultr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:58.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v