123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601 |
- #include <Bild.h>
- #include <Bildschirm.h>
- #include <Cube.h>
- #include <DateiSystem.h>
- #include <DXBuffer.h>
- #include <Fenster.h>
- #include <GraphicsApi.h>
- #include <Kam3D.h>
- #include <M3Datei.h>
- #include <main.h>
- #include <Mat4.h>
- #include <Model3D.h>
- #include <Model3DList.h>
- #include <ObjFile.h>
- #include <Rahmen.h>
- #include <RenderThread.h>
- #include <TextFeld.h>
- #include <Textur.h>
- #include <Vec3.h>
- #include <Welt3D.h>
- #define ambient 0.4f
- #define diffus 0.3f
- #define specular 0.3f
- using namespace Framework;
- void makeQuader(Vertex3D* vertecies,
- int startIndex,
- Vec3<float> lft,
- Vec3<float> rft,
- Vec3<float> lfb,
- Vec3<float> rfb,
- Vec3<float> lbt,
- Vec3<float> rbt,
- Vec3<float> lbb,
- Vec3<float> rbb,
- Model3DData* zModel)
- {
- // front
- vertecies[startIndex].pos = lft;
- vertecies[startIndex].tPos = Vec2<float>(0.f, 0.f);
- vertecies[startIndex + 1].pos = rft;
- vertecies[startIndex + 1].tPos = Vec2<float>(1.f, 0.f);
- vertecies[startIndex + 2].pos = lfb;
- vertecies[startIndex + 2].tPos = Vec2<float>(0.f, 1.f);
- vertecies[startIndex + 3].pos = rfb;
- vertecies[startIndex + 3].tPos = Vec2<float>(1.f, 1.f);
- // back
- vertecies[startIndex + 4].pos = rbt;
- vertecies[startIndex + 4].tPos = Vec2<float>(0.0f, 0.0f);
- vertecies[startIndex + 5].pos = lbt;
- vertecies[startIndex + 5].tPos = Vec2<float>(1.0f, 0.0f);
- vertecies[startIndex + 6].pos = rbb;
- vertecies[startIndex + 6].tPos = Vec2<float>(0.0f, 1.0f);
- vertecies[startIndex + 7].pos = lbb;
- vertecies[startIndex + 7].tPos = Vec2<float>(1.0f, 1.0f);
- // left
- vertecies[startIndex + 8].pos = lbt;
- vertecies[startIndex + 8].tPos = Vec2<float>(1.f, 0.f);
- vertecies[startIndex + 9].pos = lft;
- vertecies[startIndex + 9].tPos = Vec2<float>(0.f, 0.f);
- vertecies[startIndex + 10].pos = lbb;
- vertecies[startIndex + 10].tPos = Vec2<float>(1.f, 1.f);
- vertecies[startIndex + 11].pos = lfb;
- vertecies[startIndex + 11].tPos = Vec2<float>(0.f, 1.f);
- // right
- vertecies[startIndex + 12].pos = rft;
- vertecies[startIndex + 12].tPos = Vec2<float>(0.0f, 0.0f);
- vertecies[startIndex + 13].pos = rbt;
- vertecies[startIndex + 13].tPos = Vec2<float>(1.0f, 0.0f);
- vertecies[startIndex + 14].pos = rfb;
- vertecies[startIndex + 14].tPos = Vec2<float>(0.0f, 1.0f);
- vertecies[startIndex + 15].pos = rbb;
- vertecies[startIndex + 15].tPos = Vec2<float>(1.0f, 1.0f);
- // top
- vertecies[startIndex + 16].pos = lbt;
- vertecies[startIndex + 16].tPos = Vec2<float>(0.f, 0.f);
- vertecies[startIndex + 17].pos = rbt;
- vertecies[startIndex + 17].tPos = Vec2<float>(1.f, 0.f);
- vertecies[startIndex + 18].pos = lft;
- vertecies[startIndex + 18].tPos = Vec2<float>(0.f, 1.f);
- vertecies[startIndex + 19].pos = rft;
- vertecies[startIndex + 19].tPos = Vec2<float>(1.f, 1.f);
- // botom
- vertecies[startIndex + 20].pos = lfb;
- vertecies[startIndex + 20].tPos = Vec2<float>(0.0f, 0.0f);
- vertecies[startIndex + 21].pos = rfb;
- vertecies[startIndex + 21].tPos = Vec2<float>(1.0f, 0.0f);
- vertecies[startIndex + 22].pos = lbb;
- vertecies[startIndex + 22].tPos = Vec2<float>(0.0f, 1.0f);
- vertecies[startIndex + 23].pos = rbb;
- vertecies[startIndex + 23].tPos = Vec2<float>(1.0f, 1.0f);
- // front side
- Polygon3D* p = new Polygon3D();
- p->indexAnz = 6;
- p->indexList = new int[p->indexAnz];
- p->indexList[0] = startIndex + 0;
- p->indexList[1] = startIndex + 1;
- p->indexList[2] = startIndex + 2;
- p->indexList[3] = startIndex + 1;
- p->indexList[4] = startIndex + 3;
- p->indexList[5] = startIndex + 2;
- zModel->addPolygon(p);
- // left side
- p = new Polygon3D();
- p->indexAnz = 6;
- p->indexList = new int[p->indexAnz];
- p->indexList[0] = startIndex + 0 + 8;
- p->indexList[1] = startIndex + 1 + 8;
- p->indexList[2] = startIndex + 2 + 8;
- p->indexList[3] = startIndex + 1 + 8;
- p->indexList[4] = startIndex + 3 + 8;
- p->indexList[5] = startIndex + 2 + 8;
- zModel->addPolygon(p);
- // back side
- p = new Polygon3D();
- p->indexAnz = 6;
- p->indexList = new int[p->indexAnz];
- p->indexList[0] = startIndex + 0 + 4;
- p->indexList[1] = startIndex + 1 + 4;
- p->indexList[2] = startIndex + 2 + 4;
- p->indexList[3] = startIndex + 1 + 4;
- p->indexList[4] = startIndex + 3 + 4;
- p->indexList[5] = startIndex + 2 + 4;
- zModel->addPolygon(p);
- // right side
- p = new Polygon3D();
- p->indexAnz = 6;
- p->indexList = new int[p->indexAnz];
- p->indexList[0] = startIndex + 0 + 12;
- p->indexList[1] = startIndex + 1 + 12;
- p->indexList[2] = startIndex + 2 + 12;
- p->indexList[3] = startIndex + 1 + 12;
- p->indexList[4] = startIndex + 3 + 12;
- p->indexList[5] = startIndex + 2 + 12;
- zModel->addPolygon(p);
- // top side
- p = new Polygon3D();
- p->indexAnz = 6;
- p->indexList = new int[p->indexAnz];
- p->indexList[0] = startIndex + 0 + 16;
- p->indexList[1] = startIndex + 1 + 16;
- p->indexList[2] = startIndex + 2 + 16;
- p->indexList[3] = startIndex + 1 + 16;
- p->indexList[4] = startIndex + 3 + 16;
- p->indexList[5] = startIndex + 2 + 16;
- zModel->addPolygon(p);
- // bottom side
- p = new Polygon3D();
- p->indexAnz = 6;
- p->indexList = new int[p->indexAnz];
- p->indexList[0] = startIndex + 0 + 20;
- p->indexList[1] = startIndex + 1 + 20;
- p->indexList[2] = startIndex + 2 + 20;
- p->indexList[3] = startIndex + 1 + 20;
- p->indexList[4] = startIndex + 3 + 20;
- p->indexList[5] = startIndex + 2 + 20;
- zModel->addPolygon(p);
- }
- void makeQuader(Vertex3D* vertecies,
- int startIndex,
- Vec3<float> pos,
- Vec3<float> size,
- Model3DData* zModel)
- {
- float left, right, top, bottom;
- // Calculate the screen coordinates of the left side of the bitmap.
- left = pos.x + size.x;
- // Calculate the screen coordinates of the right side of the bitmap.
- right = pos.x;
- // Calculate the screen coordinates of the top of the bitmap.
- top = pos.z + size.z;
- // Calculate the screen coordinates of the bottom of the bitmap.
- bottom = pos.z;
- float front = pos.y;
- float back = pos.y + size.y;
- makeQuader(vertecies,
- startIndex,
- Vec3<float>(left, front, top),
- Vec3<float>(right, front, top),
- Vec3<float>(left, front, bottom),
- Vec3<float>(right, front, bottom),
- Vec3<float>(left, back, top),
- Vec3<float>(right, back, top),
- Vec3<float>(left, back, bottom),
- Vec3<float>(right, back, bottom),
- zModel);
- }
- class Block : public Model3D
- {
- public:
- // Konstruktor
- // size: Die Größe des Würfels
- Block(GraphicsApi* zApi)
- {
- model = zApi->createModel("block");
- model->setAmbientFactor(ambient);
- model->setDiffusFactor(diffus);
- model->setSpecularFactor(specular);
- Vertex3D* vertecies = new Vertex3D[24];
- for (int i = 0; i < 24; i++)
- vertecies[i].knochenId = 0;
- makeQuader(vertecies,
- 0,
- Vec3<float>(-0.5, -0.5, -0.5),
- Vec3<float>(1, 1, 1),
- model);
- model->setVertecies(vertecies, 24);
- model->calculateNormals();
- textur = new Model3DTextur();
- Bild* b = new Bild();
- b->neuBild(10, 10, 0xFFFF5050);
- textur->setPolygonTextur(
- 0, zApi->createOrGetTextur("blockA", b)); // front
- b = new Bild();
- b->neuBild(10, 10, 0xFF5050FF);
- textur->setPolygonTextur(
- 1, zApi->createOrGetTextur("blockC", b)); // left
- b = new Bild();
- b->neuBild(10, 10, 0xFFA02020);
- textur->setPolygonTextur(
- 2, zApi->createOrGetTextur("blockB", b)); // back
- b = new Bild();
- b->neuBild(10, 10, 0xFF2020A0);
- textur->setPolygonTextur(
- 3, zApi->createOrGetTextur("blockD", b)); // right
- b = new Bild();
- b->neuBild(10, 10, 0xFF50FF50);
- textur->setPolygonTextur(
- 4, zApi->createOrGetTextur("blockE", b)); // top
- b = new Bild();
- b->neuBild(10, 10, 0xFF20A020);
- textur->setPolygonTextur(
- 5, zApi->createOrGetTextur("blockF", b)); // botom
- rend = 1;
- }
- };
- class ObjModel : public Model3D
- {
- private:
- Text modelName;
- public:
- ObjModel(GraphicsApi* zApi, Text path, Text textur, Text modelName)
- : Model3D()
- {
- M3Datei d("m3/blocks.m3");
- Model3DData* data = 0;
- d.leseDaten();
- Text* p = path.getTeilText(
- 0, path.positionVon(".obj/", path.anzahlVon(".obj/") - 1) + 4);
- if (d.hatModel(modelName))
- {
- data = d.ladeModel(modelName, zApi, *p);
- }
- else
- {
- ObjFile file(p->getText());
- data = zApi->createModel(path);
- file.loadModel(path.getText() + p->getLength() + 1, data);
- }
- p->release();
- data->setAmbientFactor(ambient);
- data->setDiffusFactor(diffus);
- data->setSpecularFactor(specular);
- setModelDaten(data);
- p = textur.getTeilText(0,
- textur.positionVon(".ltdb/", textur.anzahlVon(".ltdb/") - 1) + 5);
- LTDBDatei dat;
- dat.setDatei(p);
- dat.leseDaten(0);
- Bild* t = dat.laden(0,
- textur.getTeilText(
- textur.positionVon(".ltdb/", textur.anzahlVon(".ltdb/") - 1)
- + 6));
- Model3DTextur* tex = new Model3DTextur();
- tex->setPolygonTextur(0, zApi->createOrGetTextur(textur, t));
- this->textur = tex;
- adjustCenter();
- rend = 1;
- this->modelName = modelName;
- }
- void adjustCenter()
- {
- Vec3<float> maxPos = {-INFINITY, -INFINITY, -INFINITY};
- Vec3<float> minPos = {INFINITY, INFINITY, INFINITY};
- for (int i = 0; i < model->getVertexAnzahl(); i++)
- {
- if (model->zVertexBuffer()[i].pos.x < minPos.x)
- minPos.x = model->zVertexBuffer()[i].pos.x;
- if (model->zVertexBuffer()[i].pos.y < minPos.y)
- minPos.y = model->zVertexBuffer()[i].pos.y;
- if (model->zVertexBuffer()[i].pos.z < minPos.z)
- minPos.z = model->zVertexBuffer()[i].pos.z;
- if (model->zVertexBuffer()[i].pos.x > maxPos.x)
- maxPos.x = model->zVertexBuffer()[i].pos.x;
- if (model->zVertexBuffer()[i].pos.y > maxPos.y)
- maxPos.y = model->zVertexBuffer()[i].pos.y;
- if (model->zVertexBuffer()[i].pos.z > maxPos.z)
- maxPos.z = model->zVertexBuffer()[i].pos.z;
- }
- Vec3<float> center = minPos + (maxPos - minPos) / 2;
- if (center != Vec3<float>(0.f, 0.f, 0.f))
- {
- for (int i = 0; i < model->getVertexAnzahl(); i++)
- {
- // !! update of vertex data is not supported by the framework
- // and does not update some stored information on the model like
- // bounding box and radius
- ((Vertex3D*)model->zVertexBuffer())[i].pos -= center;
- }
- model->zDXVertexBuffer()->setChanged();
- model->updateGPUMemory();
- }
- }
- bool tick(double time) override
- {
- if (getTastenStand(VK_OEM_MINUS))
- {
- setSize(size - (size - (size * 0.995)) * (time * 3));
- }
- if (getTastenStand(VK_OEM_PLUS))
- {
- setSize(size + (size * 1.005 - size) * (time * 3));
- }
- if (getTastenStand(VK_NUMPAD1))
- {
- setDrehungX(getDrehung().x + time * 0.1);
- }
- if (getTastenStand(VK_NUMPAD4))
- {
- setDrehungX(getDrehung().x - time * 0.1);
- }
- if (getTastenStand(VK_NUMPAD2))
- {
- setDrehungY(getDrehung().y + time * 0.1);
- }
- if (getTastenStand(VK_NUMPAD5))
- {
- setDrehungY(getDrehung().y - time * 0.1);
- }
- if (getTastenStand(VK_NUMPAD3))
- {
- setDrehungZ(getDrehung().z + time * 0.1);
- }
- if (getTastenStand(VK_NUMPAD6))
- {
- setDrehungZ(getDrehung().z - time * 0.1);
- }
- if (getTastenStand(T_Enter))
- {
- if (size != 1.f || getDrehung() != Vec3<float>(0.f, 0.f, 0.f))
- {
- // aply scale and rotation on model verticies
- Mat4<float> matrix = Mat4<float>::identity()
- * Mat4<float>::rotationZ(angle.z)
- * Mat4<float>::rotationX(angle.x)
- * Mat4<float>::rotationY(angle.y)
- * Mat4<float>::scaling(size);
- for (int i = 0; i < model->getVertexAnzahl(); i++)
- {
- // !! update of vertex data is not supported by the
- // framework and does not update some stored information on
- // the model like bounding box and radius
- ((Vertex3D*)model->zVertexBuffer())[i].pos
- = matrix * model->zVertexBuffer()[i].pos;
- ((Vertex3D*)model->zVertexBuffer())[i].normal
- = (matrix * model->zVertexBuffer()[i].normal)
- .normalize();
- }
- model->zDXVertexBuffer()->setChanged();
- model->updateGPUMemory();
- size = 1.f;
- setDrehung(0.f, 0.f, 0.f);
- adjustCenter();
- }
- }
- if (getTastenStand(T_Ende))
- {
- // save model
- M3Datei dat("m3/blocks.m3");
- dat.leseDaten();
- dat.removeModel(modelName);
- if (dat.saveModel(model, modelName))
- {
- std::cout << "erfolgreich gespeichert\n";
- }
- else
- {
- std::cout << "fehler beim speichern\n";
- }
- }
- return Model3D::tick(time);
- }
- };
- // Aktion beim schließen des Fensters
- void schließen(void* p, void* f)
- {
- // Stoppe Nachrichten Loop
- StopNachrichtenSchleife(((WFenster*)f)->getFensterHandle());
- }
- int __stdcall Framework::Start(Startparam p)
- {
- // Fenster erstellen
- WNDCLASS wc = F_Normal(p.hinst);
- wc.lpszClassName = "3D Creator";
- WFenster* f = new WFenster();
- f->erstellen(WS_OVERLAPPEDWINDOW, wc);
- f->setVSchließAktion(schließen);
- f->setAnzeigeModus(SW_SHOWNORMAL);
- f->setSize(1300, 820);
- f->setPosition(Punkt(100, 100));
- // 3D Umgebung erstellen
- Bildschirm3D* b
- = new Bildschirm3D(dynamic_cast<WFenster*>(f->getThis()), DIRECTX11);
- f->setBildschirm(dynamic_cast<Bildschirm*>(b->getThis()));
- b->setFillFarbe(0);
- b->setTestRend(0);
- Welt3D* welt = new Welt3D();
- ObjModel* mdl = new ObjModel(b->zGraphicsApi(),
- "obj/sebling.obj/Cube",
- "tex/blocks.ltdb/torch.png",
- "torch");
- mdl->setPosition(0, 0, 0);
- welt->addZeichnung(mdl);
- Block* blk = new Block(b->zGraphicsApi());
- blk->setPosition(0, 0, -1);
- welt->addZeichnung(blk);
- welt->addDiffuseLight(
- {Vec3<float>(-0.5f, -0.5f, -0.5f), Vec3<float>(1.f, 1.f, 1.f)});
- Kam3D* kamA = new Kam3D(); // look at front
- kamA->setBildschirmPosition(10, 10);
- kamA->setBildschirmSize(385, 385);
- kamA->setPosition(Vec3<float>(0, -10, 0));
- kamA->setRotation({-(float)PI / 2.f, -(float)PI, 0});
- kamA->setWelt(dynamic_cast<Welt3D*>(welt->getThis()));
- b->addKamera(kamA);
- Kam3D* kamB = new Kam3D(); // look at left
- kamB->setMovementSpeed(1);
- kamB->setBildschirmPosition(10, 405);
- kamB->setBildschirmSize(385, 385);
- kamB->setPosition(Vec3<float>(10, 0, 0));
- kamB->setRotation({-PI / 2, (float)PI, (float)PI / 2.f});
- kamB->setWelt(dynamic_cast<Welt3D*>(welt->getThis()));
- b->addKamera(kamB);
- Kam3D* kamC = new Kam3D();
- kamC->setBildschirmPosition(405, 10);
- kamC->setBildschirmSize(385, 385);
- kamC->setPosition(Vec3<float>(0, 0, 10));
- kamC->setRotation({-(float)PI, 0, 0});
- kamC->setWelt(dynamic_cast<Welt3D*>(welt->getThis()));
- b->addKamera(kamC);
- Kam3D* kamD = new Kam3D();
- kamD->setStyle(
- Kam3D::Style::Movable | Kam3D::Style::Rotatable | Kam3D::Style::Tick);
- kamD->setBildschirmPosition(405, 405);
- kamD->setBildschirmSize(385, 385);
- kamD->setPosition(Vec3<float>(0, -10, 0));
- kamD->setRotation({-(float)PI / 2.f, -(float)PI, 0});
- kamD->setWelt(dynamic_cast<Welt3D*>(welt->getThis()));
- b->addKamera(kamD);
- LTDSDatei dat;
- dat.setPfad(new Text("normal.ltds"));
- dat.leseDaten();
- Schrift* schrift = dat.ladeSchrift();
- TextFeld* kamPos = new TextFeld();
- kamPos->setSchriftZ(schrift);
- kamPos->setPosition(810, 10);
- kamPos->setSize(200, 200);
- kamPos->setText("Kamera Position");
- kamPos->setStyle(TextFeld::Style::Text);
- b->addMember(kamPos);
- LRahmen* kamAR = new LRahmen();
- kamAR->setPosition(10, 10);
- kamAR->setFarbe(0xFFFFFFFF);
- kamAR->setRamenBreite(1);
- kamAR->setSize(385, 385);
- b->addMember(kamAR);
- LRahmen* kamBR = new LRahmen();
- kamBR->setPosition(404, 10);
- kamBR->setFarbe(0xFFFFFFFF);
- kamBR->setRamenBreite(1);
- kamBR->setSize(385, 385);
- b->addMember(kamBR);
- LRahmen* kamCR = new LRahmen();
- kamCR->setPosition(10, 405);
- kamCR->setFarbe(0xFFFFFFFF);
- kamCR->setRamenBreite(1);
- kamCR->setSize(385, 385);
- b->addMember(kamCR);
- LRahmen* kamDR = new LRahmen();
- kamDR->setPosition(405, 405);
- kamDR->setFarbe(0xFFFFFFFF);
- kamDR->setRamenBreite(1);
- kamDR->setSize(385, 385);
- b->addMember(kamDR);
- // Render Loop starten
- RenderTh* r = new RenderTh();
- r->setMaxFps(10000);
- r->setBildschirm(dynamic_cast<Bildschirm*>(b->getThis()));
- r->setTickFunktion([b, kamD, kamA, kamB, kamC, kamPos](
- void*, void*, double t) {
- if (Framework::getTastenStand('1'))
- {
- kamA->setStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamB->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamC->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamD->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- }
- if (Framework::getTastenStand('2'))
- {
- kamA->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamB->setStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamC->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamD->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- }
- if (Framework::getTastenStand('3'))
- {
- kamA->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamB->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamC->setStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamD->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- }
- if (Framework::getTastenStand('4'))
- {
- kamA->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamB->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamC->removeStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- kamD->setStyle(Kam3D::Style::Movable | Kam3D::Style::Rotatable
- | Kam3D::Style::Tick);
- }
- Text txt = Text("A: ") + kamA->getWorldPosition().x + ", "
- + kamA->getWorldPosition().y + ", "
- + kamA->getWorldPosition().z + "\n";
- txt += Text("B: ") + kamB->getWorldPosition().x + ", "
- + kamB->getWorldPosition().y + ", " + kamB->getWorldPosition().z
- + "\n";
- txt += Text("C: ") + kamC->getWorldPosition().x + ", "
- + kamC->getWorldPosition().y + ", " + kamC->getWorldPosition().z
- + "\n";
- txt += Text("D: ") + kamD->getWorldPosition().x + ", "
- + kamD->getWorldPosition().y + ", " + kamD->getWorldPosition().z
- + "\n";
- kamPos->setText(txt);
- });
- r->beginn();
- // Nachrichten Loop starten und warten
- StartNachrichtenSchleife();
- // Speicher Freigeben
- r->beenden();
- r->release();
- b->release();
- f->setBildschirm(0);
- f->zerstören();
- f->release();
- welt->release();
- return 0;
- }
|