如何在某些世界坐标系OpenGL上绘制立方体

问题描述

| 我有执行此操作的这段代码,但是根本不起作用!
GLdouble *posv = Utils::worldToScreen(px,py,pz);
GLdouble x = posv[0];
GLdouble y = posv[1];
GLdouble z = posv[2];
GLdouble *sizev = Utils::worldToScreen(1.0f,1.0f,1.0f);
GLdouble sizex = sizev[0];
GLdouble sizey = sizev[1];
GLdouble sizez = sizev[2];

glBegin(GL_QUADS);
glColor3f(1.0,1.0,0.0);
// FRONT
glVertex3f(x-sizex,y-sizey,z+sizez);
glVertex3f(x+sizex,y+sizey,z+sizez);
glVertex3f(x-sizex,z+sizez);
// BACK
glVertex3f(x-sizex,z-sizez);
glVertex3f(x-sizex,z-sizez);
glVertex3f(x+sizex,z-sizez);

glColor3f(0.0,0.0);
// LEFT
glVertex3f(x-sizex,z-sizez);
// RIGHT
glVertex3f(x+sizex,z+sizez);

glColor3f(0.0,0.0,1.0);
// TOP
glVertex3f(x-sizex,z-sizez);
// BottOM
glVertex3f(x-sizex,z+sizez);


GLdouble* Utils::worldToScreen(float objX,float objY,float objZ)  {

GLint realy;
GLdouble win_x,win_y,win_z;
int viewport[4];
double mvmatrix[16],projmatrix[16];

glGetIntegerv(GL_VIEWPORT,viewport);
glGetDoublev(GL_MODELVIEW_MATRIX,mvmatrix);
glGetDoublev(GL_PROJECTION_MATRIX,projmatrix);


gluProject(static_cast<GLdouble>(objX),static_cast<GLdouble>(objY),static_cast<GLdouble>(objZ),mvmatrix,projmatrix,viewport,&win_x,&win_y,&win_z);

realy = viewport[3]-(GLint)win_y -1;

GLdouble *temp = new GLdouble[3];
temp[0] = win_x;
temp[1] = realy;
temp[2] = win_z;

cout << \"objX:\" << objX << endl;
cout << \"objY:\" << objY << endl;
cout << \"objZ:\" << objZ << endl;
cout << \"temp[0]:\" << temp[0] << endl;
cout << \"temp[1]:\" << temp[1] << endl;
cout << \"temp[2]:\" << temp[2] << endl;

return temp; }
输出很奇怪!
objX:100
objY:100
objZ:0
temp[0]:6.95322e-310
temp[1]:-1
temp[2]:6.95322e-310
怎么了?对不起我的愚蠢!     

解决方法

        为何不使用glTranslatef()转换为x,y,z,然后绘制图形,而不是以x +/-,y +/-,z +/-的大小绘制顶点? 将此作为您的绘制函数:
void drawCube(float x,float y,float z)
{
    const float sizex = 0.5f;
    const float sizey = 0.5f;
    const float sizez = 0.5f

    glTranslatef(-x,-y,-z);

    glBegin(GL_QUADS);

    glColor3f(1.0,1.0,0.0);

    // FRONT
    glVertex3f(-sizex,-sizey,sizez);
    glVertex3f(sizex,sizey,sizez);
    glVertex3f(-sizex,sizez);

    // BACK
    glVertex3f(-sizex,-sizez);
    glVertex3f(-sizex,-sizez);
    glVertex3f(sizex,-sizez);

    glColor3f(0.0,0.0);

    // LEFT
    glVertex3f(-sizex,-sizez);

    // RIGHT
    glVertex3f(sizex,sizez);

    glColor3f(0.0,0.0,1.0);

    // TOP
    glVertex3f(-sizex,-sizez);

    // BOTTOM
    glVertex3f(-sizex,sizez);

    glEnd();

    glTranslatef(x,y,z);
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...