begin process at 2010 02 10 14:06:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > GLOBE TERRESTRE

GLOBE TERRESTRE


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Niveau :Débutant Date de création :10/06/2003 Date de mise à jour :11/06/2003 14:28:13 Vu / téléchargé :4 782 / 330

Auteur : Berdo

Ecrire un message privé
Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
C'est une utilisation d'OpenGL avec texture(BMP carte du monde), transparance et isolation d'une matrice autour d'un objet

Source

  • #include <windows.h>
  • #include <math.h>
  • #include <gl/gl.h>
  • #include <gl/glu.h>
  • #include <gl\glaux.h>
  • WNDCLASS wc;
  • MSG msg;
  • HWND hWnd;
  • HDC DC;
  • HGLRC RC;
  • double a;
  • double b;
  • int x,z=-10,filt,tex=1,zbuff=1,pom=1;
  • unsigned texture[2];
  • GLUquadricObj *Quadric1 = gluNewQuadric();
  • void RePaint ()
  • {
  • glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  • glMatrixMode (GL_MODELVIEW);
  • glLoadIdentity ();
  • if (zbuff) glEnable (GL_DEPTH_TEST);
  • else glDisable (GL_DEPTH_TEST);
  • if (tex) glEnable(GL_TEXTURE_2D);
  • else glDisable (GL_TEXTURE_2D);
  • glBindTexture(GL_TEXTURE_2D, texture[filt]);
  • a+=pom;
  • gluQuadricTexture(Quadric1, true);
  • //glRotated(d,0,1,0);
  • gluLookAt(0,0,z,0,0,z+1,0,1,0);
  • glEnable (GL_DEPTH_TEST);
  • glRotated(b,1,0,0);
  • glRotated(a,0,1,0);
  • glPushMatrix();
  • glRotated(-90,1,0,0);
  • glDisable (GL_BLEND);
  • glColor3f(1,1,1);
  • gluQuadricDrawStyle(Quadric1, GLU_FILL);
  • gluSphere(Quadric1, 3, 7200, 3600);
  • glEnable (GL_BLEND);
  • glColor4f(1,1,1,0.125);
  • glBindTexture(GL_TEXTURE_2D, texture[1]);
  • gluQuadricDrawStyle(Quadric1, GLU_LINE);
  • gluSphere(Quadric1, 3.1, 36, 18);
  • glPopMatrix();
  • SwapBuffers (DC);
  • }
  • void LoadTexture()
  • {
  • AUX_RGBImageRec *texture1;
  • texture1 = auxDIBImageLoad("machin.bmp");
  • glGenTextures (1, &texture[0]);
  • glBindTexture (GL_TEXTURE_2D, texture[0]);
  • glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  • glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
  • glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data);
  • };
  • void InitPixelFormat (HDC hDC)
  • {
  • PIXELFORMATDESCRIPTOR pfd =
  • {
  • sizeof (PIXELFORMATDESCRIPTOR),
  • 1,
  • PFD_SUPPORT_OPENGL | PFD_TYPE_RGBA | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER,
  • 16,
  • 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  • 16,
  • 0, 0, 0, 0, 0, 0, 0
  • };
  • SetPixelFormat (hDC, ChoosePixelFormat (hDC, &pfd), &pfd);
  • }
  • LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  • {
  • switch (uMsg)
  • {
  • case WM_CREATE:
  • ShowCursor(false);
  • DC=GetDC (hwnd);
  • InitPixelFormat (DC);
  • RC = wglCreateContext (DC);
  • wglMakeCurrent (DC, RC);
  • glEnable (GL_DEPTH_TEST);
  • glClearColor (0,0,0,0);
  • LoadTexture();
  • glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  • break;
  • case WM_KEYDOWN:
  • switch (wParam) {
  • case VK_ESCAPE:
  • PostQuitMessage(0);
  • case VK_DOWN:
  • z--;
  • break;
  • case VK_UP:
  • z++;
  • break;
  • case VK_SPACE:
  • if (pom) pom=0;
  • else pom=1;
  • break;
  • case VK_RIGHT:
  • b++;
  • break;
  • case VK_LEFT:
  • b--;
  • break;
  • default:
  • break;
  • return 0;
  • }
  • return 0;
  • case WM_CLOSE:
  • gluDeleteQuadric(Quadric1);
  • ShowCursor(true);
  • wglMakeCurrent (NULL, NULL);
  • wglDeleteContext (RC);
  • ReleaseDC (hwnd,DC);
  • PostQuitMessage (0);
  • break;
  • case WM_SIZE:
  • glViewport (0,0,LOWORD (lParam),HIWORD (lParam));
  • glMatrixMode (GL_PROJECTION);
  • glLoadIdentity ();
  • gluPerspective (45,(float)(LOWORD(lParam))/(float)(HIWORD(lParam)),1,1000);
  • break;
  • case WM_PAINT:
  • RePaint ();
  • break;
  • default:
  • return DefWindowProc (hwnd,uMsg,wParam,lParam);
  • break;
  • }
  • return 0;
  • }
  • int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow)
  • {
  • wc.style = CS_OWNDC;
  • wc.lpfnWndProc = WindowProc;
  • wc.cbClsExtra = 0;
  • wc.cbWndExtra = 0;
  • wc.hInstance = hInstance;
  • wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  • wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  • wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
  • wc.lpszMenuName = NULL;
  • wc.lpszClassName = "OGL";
  • RegisterClass(&wc);
  • hWnd = CreateWindowEx
  • (WS_EX_TOPMOST, "OGL", "Fenetre OpenGL",
  • WS_POPUP | WS_VISIBLE,
  • 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, NULL, hInstance, NULL
  • );
  • while (GetMessage(&msg, NULL, 0, 0)) {
  • TranslateMessage(&msg);
  • DispatchMessage(&msg);
  • }
  • return 0;
  • }
