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

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

21

17.05.2008, 14:54

Also so schwer kann das doch nicht sein.

Am besten fängst du mit deinem Code nochmal ganz von vorne an. Und dann überlegst du dir bei jedem Schritt ganz genau, was du machst und vor allem warum.

Die Texturkoordinaten sind (wenn du eine Kachelung willst) bei jedem Quad dieselben. Denk bei einem Terrain besser nicht in Dreiecken, sondern in Quads, dann ist das Vorgehen gleich viel klarer und du wirst den Fehler leichter finden.

Zitat

Heißt das, die texturcodinaten müssen die selbe position wie die vertices haben?


Wenn du dir jetzt 2 Dreiecke als 1 Quad vorstellst, dann kann man diese Aussage ganz einfach umsetzen. DANN müssen die Texturkoordinaten "gleich" sein. Das heisst, dass du sie RELATIV gleich ansetzt. Also von den Vertices das, was links oben ist kriegt dementsprechend die Textcoord (0 / 0) und der rechts unten kriegt (1/1). Die anderen 2 kriegst du sicher mit ein wenig überlegen selber hin.. ;)

22

17.05.2008, 15:27

Also ist an dem code noch was falsch richtig?

23

17.05.2008, 15:57

Bin den Code nochmal durchgegangen, und eigentlich ist alles richtig :(

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

24

17.05.2008, 16:32

IMHO ist dein Code völliger Mist.

Vielleicht bringt dir dieser Ansatz etwas:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    for (int count = 0; count < HEIGHT*WIDTH;count++)
    {
        //Links oben

        cv_Vertices[0+(4*count)].tu = 0.0f;
        cv_Vertices[0+(4*count)].tv = 0.0f;

        //Rechts oben

        cv_Vertices[1+(4*count)].tu = 1.0f;
        cv_Vertices[1+(4*count)].tv = 0.0f;

        //Rechts unten

        cv_Vertices[2+(4*count)].tu = 1.0f;
        cv_Vertices[2+(4*count)].tv = 1.0f;

        //Links unten

        cv_Vertices[3+(4*count)].tu = 0.0f;
        cv_Vertices[3+(4*count)].tv = 1.0f;
    }


Erwarte nicht, dass das jetzt so funktioniert,aber mach die mal ein wenig Gedanken darüber. Und vor allem gehört das in die gleiche Schlaufe, wo du auch die Vertices positionierst.

25

17.05.2008, 17:01

Ich finde das dieser Code ziehmlicher quatsch ist, denn da würde die Textur nur einer linie entlang geogen werden! :/, aber er hat mich auf eine idee gebracht :)

26

17.05.2008, 17:17

Okay, der Code hat mich jetzt auf mehrere Ideen gebracht, ich hoffe ihr könnt mir sagen welche davon die richtige ist, oderob keine richtig ist!

1. Ich muss nur am rand des terrans Texturcoordinaten seten?
2. Ich muss die Texturcoordinaten in eine Linie setzen?
3. Die Texturcoordinaten sind IMMER nur im bereich zwischen 0 und 1?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

27

17.05.2008, 17:17

Zitat von »"Dustin Braun"«

Ich finde das dieser Code ziehmlicher quatsch ist, denn da würde die Textur nur einer linie entlang geogen werden! :/, aber er hat mich auf eine idee gebracht :)


So ein Bullshit..
Du hast wohl noch nicht mal die Benutzung eines Arrays geschnallt..

EDIT:

Geh unbedingt nochmal die Grundlagen durch. Du scheinst nichts geschnallt zu haben..

tnecniv

Treue Seele

Beiträge: 164

Wohnort: BERLIN

  • Private Nachricht senden

28

17.05.2008, 17:21

Zitat von »"TrommlBomml"«


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int z = 0; z < HEIGHT-1; z++) 
{ 
    for(int x = 0; x < WIDTH-1; x++) 
    { 
        cv_Vertices[z * WIDTH + x].tu = x; 
        cv_Vertices[z * WIDTH + x].tv = y; 
        cv_Vertices[z * WIDTH + x+1].tu = x+1.0f; 
        cv_Vertices[z * WIDTH + x+1].tv = y; 
        cv_Vertices[(z+1) * WIDTH + x].tu = x; 
        cv_Vertices[(z+1) * WIDTH + x].tv = y+1.0f; 
        cv_Vertices[(z+1) * WIDTH + x+1].tu = x+1.0f; 
        cv_Vertices[(z+1) * WIDTH + x+1].tv = y+1.0f; 
    } 
}


:) nich so richtig, oder? erstmal ist doch z für die höhe zuständig, es müsste also cv_Vertices[z * HEIGHT+ x].tu = x; heißen. außerdem fürst du auf einmal y ein?! woher kommt das? du meinst doch sicher z, oder?

