Du bist nicht angemeldet.

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

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

1

20.10.2007, 22:20

TriBase Engine funktioniert nicht

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_DIRECTX("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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

20.10.2007, 23:02

1. Benutze einen aktuellen Compiler (Visual C++ 2005 Express Edition, ist kostenlos)
2. Benutze die richtige DirectX-SDK-Version
3. Freu dich, dass es funktioniert

SirForce

Alter Hase

Beiträge: 802

Wohnort: Süddeutschland

  • Private Nachricht senden

3

21.10.2007, 11:26

Zitat

c:\visual c++6.0\msdev98\myprojects\logfile-klasse\texturen dreiecke\texturen dreiecke.cpp(2) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'pTexture'


Das dürfte ja schnell gefunden worden sein!!!

Ansonsten, hast du auch wirklich alles richtig (und aktuell!!!) eingebunden?!
Nichts behindert so sehr die Entwicklung der Intelligenz wie ihre vollständige Abwesenheit.

Michail Genin

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

4

21.10.2007, 11:52

Entweder du hast das DirectX-SDK nicht richtig installiert oder nicht richtig eingebunden. ;)

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

5

21.10.2007, 12:12

Hi

Leider gibt es aber bei mir keine Widows 32 Anwndung, also auf Visual C++ 2005 Express Edition. Es sind nur die Windows 32 Konsolenanwendung und andere Vorlagen darauf zu finden, aber nicht die Windows 32 Anwendung. Kann mir jemand sagen wie man die Windows 32 Anwendung auf Visual C++ 2005 Express Edition instralliert?

Vorher habe ich Visual C++ 6.0 Autorenedition angewendet.


Gruss Patrick Egli

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

21.10.2007, 12:14

Übrigens kann der Quellcode so gar nicht laufen.
Sieht aus, als ob du wahllos irgendwelche Schnipsel zusammenkopiert hättest. Da gibt es ja nicht einmal eine WinMain-Funktion. Dein Code hängt einfach so außerhalb jeglicher Funktion herum. Das kann gar nicht gehen.

Warum lädst du nicht einfach eine der Projektdateien von der CD-ROM?

Du solltest aber erst einmal C++ lernen (wenn du die Sprache beherrschen würdest, würdest du nicht solche offensichtlichen Fehler machen). Vorher hat es überhaupt keinen Sinn!

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

7

21.10.2007, 14:14

Hi

Ich habe den Code vom Buch abgeschrieben, also solte es doch eigentlich stimmen. Im Buch hat es auch keine WinMain Funktion.

Ich habe das Buch C++ für Spieleprogrammierer schon durchgelesen und komme schon recht gut zurecht, muss man dort schon selber ein 2D Spiel schreiben können?

Gruss Patrick Egli

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

21.10.2007, 14:32

Zitat von »"Patrick Egli"«

Ich habe den Code vom Buch abgeschrieben, also solte es doch eigentlich stimmen. Im Buch hat es auch keine WinMain Funktion.

Dir sollte doch klar sein, dass die Codes im Buch nur "Schnipsel" sind und keine kompletten Programme. Das würde viel zu viel Platz brauchen.

Zitat von »"Patrick Egli"«

Ich habe das Buch C++ für Spieleprogrammierer schon durchgelesen und komme schon recht gut zurecht

Dann lies es nochmal richtig oder ein anderes Buch. Wie gesagt, wenn du die Sprache gut könntest, dann hättest du sofort gemerkt, dass es so gar nicht funktionieren *kann*.

Werbeanzeige