Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
Dopo anni di attesa e una lunga fase di sviluppo, Noctua entra nel mercato dei dissipatori a liquido AIO con la nuova serie NL-LC1. Forte dell'esperienza maturata nel raffreddamento ad aria, l'azienda austriaca promette di portare la propria filosofia fatta di qualità costruttiva, attenzione ai dettagli e silenziosità anche in questo segmento. Abbiamo provato il nuovo sistema per scoprire se riesce a distinguersi in un mercato ormai molto competitivo.
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-11-2006, 20:18   #1
Eraser|85
Senior Member
 
L'Avatar di Eraser|85
 
Iscritto dal: Jul 2002
Messaggi: 3377
[OpenGL] Trasformazioni su figure poligonali 2D

Salve

sto lavorando ad un progetto che prevede il disegno di diverse poligonali. Questi sono i requisiti:
[x] Possibilità di aggiungere un numero non precisato di poligonali
[x] Possibilità di aggiungere un numero non precisato di punti per ogni poligonale
[x] Possibilità di selezionare un punto o una poligonale con un singolo click
[x] Possibilità di modificare la posizione dei punti per ciascuna poligonale
[ ] Implementare rotazione, scalatura e traslazione per ciascuna curva

Come facilmente intuibile, attualmente sono fermo all'ultimo dei requisiti.
Fin'ora ho realizzato un programma che si basa su questo schema:


Ho una classe chiamata "curves" in cui ho una lista di "shape" (list<shape> in c++). Ogni "shape" a sua volta contiene una lista di puntatori a "dot2D" (list<dot2D *> sempre in c++). Memorizzo i puntatori invece che gli oggetti veri e propri perchè successivamente mi serve fare alcune operazioni su di loro.
Ogni punto ha inoltre un riferimento sottoforma di puntatore in un albero binario che uso per fare la ricerca dei punti quando clicco sulla viewport.

Il problema è.. quando io ruoto una singola shape in base al centro del suo convex hull (faccio una glTranslate per spostarmi alle coordinate (0,0), poi la glRotate e infine un'altra glTranslate per riportarmi alle coordinate originali) i punti avranno ovviamente su schermo coordinate diverse da quelle memorizzate nell'albero binario.. rendendo di fatto la ricerca dei punti impossibile.

La mia domanda quindi è.. come faccio a modificare le coordinate dei punti a seguito di una trasformazione (glRotate o glScale)?
__________________
1) Fractal North » NZXT C850 » AMD Ryzen 7 9800x3D » MSI MAG B850 Tomahawk » 2x32GB DDR5 G.Skill Trident Z5 Neo 6000 » Gigabyte Radeon RX 9070XT 16GB » Samsung 9100Pro 1TB » Razer Mamba Hyperflux » Mode Sonnet w/ Alpaca v2 e NK Cherry Industrial Keys » Acer Predator XB271HU 2) iPhone 15 Pro 256GB
Eraser|85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2006, 20:23   #2
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Quote:
Originariamente inviato da Eraser|85
Salve

sto lavorando ad un progetto che prevede il disegno di diverse poligonali. Questi sono i requisiti:
[x] Possibilità di aggiungere un numero non precisato di poligonali
[x] Possibilità di aggiungere un numero non precisato di punti per ogni poligonale
[x] Possibilità di selezionare un punto o una poligonale con un singolo click
[x] Possibilità di modificare la posizione dei punti per ciascuna poligonale
[ ] Implementare rotazione, scalatura e traslazione per ciascuna curva

Come facilmente intuibile, attualmente sono fermo all'ultimo dei requisiti.
Fin'ora ho realizzato un programma che si basa su questo schema:


Ho una classe chiamata "curves" in cui ho una lista di "shape" (list<shape> in c++). Ogni "shape" a sua volta contiene una lista di puntatori a "dot2D" (list<dot2D *> sempre in c++). Memorizzo i puntatori invece che gli oggetti veri e propri perchè successivamente mi serve fare alcune operazioni su di loro.
Ogni punto ha inoltre un riferimento sottoforma di puntatore in un albero binario che uso per fare la ricerca dei punti quando clicco sulla viewport.

