Discussion Board
Камера и матрица прецирования
2009-10-17, 20:20
#1
Registered User
В OpenGl ES при использовании функции проецирования:
def SetPerspective2(fovy,aspect,near,far):
matr = [
[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]]
ymax=near*tan(fovy*3.141592/360.0)
ymin=-ymax
xmin=ymin*aspect
xmax=ymax*aspect
glFrustumf(xmin, xmax, ymin, ymax, near, far)
Я не получаю ожидаемого результата от матрицы, полученной таким способом:
class TCamera:
def __init__(self, aPosition=TVector(0, 0, 0), aLookAt=TVector(0, 0, -1), aUp=TVector(0, 1, 0)):
self.iViewMatrix = []
self.LookAt(aPosition, aLookAt, aUp)
def LookAt(self, aPosition, aLookAt, aUp):
self.iPosition = aPosition
self.iLookAt = aLookAt
self.iUp = aUp
ZAxis = (self.iLookAt - self.iPosition)
ZAxis.Normalize()
XAxis = TVector.CrossProduct(self.iUp, ZAxis)
XAxis.Normalize()
YAxis = TVector.CrossProduct(ZAxis, XAxis)
self.MakeIdentity()
self.iViewMatrix[0][0] = XAxis.iX;
self.iViewMatrix[1][0] = XAxis.iY;
self.iViewMatrix[2][0] = XAxis.iZ;
self.iViewMatrix[3][0] = -TVector.DotProduct(self.iPosition, XAxis);
self.iViewMatrix[0][1] = YAxis.iX;
self.iViewMatrix[1][1] = YAxis.iY;
self.iViewMatrix[2][1] = YAxis.iZ;
self.iViewMatrix[3][1] = -TVector.DotProduct(self.iPosition, self.iUp);
self.iViewMatrix[0][2] = ZAxis.iX;
self.iViewMatrix[1][2] = ZAxis.iY;
self.iViewMatrix[2][2] = ZAxis.iZ;
self.iViewMatrix[3][2] = -TVector.DotProduct(self.iPosition, ZAxis);
glLoadMatrixf(self.iViewMatrix)
def MakeIdentity(self):
self.iViewMatrix = [
[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]
]
В матрице камеры ошибки нет. Я уже перепробывал несколько вариантов проекции(Например просто через glFrustumf): Без использования матрицы камеры, все работает нормально, но как-только я ее включаю, то изображение либо пропадает, либо искажается(Растягивается непредвиденным образом).
Помогите плиз примером или советом. За любые предложения буду благодарен.
Re: Камера и матрица прецирования
2009-10-23, 15:45
#2
Registered User
лично я OpenGL ES не занимался, но раз изображение исчезает (растягивается).. я думаю Вы не правильно проецируете pixmap (буффер openGLа) в CFbsBitmap для последующего отображения на дисплее. Не правильная битность.. или может ещё что..
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules