ich habe:SharpGL: Es können nicht alle Linien aus Liste ziehen
float[,] nodesN = null; //indexes:
//number of node;
//value index 0->x, 1->y, 2->temperature
int[,] elements = null; //indexes:
//indexof element (triangle)
//1, 2, 3 - vertexes (from nodesN)
List<Pair> edges = null; //Pair is a class containing two int values which are
//indexes of nodesN
und Funktion, die angeblich tun alle Elemente und Kanten auf SharpGL.OpenGLCtrl
private void openGLCtrl1_Load(object sender, EventArgs e)
{
gl = this.glCtrl.OpenGL;
gl.ClearColor(this.BackColor.R/255.0f,
this.BackColor.G/255.0f,
this.BackColor.B/255.0f, 1.0f);
gl.Clear(OpenGL.COLOR_BUFFER_BIT | OpenGL.DEPTH_BUFFER_BIT);
}
private void openGLControl1_OpenGLDraw(object sender, PaintEventArgs e)
{
gl.Clear(OpenGL.COLOR_BUFFER_BIT | OpenGL.DEPTH_BUFFER_BIT);
gl.LoadIdentity();
gl.Translate(0.0f, 0.0f, -6.0f);
if (!draw) return;
bool drawElements = false;
if (drawElements)
{
gl.Begin(OpenGL.TRIANGLES);
for (int i = 0; i < elementNo; i++)
{
for (int j = 0; j < 3; j++)
{
float x, y, t;
x = nodesN[elements[i, j], 0];
y = nodesN[elements[i, j], 1];
t = nodesN[elements[i, j], 2];
gl.Color(t, 0.0f, 1.0f - t);
gl.Vertex(x, y, 0.0f);
}
}
gl.End();
}
gl.Color(0f, 0f, 0f);
gl.Begin(OpenGL.LINES);
//for(int i=edges.Count-1; i>=0; i--)
for(int i=0; i<edges.Count; i++)
{
float x1, y1, x2, y2;
x1 = nodesN[edges[i].First, 0];
y1 = nodesN[edges[i].First, 1];
x2 = nodesN[edges[i].Second, 0];
y2 = nodesN[edges[i].Second, 1];
gl.Vertex(x1, y1, 0.0f);
gl.Vertex(x2, y2, 0.0f);
}
gl.End();
}
Aber es ziehen nicht alle Kanten. Wenn ich drawElements
ändere, zeichnet es unterschiedliche Anzahl von Kanten. Das Ändern von for(int i=0; i<edges.Count; i++)
zu for(int i=edges.Count-1; i>=0; i--)
zeigt, dass esges korrekt generiert werden, aber sie werden nicht gezeichnet.
Bilder:
for(int i=0; i<edges.Count; i++)
drawElements=false
http://img225.imageshack.us/img225/9295/noup.jpg
for(int i=edges.Count-1; i>=0; i--)
drawElements=false
http://img828.imageshack.us/img828/9595/nodown.jpg
for(int i=0; i<edges.Count; i++)
drawElements=true
http://img64.imageshack.us/img64/4929/withup.jpg
for(int i=edges.Count-1; i>=0; i--)
drawElements=true
http://img833.imageshack.us/img833/9167/withdown.jpg
Was mit diesem ist falsch? Wie kann ich alle Kanten zeichnen?
EDIT:
Es macht nichts, ließ ich SharpGL und schrieb genau den gleichen Code in OpenTK. Es funktioniert hervorragend, ohne dass ich mich frage, was falsch ist. Das war ein guter Ruf, denn SharpGL verbraucht enorm viel Speicher.
Nice shot, aber ich würde überrascht sein ... Warum sollte der Fehler erscheinen auch ohne das Rechteck im Hintergrund? Und mit dem Rechteck, bei Tiefen-Test auf LEQUAL gesetzt, warum würde eine konsistente lineare Interpolation von nur Nullen irgendetwas anderes als 0 in der Z-Koordinate ergeben? – Kos
Manchmal entstehen numerische Fehler aufgrund numerischer Instabilität von Algorithmen. Da OpenGL T & L-Pipeline viele Transformationen enthält, bevor etwas den Farbpuffer trifft, gibt es viel zu tun. Und ich bin sicher, OpenGL verwendet keine fortlaufenden Brüche oder irgendwelche numerisch superstabilen Geräte, da es leistungsorientiert ist. Sie wissen, etwas in der Linie: 0,2 + 0,6 = 0,8000007. – Rekin
Könnten Sie auch Initiativcode einbeziehen? Der eine enthält Projektionsmatrix. – Rekin