Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
bool testBBColl (CBoundingBox &box1, CBoundingBox &box2) { if (box1.getType() == BOX_TYPE_AABB || box2.getType() == BOX_TYPE_AABB) { CBoundingBox tempBox1 (box1); CBoundingBox tempBox2 (box2); //Verschiebung der Box berechnen, sonst klappt das NUR wenn //die Box auf 0,0,0 ist // Box 1 tempBox1.Min.x += box1.Pos.x; tempBox1.Min.y += box1.Pos.y; tempBox1.Min.z += box1.Pos.z; tempBox1.Max.x += box1.Pos.x; tempBox1.Max.y += box1.Pos.y; tempBox1.Max.z += box1.Pos.z; // Box 2 tempBox2.Min.x += box2.Pos.x; tempBox2.Min.y += box2.Pos.y; tempBox2.Min.z += box2.Pos.z; tempBox2.Max.x += box2.Pos.x; tempBox2.Max.y += box2.Pos.y; tempBox2.Max.z += box2.Pos.z; if (tempBox1.Max.x < tempBox2.Min.x || tempBox2.Max.x < tempBox1.Min.x) return false; if (tempBox1.Max.y < tempBox2.Min.y || tempBox2.Max.y < tempBox1.Min.y) return false; if (tempBox1.Max.z < tempBox2.Min.z || tempBox2.Max.z < tempBox1.Min.z) return false; return true; } else { // Nee das erspare ich euch :D } return false; } bool PtInBox (CBoundingBox& box, D3DXVECTOR3& point, float f) { CBoundingBox temp(box); //Verschiebung der Box berechnen, sonst klappt das NUR wenn //die Box auf 0,0,0 ist temp.Min.x += box.Pos.x; temp.Min.y += box.Pos.y; temp.Min.z += box.Pos.z; temp.Max.x += box.Pos.x; temp.Max.y += box.Pos.y; temp.Max.z += box.Pos.z; return ((point.x <= temp.Max.x +f&& point.y <= temp.Max.y +f&& point.z <= temp.Max.z +f&& point.x >= temp.Min.x -f&& point.y >= temp.Min.y -f&& point.z >= temp.Min.z -f)); } inline void exCreateBoundingBox(const std::vector <MODELVERTEX> &Vertexliste,int NumVertices, SBoundingBox& xBox) { float fMax_x, fMax_y, fMax_z, fMin_x, fMin_y, fMin_z; // Startwerte beliebig wählen fMax_x = fMin_x = Vertexliste[0].m_vecPos.x; fMax_y = fMin_y = Vertexliste[0].m_vecPos.y; fMax_z = fMin_z = Vertexliste[0].m_vecPos.z; for (int j=0; j<NumVertices; j++) { // Nach neuem Maximalwert suchen fMax_x = max(fMax_x, Vertexliste[j].m_vecPos.x); fMax_y = max(fMax_y, Vertexliste[j].m_vecPos.y); fMax_z = max(fMax_z, Vertexliste[j].m_vecPos.z); // Nach neuem Minimalwert suchen fMin_x = min(fMin_x, Vertexliste[j].m_vecPos.x); fMin_y = min(fMin_y, Vertexliste[j].m_vecPos.y); fMin_z = min(fMin_z, Vertexliste[j].m_vecPos.z); } // for [Verts] // Ausdehnung der Box speichern xBox.Max = D3DXVECTOR3(fMax_x, fMax_y, fMax_z); xBox.Min = D3DXVECTOR3(fMin_x, fMin_y, fMin_z); // Mittelpunkt berechnen xBox.MiddlePoint = D3DXVECTOR3((fMax_x+fMin_x)/2, (fMax_y+fMin_y)/2, (fMax_z+fMin_z)/2); return ; } |
Administrator
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// Sterne aus Szene erstellen int Stars::initFromScene(SCENE* p_scene) { if(!p_scene) return 1; // Sternenhelferobjekt suchen PH4OBJECT* p_stars = p_scene->findHelper("PH4 Stars"); if(!p_stars) return 0; // Parameter lesen numStars = p_stars->getInt("NumStars"); minBr = p_stars->getFloat("MinBrightness"); maxBr = p_stars->getFloat("MaxBrightness"); // Vertex-Buffer erstellen LPDIRECT3DDEVICE9 p_d3dDevice = Game::inst().getD3DDevice(); HRESULT r = p_d3dDevice->CreateVertexBuffer(numStars * sizeof(STARVERTEX), D3DUSAGE_WRITEONLY, D3DFVF_XYZ | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &p_vb, 0); if(FAILED(r)) return 1; // Vertex-Buffer sperren STARVERTEX* p_vertexData; p_vb->Lock(0, 0, (void**)(&p_vertexData), D3DLOCK_NOSYSLOCK); // Sterne einfüllen for(int i = 0; i < numStars; i++) { p_vertexData->pos = vec3Random() * 500.0f; if(p_vertexData->pos.y < 0.0f) p_vertexData->pos.y *= -1.0f; p_vertexData->pos.y += 50.0f; float br = floatRandom(minBr, maxBr); p_vertexData->color = D3DXCOLOR(br + floatRandom(-0.1f, 0.1f), br + floatRandom(-0.1f, 0.1f), br + floatRandom(-0.1f, 0.1f), 1.0f); p_vertexData++; } p_vb->Unlock(); return 0; } |
Administrator
Administrator
Administrator
Werbeanzeige