da hab ich schon mit rumgespielt
, ging auch ganz gut, bis auf das das so erzeugte
Mesh viel dunkler war, als Kugeln die ich mit createSphereSceneNode erstellt hab, woran
liegt das ? Muss ich in Anim8or noch mehr machen ausser nur die Kugel zu erstellen, subdivide
und dann export als Mesh ? NORMALIZE_NORMALS Flag hab ich auf true gesetzt, daran
kanns also ned liegen, ist bestimmt nur was ganz dummes nur ich komm ned drauf
Übrigens bin ich bei meinem 3D Kreis weitergekommen, bestimmt nicht die komfortabelste
Funktion aber sie funzt
Und da ich mich die letzten beiden Tage nur damit rumgeplagt
hab und nun endlich ne Lösung hab poste einfach mal den Quellcode:
(hab noch nirgends zu dem Kreisthema was brauchbares gefunden, weder hier noch im
engl. Irrlicht Forum, hoffe das den Code vielleicht auch mal wer anders brauchen kann
Code:
enum PLANE
{
XY = 0,
XZ = 1,
YZ = 2
};
void draw_circle3D(vector3df c, PLANE plane, f64 rot_x, f64 rot_y, f64 rot_z,
SColor color, f32 radius, u8 smoothness)
{
vector3df start, end, // Start und Endpunkt einer Linie
u, v; // Spannvektoren der Kreisebene
switch (plane) // Spannvektoren für den Einheitskreis
{ // in der gewählten Ebene erzeugen
case XY: u = vector3df(1,0,0);
v = vector3df(0,1,0);
break;
case XZ: u = vector3df(1,0,0);
v = vector3df(0,0,1);
break;
case YZ: u = vector3df(0,1,0);
v = vector3df(0,0,1);
break;
}
// Rotation der Ebenenvektoren auf den gewählten Winkel
u.rotateYZBy(rot_x, vector3df(0,0,0));
u.rotateXZBy(rot_y, vector3df(0,0,0));
u.rotateXYBy(rot_z, vector3df(0,0,0));
v.rotateYZBy(rot_x, vector3df(0,0,0));
v.rotateXZBy(rot_y, vector3df(0,0,0));
v.rotateXYBy(rot_z, vector3df(0,0,0));
// Radius setzen
u *= radius;
v *= radius;
// smoothness = Anzahl der Linien aus denen der Kreis gezeichnet ist, k = Teilwinkel für jede Linie
f32 k = (360.f / smoothness);
for (f32 i=0; i <= smoothness-1; i++)
{
// Start und Endpunkt der i-ten Linie berechnen
start = c + u*cos(DEGTORAD*(i*k)) + v*sin(DEGTORAD*(i*k));
end = c + u*cos(DEGTORAD*((i+1)*k)) + v*sin(DEGTORAD*((i+1)*k));
driver->draw3DLine(start, end, color); // und malen ;)
}
}
so habs auch ein wenig dokumentiert, ich denke es ist nicht schwer zu verstehen.
N Dank geht an mYthos ausm matheboard.de, von dem hab ich nämlich heut die schicke
Parameterdarstellung für einen Kreis in 3D geklaut
X = M + U*cos(t) + V*sin(t)M = Mittelpunkt
U, V = Sind die Vektoren die die Ebene aufspannen in der der Kreis liegt (lol lustiger Satz)
t ... von 0-360°X ist dann der Punkt für den jeweiligen t - Wert.
n Beispiel zu der Funktion oben sähe z.B. so aus:
Code:
void senseless_rotation()
{
static f64 i = 0.f;
draw_circle3D(vector3df(0,0,0), XY, i, 0, 0, SColor(255, 255, 255, 255), 200, 80);
draw_circle3D(vector3df(0,0,0), XZ, 0, 0, i, SColor(255, 255, 255, 255), 200, 80);
draw_circle3D(vector3df(0,0,0), YZ, 0, i, 0, SColor(255, 255, 255, 255), 200, 80);
if((i += 1.f) > 360.f) i = 0.f; // Je nach Rechenpower einstellen, grad kein Timer da ;)
}
jo das zw. begin- und endScene() gepackt lässt 3 schöne Kreise rotieren
so nu kann ich beruhigt schlafen
gn8 all
paddy