|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 14.06.2005, 16:38 Titel: Frustum & Bounding-Sphere |
|
|
Moin Moin,
mir bereit mein Sichtbarkeitstest mit einer Bounding-Sphere etwas Kopfzerbrechen. Und zwar ist der Sichtbarkeitstest zu früh der Meinung, das eine Sphere nicht mehr sichtbar ist. Hier mal 2 Bildchen was ich meine:
>> Der weiße Klops ist die Bounding-Sphere, Radius und Mittelpunkt der ganzen Geschichte sollten eigentlich passen.
>> Hier ist jetzt noch ein relativ großer Teil des "Klops" zu sehen, aber der Sichtbarkeitstest ist schon der überzeugung das da nichts mehr ist.
Hier mal etwas Code:
Zuerst das berechnen des Abstandes des Mittelpunktes zu den einzelnen Planes des Frustum:
CPP: | CEDLL float cePointPlaneDistance(const D3DXVECTOR3 &vPoint, const CEPLANE &cePlane)
{
return cePlane.a * vPoint.x + cePlane.b * vPoint.y + cePlane.c * vPoint.z + cePlane.d;
} |
Hier die ganze Marie in der Benutzung:
CPP: | bool CEFrustum::IsSphereinFrustum(CEOBJECT ceObject)
{
int iTrueCounter = 0;
for(int i=0;i < 6; i++) {
float fDistance = cePointPlaneDistance(ceObject.vecCenter,m_Plane[i]);
//char cTest[1024];
//sprintf(cTest,"int: %d: fDistance: %f - Radius: -%f\n",i,fDistance,ceObject.fRadius);
//CE_WRITELOG(cTest);
if(fDistance <= -ceObject.fRadius)
return false;
else
iTrueCounter++;
}
if(iTrueCounter==6)
return true;
else
return false;
} |
Und hier noch das errechnen der Planes:
CPP: | void CEFrustum::ExtractPlanes(D3DXMATRIX viewMat, D3DXMATRIX projMat, bool bNormalize)
{
D3DXMATRIX comboMatrix;
D3DXMatrixMultiply(&comboMatrix, &viewMat, &projMat);
// Left clipping Plane:
m_Plane[0].a = comboMatrix._14 + comboMatrix._11;
m_Plane[0].b = comboMatrix._24 + comboMatrix._21;
m_Plane[0].c = comboMatrix._34 + comboMatrix._31;
m_Plane[0].d = comboMatrix._44 + comboMatrix._41;
// Right clipping Plane:
m_Plane[1].a = comboMatrix._14 - comboMatrix._11;
m_Plane[1].b = comboMatrix._24 - comboMatrix._21;
m_Plane[1].c = comboMatrix._34 - comboMatrix._31;
m_Plane[1].d = comboMatrix._44 - comboMatrix._41;
// Top clipping Plane:
m_Plane[2].a = comboMatrix._14 - comboMatrix._12;
m_Plane[2].b = comboMatrix._24 - comboMatrix._22;
m_Plane[2].c = comboMatrix._34 - comboMatrix._32;
m_Plane[2].d = comboMatrix._44 - comboMatrix._42;
// Bottom clipping Plane:
m_Plane[3].a = comboMatrix._14 + comboMatrix._12;
m_Plane[3].b = comboMatrix._24 + comboMatrix._22;
m_Plane[3].c = comboMatrix._34 + comboMatrix._32;
m_Plane[3].d = comboMatrix._44 + comboMatrix._42;
// Near clipping Plane:
m_Plane[4].a = comboMatrix._13;
m_Plane[4].b = comboMatrix._23;
m_Plane[4].c = comboMatrix._33;
m_Plane[4].d = comboMatrix._43;
// Far clipping plane
m_Plane[5].a = comboMatrix._14 - comboMatrix._13;
m_Plane[5].b = comboMatrix._24 - comboMatrix._23;
m_Plane[5].c = comboMatrix._34 - comboMatrix._33;
m_Plane[5].d = comboMatrix._44 - comboMatrix._43;
// Normalize Planes falls gewünscht:
if(bNormalize == true)
{
NormalizePlane(m_Plane[0]);
NormalizePlane(m_Plane[1]);
NormalizePlane(m_Plane[2]);
NormalizePlane(m_Plane[3]);
NormalizePlane(m_Plane[4]);
NormalizePlane(m_Plane[5]);
}
} //ExtractPlanes |
Hat jemand ne Idee woran es liegen könnte? _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
SK Mini JLI'ler
Alter: 36 Anmeldedatum: 11.06.2005 Beiträge: 20
Medaillen: Keine
|
Verfasst am: 30.07.2005, 15:04 Titel: |
|
|
ich hab die berechnung net ganz kapiert, muss mir das erstma richtig durchlesen (bin ja im urlaub); soweit ich da gesehen hab berechnest du irgendwo den radius von den mittelpunkten der planes zu den mittelpunkten der kugel, kann das sein das du noch die wurzel ziehen musst? Wie gesagt habs nur oberflächlich gelesen ... denken fällt in ferien schwer |
|
Nach oben |
|
|
SK Mini JLI'ler
Alter: 36 Anmeldedatum: 11.06.2005 Beiträge: 20
Medaillen: Keine
|
Verfasst am: 30.07.2005, 15:28 Titel: |
|
|
sry war schwachsinn! der algorithmus is gut, werd ich mir merken. ich wunder mich bloß warum du d < -r in deiner schleife stehn hast. müsste es nicht d < r heißen? |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.08.2005, 21:37 Titel: |
|
|
Uh, das dingen ist schon älter... wie war das doch gleich. Die Werte die verglichen werden sind in jedem Fall negativ. Ich glaube alles was hinter der Plane ist ist positiv... irgendsowas war da... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|