#include <windows.h>
#include <math.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl\glaux.h>

WNDCLASS wc;
MSG msg;
HWND hWnd;
HDC	DC;
HGLRC RC;
double a;
double b;

int x,z=-10,filt,tex=1,zbuff=1,pom=1;
unsigned texture[2];
GLUquadricObj *Quadric1 = gluNewQuadric();
void RePaint ()
{
	glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glMatrixMode (GL_MODELVIEW);	
	glLoadIdentity ();
	if (zbuff) glEnable (GL_DEPTH_TEST);
		else glDisable (GL_DEPTH_TEST);
	if (tex) glEnable(GL_TEXTURE_2D);
		else glDisable (GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, texture[filt]);
	a+=pom;
	gluQuadricTexture(Quadric1, true);

	//glRotated(d,0,1,0);
	gluLookAt(0,0,z,0,0,z+1,0,1,0);

	glEnable (GL_DEPTH_TEST);
	glRotated(b,1,0,0);
	glRotated(a,0,1,0);
	glPushMatrix();
	glRotated(-90,1,0,0);
	glDisable (GL_BLEND);
	glColor3f(1,1,1);
	gluQuadricDrawStyle(Quadric1, GLU_FILL);
	gluSphere(Quadric1, 3, 7200, 3600); 
	glEnable (GL_BLEND);
	glColor4f(1,1,1,0.125);
	glBindTexture(GL_TEXTURE_2D, texture[1]);
	gluQuadricDrawStyle(Quadric1, GLU_LINE);
	gluSphere(Quadric1, 3.1, 36, 18); 
	glPopMatrix();

SwapBuffers (DC);

}	
	
void LoadTexture() 
{
	AUX_RGBImageRec *texture1;
	texture1 = auxDIBImageLoad("machin.bmp");
	glGenTextures (1, &texture[0]);
	glBindTexture (GL_TEXTURE_2D, texture[0]);
	glTexParameteri (GL_TEXTURE_2D,	GL_TEXTURE_MAG_FILTER,GL_LINEAR);
	glTexParameteri (GL_TEXTURE_2D,	GL_TEXTURE_MIN_FILTER,GL_NEAREST);
	glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 	0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data);
};

