Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-10-2009, 19:21   #1
Ethoel
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 28
[C++&OpenGL] Oggetti con texture diverse

Salve ragazzi, faccio presente che me la cavo bene con la programmazione (C,C++,Java,Php sono linguaggi che conosco bene) quindi volevo iniziare a fare qualcosa utilizzando le librerie grafiche OpenGL (dopo un bel pò di 2D con le allegro)...
Sono bloccato in un vicolo cieco dovuto alla mia poca conoscenza delle OpenGL, se faccio un solo oggetto con una texture fin lì è tutto ok, il problema sono 2 oggetti diversi con 2 texture diverse...
Io ho fatto una specie di "grosso prato" (virgolettato perchè la texture usata è veramente orrenda), e una grossa piramide al centro, quando vado ad eseguire il prato è ok, la piramide invece appare verde o.O
Vi posto le parti di codice interessate:

Texture:
Codice:
int LoadGLTextures()								// Load Bitmaps And Convert To Textures
{
    int Status=FALSE;
    AUX_RGBImageRec *TextureImage[2];
    memset(TextureImage,0,sizeof(void *)*1);
   	// Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
	if (TextureImage[0]=LoadBMP("erba.bmp"))
	{
		Status=TRUE;	
		glGenTextures(1, &texture[0]);					// Create The Texture

		// Typical Texture Generation Using Data From The Bitmap
		glBindTexture(GL_TEXTURE_2D, texture[0]);
		// Generate The Texture
		glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);	// Linear Filtering
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);	// Linear Filtering
	}
	if (TextureImage[0])							// If Texture Exists
	{
		if (TextureImage[0]->data)					// If Texture Image Exists
		{
			free(TextureImage[0]->data);				// Free The Texture Image Memory
		}

		free(TextureImage[0]);						// Free The Image Structure
	}
	return Status;								// Return The Status
}
Piramide:
Codice:
void pyramid(float x,float z)
{
    glTranslatef(x,0.0f,z);
    glBegin(GL_TRIANGLES);
    
		glVertex3f( 0.0f, 8.0f, 0.0f);	// Top of triangle (front)
		glVertex3f(-2.0f,0.0f, 2.0f);	// Left of triangle (front)
		glVertex3f( 2.0f,0.0f, 2.0f);	// Right of triangle (front)
		
		glVertex3f( 0.0f, 8.0f, 0.0f);	// Top of triangle (right)
		glVertex3f( 2.0f,0.0f, 2.0f);	// Left of triangle (right)
		glVertex3f( 2.0f,0.0f, -2.0f);	// Right of triangle (right)
		
		glVertex3f( 0.0f, 8.0f, 0.0f);	// Top of triangle (back)
		glVertex3f( 2.0f,0.0f, -2.0f);	// Left of triangle (back)
    glVertex3f(-2.0f,0.0f, -2.0f);	// Right of triangle (back)
    

		glVertex3f( 0.0f, 8.0f, 0.0f);	// Top of triangle (left)
		glVertex3f(-2.0f,0.0f,-2.0f);	// Left of triangle (left)
		glVertex3f(-2.0f,0.0f, 2.0f);	// Right of triangle (left)
	glEnd();				// Finished Drawing The Triangle
}
"erba":
Codice:
void quad(float x, float z){
     glBindTexture(GL_TEXTURE_2D, texture[0]);
     glEnable(GL_TEXTURE_2D);
     glBegin(GL_QUADS);
         glTexCoord2f(0.0f,1.0f); glVertex3f(-2.0f+x, 0.0f, 2.0f+z); // Sopra a sinistra
         glTexCoord2f(1.0f,1.0f); glVertex3f( 2.0f+x, 0.0f, 2.0f+z); // Sopra a destra
         glTexCoord2f(1.0f,0.0f); glVertex3f( 2.0f+x, 0.0f, -2.0f+z); // Sotto a destra
         glTexCoord2f(0.0f,0.0f); glVertex3f(-2.0f+x, 0.0f, -2.0f+z); //sotto a sinistra
     glEnd();
     glDisable(texture[0]);
     }
Ah... ehm... le x e z lasciatele stare XD

Una mano?
Ethoel è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2009, 21:39   #2
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Non vorrei dire una vaccata megagalattica (ho usato poco OpenGL, solo per un esame e non ricordo molto), ma per disegnare oggetti con texture diverse devi fare una chiamata di glBindTexture prima di ogni disegno, ad esempio:
glBindTexture(...texture erba...);
disegnoErba();
glBindTexture(...texture piramide...);
disegnoPiramide();
ecc ecc

byez
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2009, 22:17   #3
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
esatto, tra l'altro non mi pare che tu abbia intenzione di texturizzare la piramide: non hai associato le texture coordinates ai vertici della piramide. se vuoi disegnare un oggetto privo di texture in una scena dove hai precedentemente usato delle textures, rimuovi il binding di ogni texture precedente invocando glBindTexture con 0 come nome di texture (0 é un nome riservato che significa "nessuna texture").

