QVector3D und OpenGL: Float vs Double
-
Hallo an alle,
ich möchte eine Qt/OpenGL-Anwendung schreiben. Ich habe noch nicht so viel Erfahrung mit beidem und beisse mich dementsprechend durch verschiedene Tuts
und Beispiele...Das Beispiel, auf dass ich mein Hauptaugenmerk gelegt habe, befindet sich hier:
http://doc.qt.nokia.com/4.7/opengl-hellogl.html
bzw. fehlt da noch das zu zeichnende Objekt, da befinden sich source und header
hier:Auf den Inhalt der QT-Logo class zielt auch meine Frage ab...
In "qt_logo.cpp" gibt es ein Hilfs-struct "Geometry" wie folgt:
53 struct Geometry 54 { 55 QVector<GLushort> faces; 56 QVector<QVector3D> vertices; 57 QVector<QVector3D> normals; 58 void appendSmooth(const QVector3D &a, const QVector3D &n, int from); 59 void appendFaceted(const QVector3D &a, const QVector3D &n); 60 void finalize(); 61 void loadArrays() const; 62 };
und insbesondere die Funktion loadArrays
97 void Geometry::loadArrays() const 98 { 99 glVertexPointer(3, GL_FLOAT, 0, vertices.constData()); 100 glNormalPointer(GL_FLOAT, 0, normals.constData()); 101 }
Das sind nach meinem Verständnis die arrays, auf dessen Basis
nachher gezeichnet wird. Nun sind aber die member vertices und normals
QT-Objekte der Klasse QVector3D. Ich kann zwar in die Klasse nicht reinschauen,
aber es wird dort immer qreal zurückgegeben, ich gehe irgendwie davon aus,
dass dann auch qreal drin ist. Und da ich weiterhin annehme, dass
mein Lappi kein ARM-Rechner ist , erwarte ich den Typ "double" für qreal.
Dennoch wird den beiden gl-Funktionen in loadArrays der Typ-Hinweis GL_FLOAT
mitgegeben. Das klappt zwar, aber warum klappt das oder was habe ich übersehen?Danke
Rahul
-
Die QVector3D Klasse enthält 3 float's. ->
qvector3d.h
class QVector3D { // allerlei Methoden private: float xp, yp, zp; }
D.h. das
constData()
liefert die Adresse auf das erste Memberfloat xp
des erstenQVector3D
Der QVector hat in seinem Datenfeld im Prinzip folgendesfloat x1p, y1p, z1p; float x2p, y2p, z2p; float x3p, y3p, z3p; ...
Genau das, was
glVertexPointer
,glNormalPointer
erwartet.
-
Hmm, ja danke für die Antwort,
ist das denn Usus, die Genauigkeit
an dieser Stelle zu verkürzen(von double/qreal nach float)?
-
Rahul0891 schrieb:
Hmm, ja danke für die Antwort,
ist das denn Usus, die Genauigkeit
an dieser Stelle zu verkürzen(von double/qreal nach float)?Glaub nicht, dass dies bei Grafikberechnungen eine Rolle spielt. Ein Pixel hin- oder her juckt nicht. Vor allem ältere System haben da eher einen Performancevorteil.