JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=a1da5ff42377a893d074e2e2d59f0124Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

D3D-2DSpriteklasse will net
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 17:40    Titel: Antworten mit Zitat

Wenn ich XYZ nehem funktinoirt es leider nicht. (JAHA ich habe das RHW aus dem Vertexformat genommen...)
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 32
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 17:50    Titel: Antworten mit Zitat

Was funktioniert nicht?
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 18:14    Titel: Antworten mit Zitat

es wird nix angezeigt wenn ich statt "XYZW" oder "XYZRHW" "ZXY" benutze.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 32
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 18:21    Titel: Antworten mit Zitat

Dann hast du irgendwas falsch gemacht.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 18:54    Titel: Antworten mit Zitat

Jop, außerdem die Berechnung für die Orthogonale Matrix ist absoluter Murks und ich seh keine richtige viewmatrix.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 22:05    Titel: Antworten mit Zitat

@Patrick
hallo? Könntets du dich bitte mal etwas genauer artikulieren???
Deine Antwort hört sich für mich ungefähr so an: "Tja, deine Vorahnung ist wahr, du hast was falsch gemacht, ist aber auch kein wunder weil du sowieso n Idiot bist."
@Oliver
Deine Antowrt ist auch nicht besser, wenns nciht funktinoiert hat man meistens was falsch gemacht...

wieder @ Patrick
Könntest du mir bitte sagen was an der Matriz berechnung falsch ist? Viewmatrix hab ich ja, mag ja sein das die falsch ist, deshalb hab ich die ja shcon extra im ersten Post beide aufgeführt, weil ich schon ahnte das es ein Matriz-Problem ist. Sag doch einfach,"Zeile so und so muss xyz heißen, da dann sollte es funktionieren". Damit wäre mir schnell geholfen, es gäb nicht so viele unnötige Posts. Ich hab wirklich bald das Gefühl das du einfach nur zeigen willst das du mal wieder der beste von allen bist, andere grundlos beleidigen willst, damit du vielleicht noch ein wenig besser dastehst und es nicht nötig hast andern Leuten zu helfen. Solche können wir hier im Forum nciht gebrauchen. Du solltest lieber versuchen durch Freundlihckeit und Hilfsbereitschaft auszufallen statt durch übertriebene Aroganz.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 22:19    Titel: Antworten mit Zitat

CPP:
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Erstellt eine Orthogonale Projektion! ACHTUNG: NUR PROVISIORISCH!
// ///////////////////////////////////////////////////////////////////////////
void direct3d::createOrtho (unsigned long width, unsigned long height, float nearPlane, float farPlane)
{
    direct3d_device_->SetRenderState (D3DRS_LIGHTING, false);

        // Temporäre Matrix erstellen
    matrix temp;

        // Orthogonale Projektion erstellen
    temp.zero();
    temp._11 = 2.0f/static_cast<float>(width);
    temp._22 = 2.0f/static_cast<float>(height);
    temp._33 = 1.0f/(farPlane-nearPlane);
    temp._43 = nearPlane/(nearPlane-farPlane);
    temp._44 = 1.0f;

        // Projektionsmatrix setzen
    direct3d_device_->SetTransform (D3DTS_PROJECTION, reinterpret_cast<D3DMATRIX*>(&temp));

        // Es muss eine frische Matrix her mit der wir die VIEW-Matrix erstellen können
    temp.identity();
    temp._22 = -1.0f;
    temp._41 = -(static_cast<float>(width)*0.5f);
    temp._42 =  (static_cast<float>(height)*0.5f);
    temp._43 = nearPlane+0.1f;

        // Viewmatrix setzen
   direct3d_device_->SetTransform (D3DTS_VIEW, reinterpret_cast<D3DMATRIX*>(&temp));
}

// ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Erstellt eine Projektionsmatrix!
// ///////////////////////////////////////////////////////////////////////////
void direct3d::createProjection (float fov, float aspect, float nearPlane, float farPlane)
{
    if (abs<float>(farPlane-nearPlane) < epsilon<float>::value)
        return;
    if (abs<float>(sin<float>(deg2rad<float>(fov)/2)) < epsilon<float>::value)
        return;

        // Zwischenwerte berechnen
    const float cosin  = cos<float>(deg2rad<float>(fov)/2) / sin<float>(deg2rad<float>(fov)/2);
    const float farinv = farPlane / (farPlane - nearPlane);

        // Temporäres Objekt
    matrix temp;

        // Matrix verändern
    temp._11 = aspect*cosin;
    temp._22 = 1.0f*cosin;
    temp._33 = farinv;
    temp._34 = 1.0f;
    temp._43 = -farinv*nearPlane;
    temp._44 = 0.0f;

        // Projektionsmatrix setzen
    direct3d_device_->SetTransform (D3DTS_PROJECTION, reinterpret_cast<D3DMATRIX*>(&temp));
}

Du wirst nur die Orthofunktion gebrauchen, diese setzt automatisch auch die VIEW-Matrix von der du dann später die ruhe hast.

