begin process at 2010 02 10 00:49:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > DÉBUT DE MOTEUR 3D

DÉBUT DE MOTEUR 3D


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Classé sous :moteur, 3d, directx, opengl, textures Niveau :Expert Date de création :26/08/2005 Date de mise à jour :19/12/2005 16:48:59 Vu / téléchargé :9 715 / 954

Auteur : CyberP

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

 Description

Cliquez pour voir la capture en taille normale
Bon ben... voilà un moteur 3D (encore un)
Il s'appelle Chakra Engine en théorie (parce qu'il devait servir à un jeu qui s'appelle Chakra Meltdown, merci de ne pas rire du nom ridicule)
Il supporte DirectX/OpenGL et éventuellement un mode software (qui ne marche pas)
Sous DirectX les textures ne fonctionnent pas (je ne sais pas non plus pourquoi) car mal envoyées à la carte graphique je pense

Quand vous choisissez le mode : la différence entre OpenGL et OpenGLVBO est que le deuxième fonctionne plus comme DirectX avec l'envoi des buffers vers la carte graphique et tout, donc si OpenGLVBO marche pas, mettez OpenGL


Le zip ne contient que le moteur et le code que je mets ici permet de tester mais vous pouvez écrire le votre très simplement, il faut juste inclure le .lib (dans le projet) et chakraengine.h (dans chaque fichier) qui sont dans le répertoire "Fichiers" du zip

Le programme de test (cf la capture d'écran pour le résultat) tourne environ à 50 fps sur mon Athlon XP 2600+ Radeon 9200

J'ai mis en commentaire dans le code les lignes utilisant textures, models, etc que je ne fournis pas avec (taille trop volumineuse)

Source

  • /* Voici le code d'un programme de test du moteur */
  • #include <windows.h>
  • #include "..\moteur\include\chakraengine.h"
  • #ifdef _DEBUG
  • #pragma comment(lib, "..\\moteur\\debug\\lib\\ChakraEngine.lib")
  • #else
  • #pragma comment(lib, "..\\moteur\\lib\\ChakraEngine.lib")
  • #endif
  • ce::ChakraEngineDevice* device;
  • ce::Scene* scene;
  • ce::objects::Camera* camera;
  • ce::objects::Light* light;
  • ce::objects::Object* object;
  • ce::objects::Object* object2;
  • LRESULT CALLBACK wnproc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  • static PAINTSTRUCT ps;
  • POINT* pt = new POINT;
  • GetCursorPos(pt);
  • switch(uMsg) {
  • case WM_CLOSE:
  • PostQuitMessage(0);
  • return 0;
  • case WM_KEYDOWN:
  • switch(wParam) {
  • case VK_DOWN:
  • camera->advanceInCameraDirection(-2);
  • break;
  • case VK_UP:
  • camera->advanceInCameraDirection(2);
  • break;
  • }
  • return 0;
  • case WM_LBUTTONUP:
  • break;
  • case WM_PAINT:
  • device->render(scene);
  • BeginPaint(hWnd, &ps);
  • EndPaint(hWnd, &ps);
  • return 0;
  • }
  • delete pt;
  • return DefWindowProc(hWnd, uMsg, wParam, lParam);
  • }
  • int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
  • try {
  • device = ce::createDevice(ce::CE_OPENGLVBO, wnproc, 800, 600, 32, false);
  • device->setViewDistance(1024);
  • scene = ce::createScene();
  • camera = ce::objects::createCamera();
  • camera->setPosition(ce::unites::vector3df(20, 45, 15));
  • camera->setTarget(ce::unites::vector3df(59, 120, 34));
  • light = ce::objects::createLight(ce::objects::CE_LIGHT_DIRECTIONAL);
  • light->setDirection(ce::unites::vector3df(0.0f, -0.8f, 0.0f));
  • light->setColor(ce::unites::Color(255, 235, 235, 255));
  • //object = ce::objects::createObjectFromMesh(ce::objects::createTerrainMesh(ce::resources::createTextureFromJPEG("worldl.jpg"), 256, 256, 64));
  • object = ce::objects::createCubeMesh(2); // cette ligne sert à ce que vous pouvez compilez
  • object->setScale(ce::unites::vector3df(2.0f, 1.0f, 2.0f));
  • //object->setTexture(ce::resources::createTextureFromJPEG("worldt.jpg"));
  • object->getMaterial()->setAmbient(ce::unites::Color(128, 128, 128, 255));
  • object->getMaterial()->setDiffuse(ce::unites::Color(255, 255, 255, 255));
  • object->getMaterial()->setSpecular(ce::unites::Color(255, 255, 255, 255));
  • object->setPosition(ce::unites::vector3df(0, 0, 0));
  • //object2 = ce::objects::createObjectFromMesh(ce::objects::createMeshFromMD2("dino.md2"));
  • object2 = ce::objects::createCubeMesh(5); // cette ligne sert à ce que vous pouvez compilez
  • //object2->setTexture(ce::resources::createTextureFromJPEG("dino.jpg"));
  • object2->getMaterial()->setAmbient(ce::unites::Color(128, 128, 128, 128));
  • object2->getMaterial()->setDiffuse(ce::unites::Color(255, 255, 255, 255));
  • object2->getMaterial()->setSpecular(ce::unites::Color(255, 255, 255, 255));
  • object2->setRotation(ce::unites::vector3df(270, 0, 0));
  • object2->setPosition(ce::unites::vector3df(0, 50, 0));
  • scene->setCurrentCamera(camera);
  • scene->addObject(object);
  • scene->addObject(object2);
  • scene->addLight(light);
  • scene->setAmbientLight(ce::unites::Color(255, 255, 255, 255));
  • int dinoframe = 0;
  • while(true) {
  • MSG msg;
  • if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
  • if (msg.message == WM_QUIT) {
  • break;
  • } else {
  • TranslateMessage(&msg);
  • DispatchMessage(&msg);
  • }
  • } else {
  • SetWindowText(device->getWindow(), String(String("Chakra Engine - Demonstration - WIP: ") + String(__DATE__) + " (" + String(__TIME__) + ") - Using " + device->getName() + " - FPS: " + String(device->getFPS())).c_str());
  • RECT rc;
  • GetWindowRect(device->getWindow(), &rc);
  • camera->adaptAsFPSCamera((rc.right - rc.left) / 2, (rc.bottom - rc.top) / 2);
  • /*object2->getMesh()->loadFrame(dinoframe);
  • if (++dinoframe >= object2->getMesh()->getFramesCount())
  • dinoframe = 0;*/
  • device->beginRendering();
  • device->render(scene);
  • device->endRendering();
  • }
  • }
  • } catch(ce::system::Error* err) {
  • MessageBox(NULL, err->what(), "Error", NULL);
  • }
  • }
