Hi
Ich habe ein Problem bei der TriBase Engine wie ich feststellen konnte, ging bei mir erst ein Programm, das ohne TriBase Engine laufen musste, diese Beispielprogramm war auf der Seite 109-110 bei den Adapterinformationen.
Doch jetzt bin ich ein Stück weiter, bei den Texturen, also diese die sich all drei Sekunden verändern lassen mit der Qualität. Dieses findet man auf den Seiten 160-164. Dort muss man wieder einmal die TriBase Engine benutzen. Doch das geht ebenfalls wie alle anderen TriBase Programme auch nicht.
Kann mri jemand helfen, ich bin mir nicht ganz sicher, was ich Falsch mache, ich bin mit dem Linker nicht so sicher und den #include Dateien.
Das wäre mal der Quelcode:
// Textur laden
PDIRECT3DTEXTURE9 pTexture;
// ...
// Information der ersten MIP-Map-Ebene abfragen
HRESULT hResult;
D3DSURFACE_DESC Desc;
if (FAILED(hResult = pTexture->GetLevelDesc(0, &Desc)))
{
// Fehler
//...
}
// Struktur für ein Dreieck
struct STriangle
{
tbVector3 vPosition; // Position
tbVector3 vVelocity; // Bewegung (Richtung und Geschwindigkeit)
tbVector3 vRotation; // Rotationszustand
tbVector3 vRotVelocity; // Rotationsbewegung
float fSize; // Grösse
SVertex aVertex[3]; // Die drei Vertizes
};
for (int iTri = 0; iTri < g_iNumTriangles; iTri++)
{
// Alle Dreiecke starten am Punkt (0, 0, 50).
g_aTriangle[iTri].vPosition = tbVector3 (0, 0, 50);
// Die Bewegung ist zufällig.
g_aTriangle[iTri].vVelocity = tbVectorRandom() * tbFloatRandom (0.1f, 5.0f);
// Rotation zurücksetzen
g_aTriangle[iTri].vRotation = tbVector3 (0, 0, 0);
// Rotationgeschwindigkeit ist zufällig auf allen drei Achsen
g_aTriangle[iTri].vRotVelocity.x = tbFloatRandom (-1.0f, 1.0f);
g_aTriangle[iTri].vRotVelocity.y = tbFloatRandom (-1.0f, 1.0f);
g_aTriangle[iTri].vRotVelocity.z = tbFloatRandom (-1.0f, 1.0f);
// Grösse zufällig zwischen 1 und 5 festlegen
g_aTriangle[iTri].fSize =tbFloatRandom (1.0f, 5.0f);
// Nun die einzelnen Vertites generieren
for (int iVertex = 0; iVertex < 3; iVertex++)
{
// Position und Frabe
g_aTriangle[iTri].aVertex[iVertex].vPosition = tbVector3Random();
g_aTriangle[iTri].aVertex[iVertex].dwColor = tbColor (tbFloatRandom (0.0f, 1.0f),
tbFloatRandom (0.0f, 1.0f),
tbFloatRandom (0.0f, 1.0f));
// Texturkoordinaten zufällig zwischen -1 und 2 erzeugen
g_aTriangle[iTri].aVertex[iVertex].vTexture.u = tbFloatRandom (-1.0f, 2.0f);
g_aTriangle[iTri].aVertex[iVertex].vTexture.v = tbFloatRandom (-1.0f, 2.0f);
}
}
// Die Textur laden
if (FAILED(hResult = D3DXCreateTextureFromFileEx (g_pD3DDevice, // Device
"Texture.bmp" // Dateiname
D3DX_DEFAULT, // Breite
D3DX_DEFAULT, // Höhe
D3DX_DEFAULT, // MIP-Maps
0, // Zweck
D3DFMT_UNKNOW, // Format
D3DPOOL_MANAGED, // Speicherklasse
D3DX_FILTER_NONE, // Filter
D3DX_DEFAULT, // MIP-Map-Filter
0, // Color-Key
NULL, // Unwichtig
NULL, // Unwichtig
&g_pTexture))) // Die Textur
{
TB_ERROR_DIRECT
"D3DXCreateTextureFromFileEx", hResult, TB_ERROR); // Fehler
}
// Und nun die Texture einsetzen
g_pD3DDevice->SetTexture(0, g_pTexture);
// Move-Funktion
tbResult Move (float fNumSecsPassed)
{
// Zeitzähler erhöhen
g_fTime += fNumSecsPassed;
// Wenn der Benutzer die Leertaste drückt, wird das Pogramm angehalten.
// So sind die Wirkungen der verschiedenen Filter besser zu erkennen
if (GetAsyncKeyState(VK_SPACE)) fNumSecsPassed = 0.0f;
// Jedes Dreieck bewegen
float fDistance;
for (int iTriangle = 0; iTriangle < g_iNumTriangles; iTriangle++)
{
// Position und Rotation aktualisieren
g_aTriangle[iTriangle].vPosition += g_aTriangle[iTriangle].vVelocity
* fNumSecsPassed;
g_aTriangle[iTriangle].vRotation += g_aTriangle[iTriangle].vRotVelocity
* fNumSecsPassed;
// Distanz des Dreiecks zum Beobachter (zum Nullpunkt) berechnen
fDistance = tbVector3Lenght (g_aTriangle[iTriangle].vPosition);
// Wenn die Distanz grösser als 100 ist, soll das Dreieck umkehren.
if (fDistance > 100.0f) g_aTriangle[iTriangle].vVelocity *= -1.0f;
}
return TB_OK;
}
// Abhängig von der Zeit die Texturfilter setzen.
// Alle drei Sekunden werden diese geändert.
if ((int)(g_fTime / 3.0f) % 3 == 0)
{
// Bilineare Filter mit linearem MIP-Mapping
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
SetWindowText(g_hWindow, "Beispielprogramm Nr.4: Texturen (MIN: Linear, MAG: Linear, MIP: Linear)");
}
else if (int)(g_fTime / 3.0f) % 3 == 2)
{
// Keine Filter ("PlayStation-Effekt"), auch kein MIP-Mapping
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_NONE);
SetWindowText(g_hWindow, "Beispielprogramm Nr.4: Texturen (MIN: Point, MAG: Point, MIP: None)");
}
else
{
// Maximale anisotropischer Filter ohne MIP-Mapping
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAXANISOTROPY,
g_Direct3DParameters.DeviceCaps.MaxAnisotropy);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPY);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
SetWindowText(g_hWindow, "Beispielprogramm Nr.4: Texturen (MIN: Anisotropy, MAG: Linear, MIP: None)");
}
Und das sind die Fehler, des Programms:
--------------------Konfiguration: Texturen Dreiecke - Win32 Debug--------------------
Kompilierung läuft...
Texturen Dreiecke.cpp
c:\visual c++6.0\msdev98\myprojects\logfile-klasse\texturen dreiecke\texturen dreiecke.cpp(2) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'pTexture'
c:\visual c++6.0\msdev98\myprojects\logfile-klasse\texturen dreiecke\texturen dreiecke.cpp(2) : error C2501: 'PDIRECT3DTEXTURE9' : Fehlende Speicherklasse oder Typbezeichner
c:\visual c++6.0\msdev98\myprojects\logfile-klasse\texturen dreiecke\texturen dreiecke.cpp(2) : fatal error C1004: Unerwartetes Dateiende gefunden
Fehler beim Ausführen von cl.exe.
Texturen Dreiecke.exe - 3 Fehler, 0 Warnung(en)
Gruss Patrick Egli