lol,

you are picking wrong matrix, and getting wrong vector,

how is

glGetFloatv(GL_PROJECTION_MATRIX, @Matrix); Right:= Vectorize(Matrix[0,0], Matrix[0,1], Matrix[0,2]); Up:= Vectorize(Matrix[1,0], Matrix[1,1], Matrix[1,2]);

equal to

double m_PickInfo_ModelView[16];// of ; t3dpoint<float> Pos; glGetDoublev(GL_MODELVIEW_MATRIX, m_PickInfo_ModelView); BillboardX.x = m_PickInfo_ModelView[0]; BillboardX.y = m_PickInfo_ModelView[4]; BillboardX.z = m_PickInfo_ModelView[8]; BillboardY.x = m_PickInfo_ModelView[1]; BillboardY.y = m_PickInfo_ModelView[5]; BillboardY.z = m_PickInfo_ModelView[9];

to be more specific

glGetFloatv(GL_PROJECTION_MATRIX, @Matrix); and glGetDoublev(GL_MODELVIEW_MATRIX, m_PickInfo_ModelView);

after that you will have worldspace vectors (up, right) so you: LoadIdenity then setupcamera, and draw your object (defining position of billboard and its size)