void InitPixelFormat (HDC hDC)
{	
      PIXELFORMATDESCRIPTOR pfd =
      {
           sizeof (PIXELFORMATDESCRIPTOR),
           1,
           PFD_SUPPORT_OPENGL | PFD_TYPE_RGBA | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER,
           16,
           0, 0, 0, 0, 0, 0, 0, 0,	0, 0, 0, 0, 0,
           16,
           0, 0, 0, 0, 0, 0, 0
      };
	
      SetPixelFormat (hDC, ChoosePixelFormat (hDC, &pfd), &pfd);
}	
	
LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{	
	switch (uMsg)
	{
	case WM_CREATE:
		ShowCursor(false);
		DC=GetDC (hwnd);
        InitPixelFormat (DC);
        RC = wglCreateContext (DC);
        wglMakeCurrent (DC, RC);
        glEnable (GL_DEPTH_TEST); 
        glClearColor (0,0,0,0); 
		LoadTexture();
		glBlendFunc(GL_SRC_ALPHA, GL_ONE);
		break;
	case WM_KEYDOWN:
		switch (wParam) {
			case VK_ESCAPE:
				PostQuitMessage(0);
			case VK_DOWN:
				z--;
				break;
			case VK_UP:
				z++;
				break;
			case VK_SPACE:
				if (pom) pom=0;
				else pom=1;
				break;
			case VK_RIGHT:
				b++;
				break;
			case VK_LEFT:
				b--;
				break;
			default:
				break;
			return 0;
		}
	
		return 0;
	case WM_CLOSE:
		gluDeleteQuadric(Quadric1);
		ShowCursor(true);
        wglMakeCurrent (NULL, NULL);
        wglDeleteContext (RC);
        ReleaseDC (hwnd,DC);
		PostQuitMessage (0);
		break;
    case WM_SIZE:
    	glViewport (0,0,LOWORD (lParam),HIWORD (lParam));
    	glMatrixMode (GL_PROJECTION);
    	glLoadIdentity ();
    	gluPerspective (45,(float)(LOWORD(lParam))/(float)(HIWORD(lParam)),1,1000);
    	break;
    case WM_PAINT:
    	RePaint ();
    	break;
	default:
		return DefWindowProc (hwnd,uMsg,wParam,lParam);
		break;
	}
	return 0;
}	
	
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow)
{	
	wc.style = CS_OWNDC;
	wc.lpfnWndProc = WindowProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
	wc.lpszMenuName = NULL;
	wc.lpszClassName = "OGL";
	
	RegisterClass(&wc);
	

	hWnd = CreateWindowEx
	(WS_EX_TOPMOST, "OGL", "Fenetre OpenGL", 
	WS_POPUP | WS_VISIBLE,
	0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, NULL, hInstance, NULL
	);
	
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	
	return 0;
}  

 Conclusion

Ce code etait juste un test et il n'est pas prevu de suite cependant, il peut facilement etre reutilise pour quelque chose de plus complexe.
Pour l'utiliser: les fleches (distance et rotation) et la barre d'espace (arret).  

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip JEU DE DAMES 3D par vbclaude
Source avec Zip CHARGEMENT DES TEXTURES EN OPENGL par Jackyzgood
Source avec Zip Source avec une capture OPENGL - UN PEU DE NEIGE... par underprog
Source avec Zip Source avec une capture JEU DE LA VIE 3D OPENGL AVEC GESTION SOURIS par fratleym
Source avec Zip Source avec une capture SPEAD RACER par jngl

Commentaires et avis

Commentaire de Berdo le 10/06/2003 20:54:52

Allez, un petit commentaire...

Commentaire de MoDDiB le 10/06/2003 21:59:01

Une screen une screen !!

Commentaire de morgandetoi06 le 10/06/2003 23:57:08

avec devc++ ça me fait plein d erreurs lors de la compilation. en voici une:
cc4gbaaa.o(.text+0x2f):unseen~1.cpp: undefined reference to `glClear@4'

Commentaire de Berdo le 11/06/2003 10:26:37

"avec devc++ ça me fait plein d erreurs lors de la compilation. en voici une:
cc4gbaaa.o(.text+0x2f):unseen~1.cpp: undefined reference to `glClear@4'"
C'est normal car il faut inclure les librairies 'opengl32.lib' 'glaux.lib' 'glu32.lib'.