Il problema è.. quando io ruoto una singola shape in base al centro del suo convex hull (faccio una glTranslate per spostarmi alle coordinate (0,0), poi la glRotate e infine un'altra glTranslate per riportarmi alle coordinate originali) i punti avranno ovviamente su schermo coordinate diverse da quelle memorizzate nell'albero binario.. rendendo di fatto la ricerca dei punti impossibile.

La mia domanda quindi è.. come faccio a modificare le coordinate dei punti a seguito di una trasformazione (glRotate o glScale)?

In OpenGL le trasformazioni, se ricordo bene, vengono eseguite in ordine inverso. Quindi devi prima dare la translation poi la rotate poi la scale.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2006, 20:27   #3
Eraser|85
Senior Member
 
L'Avatar di Eraser|85
 
Iscritto dal: Jul 2002
Messaggi: 3377
in OpenGL le trasformazioni avvengono secondo uno Stack. Le trasformazioni da effettuare vengono messe in una "pila", quindi vengono effettuate in maniera LIFO (last in, first out) o parlando in termini umani, in ordine inverso

Il mio problema non è questo però...
__________________
1) Fractal North » NZXT C850 » AMD Ryzen 7 9800x3D » MSI MAG B850 Tomahawk » 2x32GB DDR5 G.Skill Trident Z5 Neo 6000 » Gigabyte Radeon RX 9070XT 16GB » Samsung 9100Pro 1TB » Razer Mamba Hyperflux » Mode Sonnet w/ Alpaca v2 e NK Cherry Industrial Keys » Acer Predator XB271HU 2) iPhone 15 Pro 256GB
Eraser|85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2006, 21:21   #4
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Quote:
Originariamente inviato da Eraser|85
in OpenGL le trasformazioni avvengono secondo uno Stack. Le trasformazioni da effettuare vengono messe in una "pila", quindi vengono effettuate in maniera LIFO (last in, first out) o parlando in termini umani, in ordine inverso

Il mio problema non è questo però...
Mi sa che non ho capito che ti serve, forse perchè non conosco tali curve, se spieghi meglio magari posso vedere di darti una mano :P

Ahh cacchio ora ho capito.

Non conosco bene opengl ma mi sa che ti conviene costruirti una matrice di trasformazione unica e poi moltiplichi uno a uno i punti. In DirectX lo so fare, in OpenGL non sarà troppo diverso no?

Ultima modifica di Ufo13 : 06-11-2006 alle 21:24.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2006, 22:01   #5
Eraser|85
Senior Member
 
L'Avatar di Eraser|85
 
Iscritto dal: Jul 2002
Messaggi: 3377
che balle.. ma io mi domando.. tutto sto sbattimento per quanto riguarda programmi così semplici.. e nel caso dei giochi o dei software di grafica3D ?? non oso immaginare.. O_O

edit: che poi pensandoci su devo solo lavorare un po' di più sulla rotazione.. la traslazione è semplicemente x + delta, y + delta.. la scalatura é x*delta, y*delta..

per la rotazione è x' = [x*cosf(delta) - y*sinf(delta)], y' = [x*sinf(delta) + y*cosf(delta)]..

Ok.. io stavo pensando però di applicare queste traslazioni a tutti i punti solo dopo che è stato rilasciato il tasto sinistro del mouse (terminato il drag'n'drop) dato che mi sembra piuttosto inutile e pesante farlo per ogni chiamata nella Render..
Per dare un feedback all'utente posso sempre usare momentaneamente nella render le funzioni glRotate e glScale.. che ne dici?
__________________
1) Fractal North » NZXT C850 » AMD Ryzen 7 9800x3D » MSI MAG B850 Tomahawk » 2x32GB DDR5 G.Skill Trident Z5 Neo 6000 » Gigabyte Radeon RX 9070XT 16GB » Samsung 9100Pro 1TB » Razer Mamba Hyperflux » Mode Sonnet w/ Alpaca v2 e NK Cherry Industrial Keys » Acer Predator XB271HU 2) iPhone 15 Pro 256GB

Ultima modifica di Eraser|85 : 06-11-2006 alle 23:44.
Eraser|85 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
Jensen Huang è andato a zappare l...
Prime Day in anticipo - giorno 3: ci son...
AMD EPYC e Instinct: accordo per fornire...
Amazon spinge Fire TV Stick 4K Select, R...
Ryzen 10000 Olympic Ridge desktop: addio...
Android 17 debutta sui Pixel: ecco cosa ...
Samsung annuncia il Galaxy Book6 Edge co...
Nuove regole per gli acquisti online: da...
I nuovi OPPO Reno 16 sono pronti al debu...
Prime Day anticipato, tutti i robot aspi...
Bug FIFA ai Mondiali 2026: chiunque avre...
Stop Killing Games bocciata: l'Europa no...
I costi dei 2 nm di TSMC potrebbero apri...
Prime Day Amazon, scope elettriche senza...
GTA 6 potrebbe registrare un numero impr...
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: 10:09.


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