Verständnissfrage zu Vertex

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Verständnissfrage zu Vertex

Beitrag von nicolaus »

muß jetzt mal ganz dumm fragen.
wie bekomme ich aus x und y koordinaten (z.b. x=51.12 , y=12.37) in PB nen Vertex?
Sprich wie muß ich das programmiertechnisch machen das ich ner OpenGL funktion dann nen Vertex übergeben kann?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

glVertex2f_()?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

nee leider nich das is ja nich das prob.
ich brauch das für die funktionen wie z.b. gluTessVertex() und da will die function nen vertex des eckpunktes übergeben haben.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

nicolaus hat geschrieben:nee leider nich das is ja nich das prob.
ich brauch das für die funktionen wie z.b. gluTessVertex() und da will die function nen vertex des eckpunktes übergeben haben.
Da brauchst du entweder ne Struktur oder nen Array mit Doubles:
gluTessVertex
The gluTessVertex function specifies a vertex on a polygon.

void gluTessVertex(
GLUtesselator *tess,
GLdouble coords[3],
void *data
);
Parameters
tess
The tessellation object (created with gluNewTess).
coords
The location of the vertex.
data
An pointer passed back to the program with the vertex callback (as specified by gluTessCallback).
Remarks
The gluTessVertex function describes a vertex on a polygon that the user is defining. Successive gluTessVertex calls describe a closed contour. For example, to describe a quadrilateral, call gluTessVertex four times. You can only call gluTessVertex between gluTessBeginContour and gluTessEndContour.

The data parameter normally points to a structure containing the vertex location, as well as other per-vertex attributes such as color and normal. This pointer is passed back to the program through the GLU_VERTEX callback after tessellation (see gluTessCallback).

Example
The following describes a quadrilateral with a triangular hole:

gluTessBeginPolygon(tess, NULL);
gluTessBeginContour(tess);
gluTessVertex(tess, v1, v1);
gluTessVertex(tess, v2, v2);
gluTessVertex(tess, v3, v3);
gluTessVertex(tess, v4, v4);
gluTessEndContour(tess);
gluNextContour(tess, GLU_INTERIOR);
gluTessBeginContour(tess);
gluTessVertex(tess, v5, v5);
gluTessVertex(tess, v6, v6);
gluTessVertex(tess, v7, v7);
gluTessEndContour(tess);
gluTessEndPolygon(tess);
Requirements
Windows NT/2000: Requires Windows NT 3.5 or later.
Windows 95/98: Requires Windows 95 or later. Available as a redistributable for Windows 95.
Header: Declared in Glu.h.
Library: Use Glu32.lib.

See Also
gluNewTess, gluTessBeginContour, gluTessBeginPolygon, gluTessCallback, gluTessEndContour, gluTessNormal, gluTessProperty

Built on Tuesday, August 22, 2000
Zuletzt geändert von DarkDragon am 08.10.2005 16:55, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

ich brauch das für die funktionen wie z.b. gluTessVertex() und da will die function nen vertex des eckpunktes übergeben haben.
Ein Vertex eines Eckpunktes? Der Eckpunkt IST das Vertex. Ich versteh nicht wirklich was du willst. Am besten beschreibst du dein Problem nochmal in Ruhe und genau, dass jeder weiß was gemeint ist.

Allgemein: Was zu beachten ist, bei OpenGL liegt der Koordinatenursprung standardgemäß unten links im Eck. Bei PB und den meisten Windows-Anwendungen liegt er oben links. Daher müsstest du von deinen Koordinaten, wenn sie von oben links ausgehen, umrechnen auf die untere linke Ecke. Das bringt dir dann aus einer Screenkoordinate eine Vertex-Koordinate, aber ist es das was du wolltest? So ganz weiß ich noch nicht was du willst.^^
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

naja zur zeit versuch ich das so:
ich habe 2 Strukturen und ne LinketList

Code: Alles auswählen

Structure FIR_VERTEX
  x.f
  y.f
  z.f