/* Voici le code d'un programme de test du moteur */

#include <windows.h>
#include "..\moteur\include\chakraengine.h"

#ifdef _DEBUG
#pragma comment(lib, "..\\moteur\\debug\\lib\\ChakraEngine.lib")
#else
#pragma comment(lib, "..\\moteur\\lib\\ChakraEngine.lib")
#endif

ce::ChakraEngineDevice* device;
ce::Scene* scene;
ce::objects::Camera* camera;
ce::objects::Light* light;
ce::objects::Object* object;
ce::objects::Object* object2;

LRESULT CALLBACK wnproc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	static PAINTSTRUCT ps;
	POINT* pt = new POINT;
	GetCursorPos(pt);

	switch(uMsg) {
		case WM_CLOSE:
			PostQuitMessage(0);
			return 0;

		case WM_KEYDOWN:
			switch(wParam) {
				case VK_DOWN:
					camera->advanceInCameraDirection(-2);
					break;
				case VK_UP:
					camera->advanceInCameraDirection(2);
					break;
			}
			return 0;

		case WM_LBUTTONUP:
			break;

		case WM_PAINT:
			device->render(scene);
			BeginPaint(hWnd, &ps);
			EndPaint(hWnd, &ps);
			return 0;
	}

	delete pt;

	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	try {
		device = ce::createDevice(ce::CE_OPENGLVBO, wnproc, 800, 600, 32, false);
		device->setViewDistance(1024);

		scene = ce::createScene();

		camera = ce::objects::createCamera();
		camera->setPosition(ce::unites::vector3df(20, 45, 15));
		camera->setTarget(ce::unites::vector3df(59, 120, 34));

		light = ce::objects::createLight(ce::objects::CE_LIGHT_DIRECTIONAL);
		light->setDirection(ce::unites::vector3df(0.0f, -0.8f, 0.0f));
		light->setColor(ce::unites::Color(255, 235, 235, 255));

		//object = ce::objects::createObjectFromMesh(ce::objects::createTerrainMesh(ce::resources::createTextureFromJPEG("worldl.jpg"), 256, 256, 64));
		object = ce::objects::createCubeMesh(2); // cette ligne sert à ce que vous pouvez compilez
		object->setScale(ce::unites::vector3df(2.0f, 1.0f, 2.0f));
		//object->setTexture(ce::resources::createTextureFromJPEG("worldt.jpg"));
		object->getMaterial()->setAmbient(ce::unites::Color(128, 128, 128, 255));
		object->getMaterial()->setDiffuse(ce::unites::Color(255, 255, 255, 255));
		object->getMaterial()->setSpecular(ce::unites::Color(255, 255, 255, 255));
		object->setPosition(ce::unites::vector3df(0, 0, 0));

		//object2 = ce::objects::createObjectFromMesh(ce::objects::createMeshFromMD2("dino.md2"));
		object2 = ce::objects::createCubeMesh(5); // cette ligne sert à ce que vous pouvez compilez
		//object2->setTexture(ce::resources::createTextureFromJPEG("dino.jpg"));
		object2->getMaterial()->setAmbient(ce::unites::Color(128, 128, 128, 128));
		object2->getMaterial()->setDiffuse(ce::unites::Color(255, 255, 255, 255));
		object2->getMaterial()->setSpecular(ce::unites::Color(255, 255, 255, 255));
		object2->setRotation(ce::unites::vector3df(270, 0, 0));
		object2->setPosition(ce::unites::vector3df(0, 50, 0));

		scene->setCurrentCamera(camera);

		scene->addObject(object);
		scene->addObject(object2);

		scene->addLight(light);
		scene->setAmbientLight(ce::unites::Color(255, 255, 255, 255));

		int dinoframe = 0;

		while(true) {
			MSG msg;
			if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
				if (msg.message == WM_QUIT) {
					break;
				} else {
					TranslateMessage(&msg);
					DispatchMessage(&msg);
				}
			} else {
				SetWindowText(device->getWindow(), String(String("Chakra Engine - Demonstration - WIP: ") + String(__DATE__) + " (" + String(__TIME__) + ") - Using " + device->getName() + " - FPS: " + String(device->getFPS())).c_str());

				RECT rc;
				GetWindowRect(device->getWindow(), &rc);
				camera->adaptAsFPSCamera((rc.right - rc.left) / 2, (rc.bottom - rc.top) / 2);

				/*object2->getMesh()->loadFrame(dinoframe);
				if (++dinoframe >= object2->getMesh()->getFramesCount())
					dinoframe = 0;*/

				device->beginRendering();
				device->render(scene);
				device->endRendering();
			}
		}
	} catch(ce::system::Error* err) {
		MessageBox(NULL, err->what(), "Error", NULL);
	}
}

 Conclusion

Encore beaucoup de bugs et beaucoup de passages où c'est mal foutu (presque aucun const, plein de int à la place de unsigned int, etc.)

Il y a plein de commandes qui sont là mais qui ne marchent pas (skybox, dessiner une image 2D, etc.) parce que j'avais modifié pleins de trucs et que je n'ai pas encore remis

Notez que la rentrée est dans une semaine et que je n'aurai plus le temps de travailler dessus après (je suis en terminale avec 5 * 8 heures par semaine, ok on a des perms sauf que je suis pas chez moi pendant les perms ^^ )

 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


 Historique

26 août 2005 19:35:24 :
Petit bug corrigé sur les String
19 décembre 2005 16:48:59 :
Ajout des mots clés

 Sources du même auteur

Source avec Zip Source avec une capture PROGRAMME DE CHAT À PLUSIEURS ASSEZ COMPLÊT [VC++ 6]
VÉRIFIER SI L'ON A DES MAILS

 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

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture XTENGINE - MOTEUR 3D BASÉ SUR OPENGL, GLEW ET LA SDL par XT95
Source avec Zip MOTEUR A PARTICULES par leo666
Source avec Zip Source avec une capture MOTEUR 3D AVEC OPENGL par crazy lapinou
Source avec Zip Source avec une capture JEUX DIRECTX9 COMPLET (JEU D'AVIONS MINIATURES) par supergrey
Source avec Zip Source avec une capture DEBUT DE MOTEUR D'AFFICHAGE OPENGL AVEC RENDU DE SKYBOX par Maegis

Commentaires et avis

Commentaire de DeAtHCrAsH le 26/08/2005 22:55:27

C'est marrant tout le monde fait des débuts de moteur 3D, et après plus de nouvelles.
A quand la fin d'un moteur 3D alors?

^_^

Commentaire de CyberP le 27/08/2005 07:56:13

Ben celui-ci marche déjà sauf qu'il ne charge que les .md2, .jpg, .bmp, .tga et qu'il reste pleins de bugs et de fonctionnalitées manquantes (bump mapping, plusieurs viewports, etc.)

J'ai oublié de préciser que j'ai désactivé DirectX ; pour l'activer il suffit d'enlever le "#define _NO_DIRECTX" dans chakraengine.h et de recompiler
Parce que si DirectX est activé il demande des .dll que la moitié des gens n'ont pas (c'est une connerie de microsoft parce que les mises à jours de DirectX 9.0c qui sortent tous les mois ne demandent pas les mêmes dll que la version originale, même si c'est toujours 9.0c)

Commentaire de theidiot le 27/08/2005 23:12:31

Deathcrash>> dupuis quand un moteur 3d a t-il une finalitée?

En réalité un moteur 3d ne ce fini jamais... il y a toujours une continuité de developpement.

La question devrait-etre à quand un moteur 3d stable et fonctionnel?

^_^

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Moteur 3d OpenGL [ par Stormy ] Salut. Je recherche des personnes motives pour travailler sur un moteur 3d sous OpenGL. Les bases sont deja etablies (Detection de collisions, sons, m ca existe un moteur 3d directx en C et pas C++? [ par yerick ] j'ai beau cherché je ne trouve pas.meme pas une petite librairie.ya pas quelqu'un qui pourrait pondre un petit moteur 3d (meme tres simple) qui utilis OpenGL et moteur3D [ par adess00 ] Salut, Je voudrais savoir ce qu est la difference entre un moteur 3D et openGL Je pensai qu un moteur 3D etait un ensemble de fonction qui permet de zoom avec moteur 3D [ par poiuytrez3 ] Bonjour, je suis en train de faire un moteur 3D de A à Z. J'ai donc gérer grâce aux matrices le déplacement et la rotation autour d'un axe. Mais je n Modelisation facile 3D avec OpenGL [ par nico4nicolas ] Bonjour, J'ai pour projet de modeliser un visage en trois dimensions a partir de photographies, mon probleme est que je suis un veritable novice en ce moteur graphique [ par vladisback ] bonjour je pense depuis quelque temps a essayer de réaliser un moteur graphique (bien que ce ne soit peut etre pas le bon terme) comme opengl et direc Glut et Open GL [ par Fireflect ] Bonsoir ou bonjours ;) Vous allez rire mais je suis encore un *** de plus qui va croire qu'il est cappable de faire un moteur 3D de qualit&#233; enfi transparences en openGL [ par vangeurmasker ] J'ai un probleme dans un projet en OpenGL. J'utilise le canal alpha de mes textures pour g&#233;r&#233;r les transparences. Mais le probleme est qu'au Création d'un moteur 3D en partant de rien [ par poiuytrez3 ] Bonjour, je souhaiterai cr&#233;er un petit moteur 3D le plus simple possible en partant de rien. Quelqu'un en a t il d&#233;j&#224; fait un? Je ne so Directx fichier 3d animé [ par niketou ] Bonjour a tous.Je bosse sur directx9 la ,je viens de comprendre les vertex,textures,lumieres .La j'en suis a objet 3d,j'ai pris l'exemple tigre de dir


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,624 sec (4)

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