On Sat, 27 May 2017 16:52:21 +0700 Ryan Joseph <r...@thealchemistguild.com> wrote:
> Not having glm::perspective or glm::lookAt is enough to really stop you in > your tracks and running off to Google for hours. Then perhaps you have to improve your google skills. ^^ https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPerspective.xml https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluLookAt.xml Has all the info you need to implement them. Unoptimized pascal versions (but fast enough for general use): function TCamera.LookAt(Eye, Center, Up: TVector3): TMatrix4x4; var View, Right: TVector3; TransMatrix: TMatrix4x4; begin View:=Normalized(fCoV-Position); Right:=Normalized(CrossProduct(View, Up)); Up:=CrossProduct(Right, View); Result[0][0]:=Right.X; Result[1][0]:=Right.Y; Result[2][0]:=Right.Z; Result[3][0]:=0; Result[0][1]:=Up.X; Result[1][1]:=Up.Y; Result[2][1]:=Up.Z; Result[3][1]:=0; Result[0][2]:=-View.X; Result[1][2]:=-View.Y; Result[2][2]:=-View.Z; Result[3][2]:=0; Result[0][3]:=0; Result[1][3]:=0; Result[2][3]:=0; Result[3][3]:=1; Result:=MultglMatrix(IdentityMatrix4x4, Result); TransMatrix:=IdentityMatrix4x4; TransMatrix[3][0]:=-Eye.X; TransMatrix[3][1]:=-Eye.Y; TransMatrix[3][2]:=-Eye.Z; Result:=MultglMatrix(Result, TransMatrix); end; function TScene.BuildPerspectiveMatrix(FoV, AspectRatio, NearPlane, FarPlane: GLfloat): TMatrix4x4; var XYMax, XMin, YMin, Width, Height, Depth: GLfloat; begin XYMax:=NearPlane*tan(FoV*pi/360); YMin:=-XYMax; XMin:=-XYMax; Width:=XYMax-XMin; Height:=XYMax-YMin; Depth:=FarPlane-NearPlane; Result[0][0]:=(2*NearPlane/Width)/AspectRatio; Result[0][1]:=0; Result[0][2]:=0; Result[0][3]:=0; Result[1][0]:=0; Result[1][1]:=2*NearPlane/Height; Result[1][2]:=0; Result[1][3]:=0; Result[2][0]:=0; Result[2][1]:=0; Result[2][2]:=-(NearPlane+FarPlane)/Depth; Result[2][3]:=-1; Result[3][0]:=0; Result[3][1]:=0; Result[3][2]:=-2*(FarPlane*NearPlane)/Depth; Result[3][3]:=0; end; R. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal