| |
 |
|
|
|
 |
|
 |
| |
17.01.2009, 09:32
|
#1 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 12.03.2008
Beiträge: 129
|
Objekt in map einbinden
Hallo, erstmal!
Ich hab jetzt c4d und schon ein paar ojekte erstellt.
Wie kann ich jetzt ein programm in c++ schreiben, dass die objekte auf einer map einbindet?
Jetzt ein paar schtichworte:
Schwerkraft?
Steuerung?
Wie können die Objekte Rollen?
Welches Format exportieren?
Danke schon mal im voraus, ich bin schon gespannt!
Ich hab auch von einem Plugin von c4d gehört, mitdem man solche codeschnipsel irgendwie in 3d objekte kriegt.
|
|
|
|
|
17.01.2009, 12:11
|
#2 (permalink)
|
|
Pixelschieber
Registriert seit: 18.04.2008
Ort: Detmold
Beiträge: 343
|
Hallo,
am besten ist es wenn du dir Irrlicht oder eine ähnliche Engine mal genau anguckst. Diese Engine ist speziell zum Rendern von Maps und 3D-Objekten geeignet.
Als Format musst du nur eines nehmen, welches von Irrlicht unterstützt wird. Diese gibt es eigentlich schon bei c4d unter "Speichern unter".
Grüße
Sebastian
|
|
|
|
17.01.2009, 12:26
|
#3 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 12.03.2008
Beiträge: 129
|
Ja, ich hab Irrlicht eh schon.
Aber wie mach ich das jetzt? Ich hab Irrlicht zwar kenn mich aber nicht aus.
Welche Formate unterstützt Irrlicht eigentlich?
|
|
|
|
|
17.01.2009, 12:52
|
#5 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 12.03.2008
Beiträge: 129
|
aha, also ist dev c++ das gescheiteste?
|
|
|
|
|
17.01.2009, 13:04
|
#6 (permalink)
|
|
Pixelschieber
Registriert seit: 18.04.2008
Ort: Detmold
Beiträge: 343
|
Hallo,
das ist eigentlich komplett egal. Ich persönlichlich benutze es immernoch gerne. Manche schwören aber auch auf Code::Blocks. Das ist bei kleineren Projekten einfach nur Ansichtssache
Grüße
Sebastian
|
|
|
|
17.01.2009, 13:06
|
#7 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 12.03.2008
Beiträge: 129
|
Danke!
Ich seh da nochwas:
Code:
scene::ISceneNode * node = smgr->addSphereSceneNode();
if (node)
{
node->setPosition(core::vector3df(0,0,30));
node->setMaterialTexture(0, driver->getTexture("../../media/wall.bmp"));
node->setMaterialFlag(video::EMF_LIGHTING, false);
}
Muss ich da die textur backen, oder wie?
|
|
|
|
|
17.01.2009, 13:47
|
#8 (permalink)
|
|
Pixelschieber
Registriert seit: 18.04.2008
Ort: Detmold
Beiträge: 343
|
Das ist nur eine Textur mit der das Objekt ein bisschen verschönert wird. Ein richtiges Objekt findet man so ein:
cpp Code:
IAnimatedMesh* mesh = smgr->getMesh("../../media/deinedatei.md2"); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
|
|
|
|
17.01.2009, 14:04
|
#9 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 12.03.2008
Beiträge: 129
|
danke, das hab ich auch probiert aber irgendwie geht das nicht, ich hab bei wiki geschaut, was irrlicht unterstützt, ud auch alle möglichen exportiert, manchmal bleibt er stecken, bei COLLADA sagt er, dass es zu goß ist und bei x unknow header object oder so!
Miein Code:
Code:
#ifdef _MSC_VER
// We'll also define this to stop MSVC complaining about sprintf().
#define _CRT_SECURE_NO_WARNINGS
#pragma comment(lib, "Irrlicht.lib")
#endif
#include <irrlicht.h>
#include <iostream>
using namespace irr;
class MyEventReceiver : public IEventReceiver
{
public:
// This is the one method that we have to implement
virtual bool OnEvent(const SEvent& event)
{
// Remember whether each key is down or up
if (event.EventType == irr::EET_KEY_INPUT_EVENT)
KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown;
return false;
}
// This is used to check whether a key is being held down
virtual bool IsKeyDown(EKEY_CODE keyCode) const
{
return KeyIsDown[keyCode];
}
MyEventReceiver()
{
for (u32 i=0; i<KEY_KEY_CODES_COUNT; ++i)
KeyIsDown[i] = false;
}
private:
// We use this array to store the current state of each key
bool KeyIsDown[KEY_KEY_CODES_COUNT];
};
int main()
{
// let user select driver type
video::E_DRIVER_TYPE driverType = video::EDT_DIRECT3D9;
printf("Please select the driver you want for this example:\n"\
" (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
" (d) Software Renderer\n (e) Burning's Software Renderer\n"\
" (f) NullDevice\n (otherKey) exit\n\n");
char i;
std::cin >> i;
switch(i)
{
case 'a': driverType = video::EDT_DIRECT3D9;break;
case 'b': driverType = video::EDT_DIRECT3D8;break;
case 'c': driverType = video::EDT_OPENGL; break;
case 'd': driverType = video::EDT_SOFTWARE; break;
case 'e': driverType = video::EDT_BURNINGSVIDEO;break;
case 'f': driverType = video::EDT_NULL; break;
default: return 0;
}
// create device
MyEventReceiver receiver;
IrrlichtDevice* device = createDevice(driverType,
core::dimension2d<s32>(640, 480), 16, false, false, false, &receiver);
if (device == 0)
return 1; // could not create selected driver.
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
scene::ISceneNode * node = smgr->addSphereSceneNode();
if (node)
{
node->setPosition(core::vector3df(0,0,30));
node->setMaterialTexture(0, driver->getTexture("wall.bmp"));
node->setMaterialFlag(video::EMF_LIGHTING, false);
}
scene::ISceneNode* n = smgr->addCubeSceneNode();
if (n)
{
n->setMaterialTexture(0, driver->getTexture("t351sml.jpg"));
n->setMaterialFlag(video::EMF_LIGHTING, false);
scene::ISceneNodeAnimator* anim =
smgr->createFlyCircleAnimator(core::vector3df(0,0,30), 20.0f);
if (anim)
{
n->addAnimator(anim);
anim->drop();
}
}
scene::IAnimatedMesh* mesh = smgr->getMesh("Noppe4_objekt.obj");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
if (anms)
{
scene::ISceneNodeAnimator* anim =
smgr->createFlyStraightAnimator(core::vector3df(100,0,60),
core::vector3df(-100,0,60), 3500, true);
if (anim)
{
anms->addAnimator(anim);
anim->drop();
}
anms->setMaterialFlag(video::EMF_LIGHTING, false);
anms->setFrameLoop(0, 14);
anms->setAnimationSpeed(15);
// anms->setMD2Animation(scene::EMAT_RUN);
anms->setScale(core::vector3df(2.f,2.f,2.f));
anms->setRotation(core::vector3df(0,-90,0));
// anms->setMaterialTexture(0, driver->getTexture("../../media/sydney.bmp"));
}
smgr->addCameraSceneNodeFPS(0, 100.0f, .1f);
device->getCursorControl()->setVisible(false);
device->getGUIEnvironment()->addImage(
driver->getTexture("irrlichtlogoalpha2.tga"),
core::position2d<s32>(10,20));
gui::IGUIStaticText* diagnostics = device->getGUIEnvironment()->addStaticText(
L"", core::rect<s32>(10, 10, 400, 20));
diagnostics->setOverrideColor(video::SColor(255, 255, 255, 0));
int lastFPS = -1;
// In order to do framerate independent movement, we have to know
// how long it was since the last frame
u32 then = device->getTimer()->getTime();
// This is the movemen speed in units per second.
const f32 MOVEMENT_SPEED = 5.f;
while(device->run())
{
// Work out a frame delta time.
const u32 now = device->getTimer()->getTime();
const f32 frameDeltaTime = (f32)(now - then) / 1000.f; // Time in seconds
then = now;
core::vector3df nodePosition = node->getPosition();
if(receiver.IsKeyDown(irr::KEY_KEY_W))
nodePosition.Y += MOVEMENT_SPEED * frameDeltaTime;
else if(receiver.IsKeyDown(irr::KEY_KEY_S))
nodePosition.Y -= MOVEMENT_SPEED * frameDeltaTime;
if(receiver.IsKeyDown(irr::KEY_KEY_A))
nodePosition.X -= MOVEMENT_SPEED * frameDeltaTime;
else if(receiver.IsKeyDown(irr::KEY_KEY_D))
nodePosition.X += MOVEMENT_SPEED * frameDeltaTime;
node->setPosition(nodePosition);
driver->beginScene(true, true, video::SColor(255,113,113,133));
smgr->drawAll(); // draw the 3d scene
device->getGUIEnvironment()->drawAll(); // draw the gui environment (the logo)
driver->endScene();
int fps = driver->getFPS();
if (lastFPS != fps)
{
core::stringw tmp(L"Movement Example - Irrlicht Engine [");
tmp += driver->getName();
tmp += L"] fps: ";
tmp += fps;
device->setWindowCaption(tmp.c_str());
lastFPS = fps;
}
}
device->drop();
return 0;
}
|
|
|
|
|
17.01.2009, 14:14
|
#10 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 12.03.2008
Beiträge: 129
|
Das wird ausgegeben:
K:\pagma\main.cpp In function `int main()':
98 K:\pagma\main.cpp `IAnimatedMeshSceneNode' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
100 K:\pagma\main.cpp `anms' undeclared (first use this function)
K:\pagma\Makefile.win [Build Error] [main.o] Error 1
|
|
|
|
|
| Themen-Optionen |
|
|
| Ansicht |
Linear-Darstellung
|
Forumregeln
|
|
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:23 Uhr.
| |
| |