EndStructure
Structure FIR
  lat.f
  lon.f
  id.l
  Region.s
  Vertex.FIR_VERTEX[0]
EndStructure

NewList FIR.FIR()
beim einlesen der Daten aus dem file schreib ich die daten (lat, lon) in die structure. Das x und y in der FIR_VERTEX ist gleich x=lat und y=lon. Das z ist immer gleich 0.0 (wird aber wohl in nem Vertex Array gebraucht so weit ich weis)

Anhand der id aus der Structure FIR weis ich wann ein bereich aufhört (was später ein polygon wird) und wann der nächste bereich anfängt (das nächste neue polygon).

Mit den gluTess functionen möchte ich nun ne tessalierung über das Polygon laufen lassen das ich nich mehr der hässlichen fehler bekomme die ich hier schon mal gepostet hatte.

Jetzt weis ich nur nich wie ich bei z.b. gluTessVertex das Array aus der FIR structure übergeben muß.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Sunny hat geschrieben:
Allgemein: Was zu beachten ist, bei OpenGL liegt der Koordinatenursprung standardgemäß unten links im Eck. Bei PB und den meisten Windows-Anwendungen liegt er oben links. Daher müsstest du von deinen Koordinaten, wenn sie von oben links ausgehen, umrechnen auf die untere linke Ecke. Das bringt dir dann aus einer Screenkoordinate eine Vertex-Koordinate, aber ist es das was du wolltest? So ganz weiß ich noch nicht was du willst.^^
Das mit dem eckpunkt is schon klar. Die sache wird soweit ja auch richtig gerendert nur habe ich bei den Polygonen das prob das die nicht konvexe polygone sind und es so zu sehr hässlichen fehlern kommt bei der darstellung. Um dieses prob zu lösen gibts zwei wege.
1. Ne triangulierung drüber laufen lassen. Dafür habe ich leider keine formel und kenne mich erlich gesagt auch absolut nich aus damit.
2. Mit den gluTess funktionen das polygon tessalieren (ist wohl das selbe wie triangulieren nur schon in glu drin???)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

nicolaus hat geschrieben:wird aber wohl in nem Vertex Array gebraucht so weit ich weis
Kann man umstellen in den Parametern soviel ich weiß.
nicolaus hat geschrieben:Mit den gluTess functionen möchte ich nun ne tessalierung über das Polygon laufen lassen das ich nich mehr der hässlichen fehler bekomme die ich hier schon mal gepostet hatte.

Jetzt weis ich nur nich wie ich bei z.b. gluTessVertex das Array aus der FIR structure übergeben muß.
x_low.f
x_high.f
y_low.f
y_high.f
z_low.f
z_high.f

Und dann nimmst du remi_meiers optimierer-zusatz lib mit Doubles und convertierst deine floats in doubles und speicherst sie in solcher form. Dann übergibst du dem gluTessVertex den Pointer darauf.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

DarkDragon hat geschrieben: x_low.f
x_high.f
y_low.f
y_high.f
z_low.f
z_high.f

Und dann nimmst du remi_meiers optimierer-zusatz lib mit Doubles und convertierst deine floats in doubles und speicherst sie in solcher form. Dann übergibst du dem gluTessVertex den Pointer darauf.
äh sorry das versteh ich gerade nich ganz :o
was ist jetzt x_low.f und x_heigh.f u.s.w.?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

nicolaus hat geschrieben:äh sorry das versteh ich gerade nich ganz :o
was ist jetzt x_low.f und x_heigh.f u.s.w.?
Also, du speicherst die daten momentan in 3 Floats(32 bit = 4 byte), du benötigst aber 3 Doubles(64 bit = 8 byte), deshalb baust du jetzt einen Array auf mit dieser Struktur:

Code: Alles auswählen

x_low.f
x_high.f
y_low.f
y_high.f
z_low.f
z_high.f
Darin werden dann die Floats nach Doubles konvertiert(dazu gibts entsprechende Funktionen) und den Array übergibst du dann an die Funktion.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten