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

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

04.04.2006, 20:19

Mehrere Vierecke zeichnen - trotz TriangleStrip

Hi,

wie kann ich mit der Tribase-Engine mehrere Vierecke zeichnen. Ich benutze ja zum Zeichnen von Vierecken den Renderstate TriangleStrip. Kann ich nun mitteilen, dass ich die nächsten Vertizes nicht an die vorherigen anhängen möchte? Wenn ja, wie?

gruß spacegaier

Anonymous

unregistriert

2

04.04.2006, 20:31

Indexbuffer :)

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

3

04.04.2006, 20:35

Danke. Hab ich mir noch nicht angeschaut. Mach ich aber demnächst.

Hab noch eine andere Frage:

Wie kann ich die Hintergrundfarbe sich ändern lassen?
Sinusfunktion geht ja nicht, da diese float-Werte nutzt. Gibt es eine andere Möglichkeit?

Anonymous

unregistriert

4

04.04.2006, 20:41

spacegaier
Wieso geht sinusfunktion denn nicht? Einheitskreis geht von 0-1, umrechnen in 0-255 (sollte kein Problem sein). Ergo: geht doch ;)

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

5

04.04.2006, 20:41

wieso??

Mach doch eine Sinusfunktion, mulitplizier den Wert mit 1/255 und caste es nach BYTE, dann passt alles.

zB

C-/C++-Quelltext

1
2
3
float fRed = sinf(g_fTime);
fRed *= 0,00392156;  // 1 / 255

BYTE Red = static_cast<BYTE>(fRed);


edit: warst schneller ;)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

6

04.04.2006, 21:00

Geht leider nocht.

Zitat

c:\dokumente und einstellungen\philip\eigene dateien\stationäre programmierdateien\tribase\include\dshowbaseclasses\wxutil.h(195): warning C4312: 'Typumwandlung': Konvertierung von 'LONG' in größeren Typ 'PVOID'
c:\dokumente und einstellungen\philip\eigene dateien\stationäre programmierdateien\tribase\include\tbGUI.h(288): warning C4267: '=': Konvertierung von 'size_t' nach 'int', Datenverlust möglich
c:\Dokumente und Einstellungen\Philip\Eigene Dateien\Visual Studio Projects\D3D-Dreiecke\Dreieck.cpp(51): error C2041: Ungültige Ziffer '9' für Basis '8'
c:\Dokumente und Einstellungen\Philip\Eigene Dateien\Visual Studio Projects\D3D-Dreiecke\Dreieck.cpp(55): error C2041: Ungültige Ziffer '9' für Basis '8'
c:\Dokumente und Einstellungen\Philip\Eigene Dateien\Visual Studio Projects\D3D-Dreiecke\Dreieck.cpp(59): error C2041: Ungültige Ziffer '9' für Basis '8'
c:\Dokumente und Einstellungen\Philip\Eigene Dateien\Visual Studio Projects\D3D-Dreiecke\Dreieck.cpp(68): error C2296: '&': Ungültig, da der linke Operand vom Typ 'float' ist
c:\Dokumente und Einstellungen\Philip\Eigene Dateien\Visual Studio Projects\D3D-Dreiecke\Dreieck.cpp(68): error C2296: '&': Ungültig, da der linke Operand vom Typ 'float' ist
c:\Dokumente und Einstellungen\Philip\Eigene Dateien\Visual Studio Projects\D3D-Dreiecke\Dreieck.cpp(68): error C2296: '&': Ungültig, da der linke Operand vom Typ 'float' ist


PS: Weiß net wo die Raucher herkommen.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

7

04.04.2006, 21:23

Post mal den Code, den du geändert hast!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

8

04.04.2006, 21:28

C-/C++-Quelltext

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// Kapitel 2

// Beispielprogramm 03

// ===================

// Hier wird das erste einfache Dreieck gezeichnet.


#include <Windows.h>
#include <TriBase.h>
#include "InitWindow.h"
#include "Direct3DEnum.h"
#include "InitDirect3D.h"
#include "Resource.h"

// ******************************************************************

// Struktur für einen Vertex: Position und Farbe

struct SVertex
{
    tbVector3           vPosition;  // Position des Vertex

    DWORD               dwColor;    // Farbe des Vertex

    static const DWORD  dwFVF;      // Vertexformat (statisch)

};

const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;

// ******************************************************************

// Globale Variablen

SDirect3DParameters g_Direct3DParameters;   // Direct3D-Parameter

float               g_fTime = 0.0f;         // Zeitzähler

SVertex             g_aTriangleVertex[3];   // Die drei Vertizes des Dreiecks


// ******************************************************************

// Render-Funktion

tbResult Render(float fNumSecsPassed)
{
    HRESULT     hResult;
    tbMatrix    mRotation;      // Rotationsmatrix

    tbMatrix    mTranslation;   // Translationsmatrix

    tbMatrix    mWorld;         // Vereinende Weltmatrix



    // Rotations- und Translationsmatrix des Dreiecks erzeugen

    mRotation = tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime * 90.0f));
    mTranslation = tbMatrixTranslation(tbVector3(0.0f, -0.5f, 2.0f));
    
    // Beide Matrizen kombinieren und als Weltmatrix einsetzen

    mWorld = mRotation * mTranslation;
    g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));

    // -------------------------------------------------------------


    float fRed = sinf(g_fTime); 
    fRed *= 0,00392156;  // 1 / 255 

    BYTE Red = static_cast<BYTE>(fRed); 

    float fGreen = sinf(g_fTime); 
    fGreen *= 0,00392156;  // 1 / 255 

    BYTE Green = static_cast<BYTE>(fGreen); 

    float fBlue = sinf(g_fTime); 
    fBlue *= 0,00392156;  // 1 / 255 

    BYTE Blue = static_cast<BYTE>(fBlue); 

    // Den Bildpuffer und den Z-Buffer leeren

    if(FAILED(hResult = g_pD3DDevice->Clear(0,
                                            NULL,
                                            D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                                            D3DCOLOR_XRGB(fRed, fGreen, fBlue),
                                            1.0f,
                                            0)))
    {
        // Fehler beim Leeren!

        MessageBox(g_hWindow, "Fehler beim Leeren der Puffer!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP);
    }

    // Szene beginnen

    g_pD3DDevice->BeginScene();

    // Nun das Dreieck zeichnen

    if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,  // Dreiecksliste

                                                      2,                    // 1 Dreieck

                                                      g_aTriangleVertex,    // Vertexdaten

                                                      sizeof(SVertex))))    // Vertexgröße

    {
        // Fehler beim Zeichnen!

        MessageBox(g_hWindow, "Fehler beim Zeichnen des Dreiecks!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
    }

    float a;
    a = sinf(g_fTime/2);
    if (a<0) a *= -1;
    float b;
    b = cosf(g_fTime);
    if (b<0) b *= -1;

    g_aTriangleVertex[1].vPosition  = tbVector3(    a,     0.0f,     0.0f);
    g_aTriangleVertex[0].vPosition  = tbVector3( 0.0f,     0.0f,     0.0f);
    g_aTriangleVertex[2].vPosition  = tbVector3( 0.0f,        a,     0.0f);
    g_aTriangleVertex[3].vPosition  = tbVector3(    a,        a,     0.0f);

    g_aTriangleVertex[0].dwColor    = tbColor(sinf(g_fTime), cosf(g_fTime),-sinf(g_fTime)); 
    g_aTriangleVertex[1].dwColor    = tbColor(cosf(g_fTime), sinf(g_fTime), tanf(g_fTime)); 
    g_aTriangleVertex[2].dwColor    = tbColor(-sinf(g_fTime),-sinf(g_fTime), sinf(g_fTime));
    g_aTriangleVertex[3].dwColor    = tbColor(-sinf(g_fTime),-tanf(g_fTime), cosf(g_fTime));
    
    // Szene beenden

    g_pD3DDevice->EndScene();

    // Der große Moment: den Bildpuffer sichtbar machen

    g_pD3DDevice->Present(NULL, NULL, NULL, NULL);

    return TB_OK;
}
[/quote]

john

Alter Hase

Beiträge: 786

Beruf: Schüler

  • Private Nachricht senden

9

04.04.2006, 21:32

Ja, ich würde auch sagen poste ihn mal !

Allerdings kann man jetzt schon beide Ursprungsfehler erklären.
Die eine Meldung bedeutet, dass du eine ungültige Ziffer für die Basis angegeben hast (Basis zum Beispiel Oktal oder Hex).
Zum Oktalsystem: wenn du zum Beispiel so eine Variable definierst:

C-/C++-Quelltext

1
 int i = 011; 

Dann gibst du dem Compiler mit der 0 vornedran an, dass das ein Wert aus dem Oktalsystem ist.

Der andere Fehler bedeutet schon, was er sagt, dass der linke Operand für den Operator ungültig ist.

Ich hoffe, so konnte man das einigermaßen verstehen. ;) Zeig jetzt aber am besten noch einmal deinen Code, dass wir dir auch praktisch weiterhelfen können.

P.S.: Die Raucher tauchen auf, wenn eine Zeichenfolge in deinem Post auftaucht, die eben diesen Smilie ausdrückt.
mfg
john

john

Alter Hase

Beiträge: 786

Beruf: Schüler

  • Private Nachricht senden

10

04.04.2006, 21:33

Fließkommazahlen gibst du in der Informatik mit einem Punkt und nicht mit einem Komma an !
mfg
john

Werbeanzeige