außerdem ist

C-/C++-Quelltext

1
2
3
4
5
6
cv_Vertices[z * WIDTH + x+1].tu = x+1.0f; 
        cv_Vertices[z * WIDTH + x+1].tv = y; 
        cv_Vertices[(z+1) * WIDTH + x].tu = x; 
        cv_Vertices[(z+1) * WIDTH + x].tv = y+1.0f; 
        cv_Vertices[(z+1) * WIDTH + x+1].tu = x+1.0f; 
        cv_Vertices[(z+1) * WIDTH + x+1].tv = y+1.0f; 


bisschen doppelt gemoppelt... da du im nbächsten schleifendurchlauf wieder die gleichen vertices beu beschreibst..

meiner meinung nach sollte also das hier vollkommen reichen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
for(int z = 0; z < HEIGHT-1; z++) 
{ 
    for(int x = 0; x < WIDTH-1; x++) 
    { 
        cv_Vertices[z * HEIGHT+ x].tu = x; 
        cv_Vertices[z * HEIGHT+ x].tv = z; 
    } 
}
Sagt der igel zu dem dachs:
willst du größer sein, dann wachs!
- alte Fritz weisheit

tnecniv

Treue Seele

Beiträge: 164

Wohnort: BERLIN

  • Private Nachricht senden

29

17.05.2008, 17:25

Zitat von »"Dustin Braun"«

Okay, der Code hat mich jetzt auf mehrere Ideen gebracht, ich hoffe ihr könnt mir sagen welche davon die richtige ist, oderob keine richtig ist!

1. Ich muss nur am rand des terrans Texturcoordinaten seten?
2. Ich muss die Texturcoordinaten in eine Linie setzen?
3. Die Texturcoordinaten sind IMMER nur im bereich zwischen 0 und 1?


1. FALSCH
2. ????
3. FALSCH

oh mann, auch wenn drakon vielleicht etwas persönlich wirkt, kann ich ihn gut verstehen. hast du nicht auch den ehrgeiz das selber zu machen, bzw. zu verstehen? ich hab den eindruck du verstehst höchstens 1/10 von dem, was du schreibst...
Sagt der igel zu dem dachs:
willst du größer sein, dann wachs!
- alte Fritz weisheit

30

17.05.2008, 17:26

Punkt1 und punkt2 Wusste ich ja, das hatte ich in meinem Code ja selber geändert...

Das hatte ich ja nit so gemacht :)

Quellcode

1
2
3
4
5
6
7
8
            for(int z = 0; z < HEIGHT-1; z++)
{
    for(int x = 0; x < WIDTH-1; x++)
    {
        cv_Vertices[z * HEIGHT+ x].U = x;
        cv_Vertices[z * HEIGHT+ x].V = z;
    }
} 


Stimmt, da hast du recht ..., Aber das ändert nix daran das das immernoch so beschisen aussieht wie vorher^^


EDIT::::::::::::

@tnecniv

Warum bist du der meinung das ich das nicht verstehe? Wegen dem code wo du denkst das ich den so benutze wie er gepostet wurde? TrommlBomml hat den Code gepostet, nichtich, und ich habe ihn auch nie so benutzt wie er ihn gepostet hat, ich hatte den umgeändert!

EDIT::::::::::::

Un hätte ich das y, das da ja so spurlos aufgetacht ist wirklich da stehen lassen, würde ich ja wohl ein fehler beim debuggen bekommen, das y nicht deklariert ist, oder etwa nicht?

EDIT:::: (schon wida)

@drakon, dann erklär mir mal, warum ich die benutzung von arrays noch nicht verstanden haben sollte? Ein Array hat nunmal einen wer von 0 bis sonst was, und ein array wird auch nicht automatisch zu einem viereck, es ist ein array! mehrere variablen, mit dem selben namen, die man aber einzelnd ansprchenkann, in dem man die kennnummer dieser variable angiebt! Bitte erzähl nicht so nen scheiß, das ich simple sachen von c++ noch nicht beherschen würde! So ie es mir rüber kommt hast du wa falsch verstanden was arrays sind, oder versuchst dich nur zu entschuldigen das dein code einfach quatsch ist... denn 1. wird da kein viereckt drauß gemact sondern eine linie, die nicht mals sichtbar ist, weil sie keine breite hat! und 2. leuft die schleife viel öfter durch als wie vielevertices ich habe!



Ich versuche, nein ich will das ja verstehen, aber soll ich raten und raten und irgent was eintippen und hoffen das es funktioniert? Es will einfach nicht funktionieren, ich bin mit meinem latein am ende und die tuts die ich gefunden habe helfen mir leider auch nicht weiter!

Werbeanzeige