Ben lwjgl kullanarak OpenGL 3 öğreniyorum. Ben gluLookAt()
için bir eşdeğer uygulamak için çalıştım, ve çalışmasına rağmen biraz neden karıştı mıyım. OpenGL 3 (lwjgl) raporuna bakın Matrix Karışıklık
gluLookAt
kodu, benim uygulamada yanlış davrandım. Sadece ortonormal vektörler
forward
,
side
ve
up
transpozlarını çalışan kodumu başardı (Doğru terminolojiyi kullanıyorum umut!), Ben oldukça emin yanlıştır değilim ki ...
private static final Vector3f forward = new Vector3f();
private static final Vector3f side = new Vector3f();
private static final Vector3f up = new Vector3f();
private static final Vector3f eye = new Vector3f();
public static Matrix4f lookAt(float eyeX, float eyeY, float eyeZ,
float centerX, float centerY, float centerZ,
float upX, float upY, float upZ) {
forward.set(centerX - eyeX, centerY - eyeY, centerZ - eyeZ);
forward.normalise();
up.set(upX, upY, upZ);
Vector3f.cross(forward, up, side);
side.normalise();
Vector3f.cross(side, forward, up);
up.normalise();
Matrix4f matrix = new Matrix4f();
matrix.m00 = side.x;
matrix.m01 = side.y;
matrix.m02 = side.z;
matrix.m10 = up.x;
matrix.m11 = up.y;
matrix.m12 = up.z;
matrix.m20 = -forward.x;
matrix.m21 = -forward.y;
matrix.m22 = -forward.z;
matrix.transpose(); // <------ My dumb hack
eye.set(-eyeX, -eyeY, -eyeZ);
matrix.translate(eye);
return matrix;
}
I Aktarımı yapmam gerektiğini düşünmüyorum, ama onsuz çalışmıyor. Ben transpose()
koydum çünkü tüm matris hücre pozisyonları btw yeniden yazmak için rahatsız olamazdı!
Benim anlayış
[ side.x up.x fwd.x 0 ] [ 1 0 0 -eye.x ]
[ side.y up.y fwd.y 0 ] [ 0 1 0 -eye.y ]
[ side.z up.z fwd.z 0 ] [ 0 0 1 -eye.z ]
[ 0 0 0 1 ] [ 0 0 0 1 ]
aşağıdaki Ve lwjgl Matrix4f
sınıf m<col><row>
olarak matris hücrelerini temsil ettiğini düşünüyorum raporuna bakın matris formu olmasıdır. translate(Vector3f)
yöntem bu neresini ben mahvettiniz olarak aşağıdaki
public static Matrix4f translate(Vector3f vec, Matrix4f src, Matrix4f dest) {
...
dest.m30 += src.m00 * vec.x + src.m10 * vec.y + src.m20 * vec.z;
dest.m31 += src.m01 * vec.x + src.m11 * vec.y + src.m21 * vec.z;
dest.m32 += src.m02 * vec.x + src.m12 * vec.y + src.m22 * vec.z;
dest.m33 += src.m03 * vec.x + src.m13 * vec.y + src.m23 * vec.z;
...
}
Yani derece karışık kaldım yapar. o raporuna bakın matris benim anlayış mı, sütun/satır majör-lık (bir kelime ?! olduğunu) Matrix4f
, yoksa başka bir şey? Kodumun kalan kısmı kırıldı mı? Gerçekten doğru mu ve sadece endişeleniyorum? Ben sadece salak mıyım?
Teşekkürler.
teşekkür gibi çalışır. Çok uzakta olduğumu bilmek güzel. yöntem Mat4.set (, , ) var mı? –
Zutty
Tam olarak, github üzerinde tüm lib aramak için tavsiye ederim. Projenin adını hatırlamıyorum ama LWJGL eğiticileri. –
Harika, çok teşekkürler. – Zutty