Commentaire de morgandetoi06 le 11/06/2003 11:37:17

là je debute en c++ et je ne sait pas encore comment inclure une librairie, mais ta source m'a l'air vraiment interessante donc si tu pourait m expliquer comment faire ça serait sympa.
merci

Commentaire de Berdo le 11/06/2003 11:43:28

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glaux.lib")
Et ca devrait marcher...

Commentaire de morgandetoi06 le 11/06/2003 12:05:41

ça me fait toujours les memes erreurs, mais je pense que c parceque je n ai pas ces librairies, où est ce que je pourrait les telecharger ?

Commentaire de AmK le 11/06/2003 15:51:07

toute la puissance d'openGL au service de ce globe franchement mec c'est super et viveeeee openglllllllll

Commentaire de morgandetoi06 le 11/06/2003 17:37:44

j'ai telechargé le pack opengl95, et j'ai copié les fichiers dans tous les dossiers du repertoire de devc++ pour etre sur qu ils soient dans le bon dossier et ça me fait toujours les memes erreurs:

ccescaaa.o(.text+0x2f):unseen~1.cpp: undefined reference to `glClear@4'
ccescaaa.o(.text+0x3f):unseen~1.cpp: undefined reference to `glMatrixMode@4'
ccescaaa.o(.text+0x47):unseen~1.cpp: undefined reference to `glLoadIdentity@0'
ccescaaa.o(.text+0x5d):unseen~1.cpp: undefined reference to `glEnable@4'
ccescaaa.o(.text+0x6f):unseen~1.cpp: undefined reference to `glDisable@4'
ccescaaa.o(.text+0x88):unseen~1.cpp: undefined reference to `glEnable@4'
ccescaaa.o(.text+0x9a):unseen~1.cpp: undefined reference to `glDisable@4'
ccescaaa.o(.text+0xc1):unseen~1.cpp: undefined reference to `glBindTexture@8'
ccescaaa.o(.text+0xe8):unseen~1.cpp: undefined reference to `gluQuadricTexture@8'

Commentaire de Berdo le 11/06/2003 17:52:42

Desole morgandetoi06 mais je debute moi aussi (ca fait une semaine que je programme en C++ et un jour avec OpenGL).
Je n'ais donc jamais rencontre ce probleme (j'ais configure mon compilateur pour les librairies) et je ne connais absolument pas devc++.
Je ne peux pas aider plus que ca...

Commentaire de morgandetoi06 le 11/06/2003 17:59:27

sinon tu compile avec quel compilateur ??

Commentaire de AmK le 12/06/2003 12:45:39

morgan va sur nehe.gamedev.net et cherche leur pack openGL ya tout dedans....

Commentaire de lolo252 le 13/06/2003 14:15:44

j'ai mis un bmp mais le globe apparait tout blanc. faut-il un bmp special (taille,...)?

Commentaire de Berdo le 13/06/2003 14:23:33

Oui, il faut que l'image soit carré et que le cote soit une puissance de 2.
2, 4, 8... 4096. il me semble que ca ne marche plus pour 8192 mais ce format occupe deja pas mal de memoire.

Commentaire de freax le 14/06/2003 13:59:38

!bravo

Commentaire de Anacr0x le 03/07/2003 01:45:56

Pour Dev-c++, les #pragma comment(lib, "opengl32.lib") et autres ne marches pas, il faut inclure les librairies dans les options du projet

Commentaire de remanv69 le 07/07/2003 21:08:49

moi jai devc++ ca passe comme ds du beurre bo travail jaime bien :)

Commentaire de cppdupdup34 le 06/12/2003 23:21:03

l'image a pas besoin d'etre carre juste de largeur 2^n et de hauteur 2^m
je me sert de ton prog tout les jours pour faire le fond de mes jeux en fait je creer mon espace jouable a l'interieur de la sphere et ca rend pas mal

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales