tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
7266
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von mamarulez
    mamarulez mamarulez ist offline Mitglied Bronze
    Registriert seit
    Nov 2003
    Ort
    Bonn (NRW)
    Beiträge
    41
    Hallo,

    ich hoffe ich habe hier im richtigen Bereich geposted...

    ich schreibe im Moment eine eigene, einfache 3D-Engine, die soweit auch wunderbar funktioniert. Doch habe ich ein kleines Problem: Um Polygone mit meiner Engine auf den Bildschirm zeichnen zu können, benutze ich eine einfache Funktion, die eine Linie zwischen zwei Koordinaten ( nämlich X und Y ) zeichnet. Diese Funktion zeichnet also zweidimensional, ich habe allerdings in meiner Engine eine weitere ( Tiefen- ) Koordinate Z. Jetzt geht es darum, in einer beziehungsweise zwei Funktionen dreidimensionale Koordinaten, die ich sonst überall in der Engine selbstverständlich verwende, unmittelbar vor dem Zeichnen der Polygone in zweidimensionale umzuwandeln. Ich habe ungefähr einen Tag nach dem richtigen Algoritmus gesucht, aber nichts gefunden und mittlerweile raucht mir der Kopf so von diesen beiden Funktionen, dass ich gar nichts mehr verstehe...

    Hier sind die Funktionen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    function TranslateCoordinatesX ( int pointx, int pointz )
    // translates three-dimensional points with x, y and z coordinates to two dimensional
    // ones with only x and y coordinates
    {
        // define the new x-coordinate
        int pointnewx;
        
        // translate the coordinates
        if ( pointx < 160 )
            pointnewx = pointx + pointz;
        else if ( pointx > 160 )
            pointnewx = pointx - pointz;
        else if ( pointx == 160 )
            pointnewx = pointx;
        
        // return the new x-coordinate
        return pointnewx;
    }
    Das ist die Funktion, die die im Parameter überlieferten dreidimensionalen X und Z Koordinaten in eine zweidimensionale X-Koordinate umwandelt oder besser gesagt umwandeln sollte. Sie gibt den neuen X-Wert wieder zurück.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    function TranslateCoordinatesY ( int pointy, int pointz )
    // translates three-dimensional points with x, y and z coordinates to two dimensional
    // ones with only x and y coordinates
    {
        // define the new y-coordinate
        int pointnewy;
        
        // translate the coordinates
        if ( pointy < 100 )
            pointnewy = pointy + pointz;
        else if ( pointy > 100 )
            pointnewy = pointy - pointz;
        else if ( pointy == 160 )
            pointnewy = pointy;
        
        // return the new y-coordinate
        return pointnewy;
    }
    Diese Funktion sollte das gleiche für Y-Koordinaten tun.

    ZUR ERKLÄRUNG: Ich bin mir bewusst, dass der Algoritmus im Moment falsch ist. Was er tut ist, er addiert den Z-Wert zu dem X- oder Y-Wert wenn der Punkt links oder oberhalb vom Zentrum des Bildschirms ist. Wenn nicht, dann subtrahiert er den Wert und wenn das Objekt genau im Zentrum des Screens liegt, dann ändert die Tiefen-Koordinate gar nichts.

    Kann mir irgendjemand helfen? Mache ich einen Denkfehler oder bin ich einfach nur zu blöde den richtigen Weg zu finden?

    Danke,

    Jan.
    Geändert von mamarulez (13.05.05 um 15:59 Uhr)
     

  2. #2
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Soll es Isometrisches 3d sein oder mit Zentralpunkt ?
    Bei isometrischem 3d bleibt alles linear, also zB x=x+0.1*z und y=y+0.5*z

    Hier Links zu 3d-Linien etc.
    Bresenham3d 2.Beispiel 3.Beispiel

    Ah hier noch ein 3D-FAQ für Engines:
    http://olli.informatik.uni-oldenburg...ow4/page1.html
    mfg chmee
    Geändert von chmee (23.05.05 um 15:00 Uhr)
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  3. #3
    Avatar von mamarulez
    mamarulez mamarulez ist offline Mitglied Bronze
    Registriert seit
    Nov 2003
    Ort
    Bonn (NRW)
    Beiträge
    41
    Danke für die Hilfe, aber ich habe schon einiges an Antworten in anderen Foren erhalten, in denen ich einen ähnlichen Thread erstellte, nachdem hierauf mehrere Wochen keine Antwort kam.

    Zur Vollständigkeit: Man muss die Koordinaten ganz einfach durch Z teilen...

    Danke für die Antwort, aber es würde helfen, wenn demnächst etwas schneller geantwortet wird...
     

  4. #4
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Sorry, tümmele mich in anderen Teilen dieser Seite rum..

    Weiterhin viel Erfolg und Glück

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

Ähnliche Themen

  1. Koordinaten umrechnen
    Von LukeS im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 12.12.06, 15:32
  2. Koordinaten
    Von MiRaMC im Forum Java
    Antworten: 5
    Letzter Beitrag: 07.05.06, 18:25
  3. Koordinaten
    Von andulus im Forum PHP
    Antworten: 3
    Letzter Beitrag: 18.09.05, 21:21
  4. IP bzw GPS koordinaten....
    Von mille im Forum Internet, DSL & Flatrate
    Antworten: 1
    Letzter Beitrag: 13.07.03, 14:07
  5. x und y-koordinaten
    Von Dracaelius im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 10.11.02, 22:20