oltre a questo ti faccio notare che stai usando la fixed-function pipeline: sta per uscire OpenGL 3.2 e buona parte delle funzioni che hai usato sono deprecate giá in OpenGL 3.0 (in OpenGL 3.2 gli implementatori non saranno piu obbligati a metterle perché non fanno parte del core profile, quindi potresti non ritrovartele; in OpenGL ES ad esempio non ci stanno). quello che dovresti fare é studiarti i vertex array, i buffer objects e gli shaders, e possibilmente evitare di seguire i tutorial di NeHe che ormai sono diventati troppo vecchi.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2009, 22:22   #4
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
ah, faccio anche notare un'altra cosa:

Quote:
Originariamente inviato da Ethoel Guarda i messaggi
Codice:
void quad(float x, float z){
     glBindTexture(GL_TEXTURE_2D, texture[0]);
     glEnable(GL_TEXTURE_2D);
     glBegin(GL_QUADS);
         glTexCoord2f(0.0f,1.0f); glVertex3f(-2.0f+x, 0.0f, 2.0f+z); // Sopra a sinistra
         glTexCoord2f(1.0f,1.0f); glVertex3f( 2.0f+x, 0.0f, 2.0f+z); // Sopra a destra
         glTexCoord2f(1.0f,0.0f); glVertex3f( 2.0f+x, 0.0f, -2.0f+z); // Sotto a destra
         glTexCoord2f(0.0f,0.0f); glVertex3f(-2.0f+x, 0.0f, -2.0f+z); //sotto a sinistra

     glEnd();
     glDisable(texture[0]);
     }
non puoi disegnare un quad specificando i vertici "a croce", devi specificarli in senso antiorario (se non abiliti il face culling anche in senso orario). o meglio ancora dovresti disegnare un triangle strip fatto da due triangoli, perché in OpenGL 3.0 sono stati deprecati anche i quadrilateri e i poligoni generici

non ti animare, ci sono stati ottimi motivi per deprecarli: la specifica di OpenGL non ha mai richiesto che i poligoni complessi (concavi, forati, non planari, ecc.) vengano disegnati correttamente (tra l'altro, prego, definire "correttamente" nel caso dei poligoni non planari ) e mai lo richiederá perché non é ragionevole; nella stragrande maggioranza dei casi é preferibile tassellare i poligoni complessi, eventualmente col tassellatore GLU, e renderizzare solo triangoli.

EDIT - ok, scusate: ho letto meglio l'ordine nei commenti evidenziati e quindi quest'ultimo post non vale
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2009, 07:19   #5
Ethoel
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 28
A questo punto avete una buona guida sulle OpenGL 3.2 da consigliare?
Ethoel è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2009, 15:05   #6
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da Ethoel Guarda i messaggi
A questo punto avete una buona guida sulle OpenGL 3.2 da consigliare?
consulta questo materiale: http://www.opengl.org/wiki/Main_Page

ma quello che é consigliabile fare non é programmare in OpenGL 3.2 perché ancora non é del tutto disponibile agli sviluppatori (le specifiche ci sono ma sul sito ufficiale il reference risulta ancora "under construction"), bensi programmare in "forward-compatible OpenGL 2.1", cioé usare solo gli entry points documentati nel reference della versione 2.1 che peró non sono deprecati da OpenGL 3.2. dal momento che il reference della versione 3.2 ancora non c'é, l'unica maniera per sapere quali entry points sono deprecati e quali no (oltre a conoscere le tecniche da usare nell'OpenGL attuale) é consultare le specifiche ufficiali
se una funzione riesci a trovarla nel PDF che descrive il core profile usala senza pensarci due volte, altrimenti cerca un'alternativa migliore. o almeno, io faccio cosi

PS: se tu programmassi in Java ci sarebbe JOGL che é molto comodo da questo punto di vista: l'oggetto GL che definisce tutti gli entry points, sia del core profile sia del compatibility profile, implementa diverse interfacce quali GL2, GL3, GL2GL3, ... ciascuna di queste interfacce contiene solo un certo sottoinsieme degli entry points, per esempio GL2GL3 contiene tutti gli entry points del forward-compatible OpenGL 2.1.
tanto per la cronaca

dimenticavo, questo é il reference della versione 2.1: http://www.opengl.org/sdk/docs/man/
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2009, 18:39   #7
Ethoel
Junior Member
 
Iscritto dal: Apr 2008
Messaggi: 28
Grazie mille per il materiale e il reference, per il Java purtroppo sono molto....mmm.... come dire... contro, non mi piace programmare in Java, preferisco C/C++/C#, quindi sono per C++&OpenGL
Ethoel è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Android Auto, il nuovo lettore porta in ...
I nuovi MacBook con display OLED potrebb...
Windows 11: l'aggiornamento KB5124010 fa...
iPhone Duo, la pellicola protettiva del ...
Memorie più costose, NVIDIA aumen...
TSMC potrebbe affiancare Intel nel proge...
Windows 11, un solo simbolo può risparmi...
Niente cloud, niente abbonamenti, niente...
Prime o meno, Amazon è piena di o...
Kindle in offerta: e-reader base a 89€ e...
Hackerato l'account ufficiale Microsoft ...
Tutti i dispositivi Ring: videocamere 2K...
Memorie HBM, la domanda si concentra su ...
Dash cam 70mai 4K da 74,99€: A800 Nano, ...
Nuovi rincari da Fastweb: l'operatore ha...
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: 22:46.


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