So kannste dann rendern:
CPP:
void menurect::render (long x, long y, unsigned long w, unsigned long h, unsigned long color)
{
        // Testen ob VertexBuffer schon erstellt wurde
    if (!vb_)
        return;

        // Temporärer Kram
    static vertex rect[6];  // Eckpunkte des Rechtecks
    static matrix trans;    // Transformationsmatrix

        // Das Rechteck erstellen
    rect[0] = vertex ( 0.0f,                         0.0f,                      0.5f, color, 0.0f, 0.0f);
    rect[1] = vertex ( static_cast<float>(w-6),     0.0f,                      0.5f, color, 1.0f, 0.0f);
    rect[2] = vertex ( static_cast<float>(w),       6.0f,                      0.5f, color, 1.0f, 0.0f);
    rect[3] = vertex ( static_cast<float>(w),       static_cast<float>(h),      0.5f, color, 1.0f, 1.0f);
    rect[4] = vertex (  0.0f,                       static_cast<float>(h),      0.5f, color, 0.0f, 1.0f);

        // Pointer für Speicherbereich
    void* vertices = NULL;

        // Daten kopieren
    vb_->Lock (0, sizeof(rect), (void**)&vertices, D3DLOCK_DISCARD);
    memcpy (vertices, rect, sizeof(rect));
    vb_->Unlock ();

        // Translationsmatrix berechnen
    trans.translate (vector(static_cast<float>(x), static_cast<float>(y), 0.0f), true);

        // Translation durchführen
    core::direct3d::getInstance().direct3d_device_->SetTransform (D3DTS_WORLD, reinterpret_cast<D3DMATRIX*>(&trans));

        // Alphablending aktivieren
    core::direct3d::getInstance().setRenderState        (D3DRS_ALPHABLENDENABLE, true);
    core::direct3d::getInstance().setRenderState        (D3DRS_SRCBLEND,   D3DBLEND_SRCALPHA);
    core::direct3d::getInstance().setRenderState        (D3DRS_DESTBLEND,  D3DBLEND_INVSRCALPHA);
    core::direct3d::getInstance().setTextureStageState  (0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
       
        // Rechteck rendern
    core::direct3d::getInstance().direct3d_device_->SetFVF          (D3D_FVF);
    core::direct3d::getInstance().direct3d_device_->SetStreamSource (0, vb_, 0, sizeof(vertex));
    core::direct3d::getInstance().direct3d_device_->DrawPrimitive   (D3DPT_TRIANGLEFAN, 0, 3);


        // Einen schönen stylischen Rahmen erstellen
    rect[0] = vertex ( 0.0f,                    0.0f,                   0.5f, 0xDF3F90FF, 0.0f, 0.0f);
    rect[1] = vertex ( static_cast<float>(w-6), 0.0f,                   0.5f, 0xDF3F90FF, 1.0f, 0.0f);
    rect[2] = vertex ( static_cast<float>(w),   6.0f,                   0.5f, 0xDF3F90FF, 1.0f, 1.0f);
    rect[3] = vertex ( static_cast<float>(w),   static_cast<float>(h),  0.5f, 0xDF3F90FF, 1.0f, 1.0f);
    rect[4] = vertex ( 0.0f,                    static_cast<float>(h),  0.5f, 0xDF3F90FF, 1.0f, 1.0f);
    rect[5] = vertex ( 0.0f,                    0.0f,                   0.5f, 0xDF3F90FF, 1.0f, 1.0f);

        // Daten kopieren
    vb_->Lock (0, sizeof(rect), (void**)&vertices, D3DLOCK_DISCARD);
    memcpy (vertices, rect, sizeof(rect));
    vb_->Unlock ();

        // Rahmen rendern
    core::direct3d::getInstance().direct3d_device_->DrawPrimitive (D3DPT_LINESTRIP, 0, 5);
        // Alphablending deaktivieren
    core::direct3d::getInstance().setRenderState (D3DRS_ALPHABLENDENABLE, false);
}


Vertexstruktur:
CPP:
// ###########################################################################
// Datei:        vertex.h
// ###########################################################################
// Autor:        Patrick Ullmann
// Erstellt:     24.09.2005
// Änderungen:   24.09.2005 (Patrick)  Datei erstellt
// ###########################################################################
// Beschreibung: Allgemeine Vertexstruktur

#if !defined(__vertex_h__)
#define __vertex_h__

// I N C L U D E S ###########################################################
    // Noch keine

// D E F I N I T I O N E N ###################################################
const unsigned long D3D_FVF = 0x002 | 0x040 | 0x100;

// S T R U K T U R E N #######################################################
class vertex
{
public:
        // C'tor und D'tor
    vertex (void)
    : x(0.0f), y(0.0f), z(0.0f), color(0xFFFFFFFF), u(0.0f), v(0.0f) {}
    vertex (float x_, float y_, float z_, unsigned long color_, float u_, float v_)
    : x(x_), y(y_), z(z_), color(color_), u(u_), v(v_) {}
    ~vertex (void) {}

        // Position
    float           x;
    float           y;
    float           z;

        // Farbe
    unsigned long   color;
           
        // Texturkoordinaten
    float           u;
    float           v;
};

#endif


Fertig.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 22:19    Titel: Antworten mit Zitat

Achja: begin und endscene net vergessen sowie licht aus.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 03.11.2005, 22:40    Titel: Antworten mit Zitat

ok, ich habs geschafft, mir die Marizen von dir auseinander zu fummeln, und mit meinen zu Vergleichen und folgendes gefunden:
CPP:
1.0f/(1.0f, 0.1f) //falsch!
1.0f/(1.0f-0.1f)//richtig

0.1 //neraplane+0.1, falsch
0.2 //richtig


hatte halt definiert far plan=1 undnera plane =0.1
jetzt funktinoiert es recht gut. Beim ersten frag ich mich, wieso es keine fehler gab, ich wüsste nicht als was man das interpretiern sollte.

Aber wie es aussihet, funktinoiert jetzt alles mit den Matrizen perfekt, Skalieren und Verchieben hat prima geklappt. Dank an alle die mir geholfen haben, die Fehler zu finden.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
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

Impressum