Accueil > > > DÉBUT DE MOTEUR 3D
DÉBUT DE MOTEUR 3D
Information sur la source
Description
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
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
Sources de la même categorie
Commentaires et avis
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é 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éré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éer un petit moteur 3D le plus simple possible en partant de rien. Quelqu'un en a t il déjà 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
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|