Seite 1 von 2
Verständnissfrage zu Vertex
Verfasst: 08.10.2005 15:25
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?
Verfasst: 08.10.2005 16:34
von DarkDragon
glVertex2f_()?
Verfasst: 08.10.2005 16:38
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.
Verfasst: 08.10.2005 16:46
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
Verfasst: 08.10.2005 16:49
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.^^
Verfasst: 08.10.2005 16:56
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ß.
Verfasst: 08.10.2005 17:00
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???)
Verfasst: 08.10.2005 17:01
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.
Verfasst: 08.10.2005 17:05
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
was ist jetzt x_low.f und x_heigh.f u.s.w.?
Verfasst: 08.10.2005 17:16
von DarkDragon
nicolaus hat geschrieben:äh sorry das versteh ich gerade nich ganz
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:
Darin werden dann die Floats nach Doubles konvertiert(dazu gibts entsprechende Funktionen) und den Array übergibst du dann an die Funktion.