Opengl 有没有办法用变量表示glVertex3f?

Opengl 有没有办法用变量表示glVertex3f?,opengl,graphics,types,Opengl,Graphics,Types,有没有办法用变量表示glVertex3f? 比如说 one = glVertex3f(xL, yB, zF); 如果是的话,会是什么类型的? 此外,可以使用创建的变量构建多边形吗? 例如: 对于C,三十二上校在对OP的评论中已经回答了这个问题。 如果需要C++,这是一个很好的方式,利用强制。 Point3D类: 用法: 对于C,三十二上校在对OP的评论中已经回答了这个问题。 如果需要C++,这是一个很好的方式,利用强制。 Point3D类: 用法: C++中,你可以用这样的类来封装一个顶点:

有没有办法用变量表示glVertex3f? 比如说

one = glVertex3f(xL, yB, zF);
如果是的话,会是什么类型的? 此外,可以使用创建的变量构建多边形吗? 例如:


对于C,三十二上校在对OP的评论中已经回答了这个问题。 如果需要C++,这是一个很好的方式,利用强制。 Point3D类:

用法:


对于C,三十二上校在对OP的评论中已经回答了这个问题。 如果需要C++,这是一个很好的方式,利用强制。 Point3D类:

用法:


C++中,你可以用这样的类来封装一个顶点:

class Vertex3f {
public:
    Vertex3f(GLfloat x, GLfloat y, GLfloat z)
        : m_x(x), m_y(y), m_z(z) {
    }

    void apply() const {
        glVertex3f(m_x, m_y, m_z);
    }

private:
    GLfloat m_x, m_y, m_z;
};
glBegin(GL_POLYGON);
one.apply();
...
按照问题中的示例,您将实例化此类型的对象:

Vertex3f one(xL, yB, zF);
然后像这样应用它:

class Vertex3f {
public:
    Vertex3f(GLfloat x, GLfloat y, GLfloat z)
        : m_x(x), m_y(y), m_z(z) {
    }

    void apply() const {
        glVertex3f(m_x, m_y, m_z);
    }

private:
    GLfloat m_x, m_y, m_z;
};
glBegin(GL_POLYGON);
one.apply();
...

您可以重载函数调用操作符,而不用apply方法。我认为使用显式方法使代码在这种情况下更容易理解,但这是个人喜好的问题。C++中的

< P>,可以用这样的类封装一个顶点:

class Vertex3f {
public:
    Vertex3f(GLfloat x, GLfloat y, GLfloat z)
        : m_x(x), m_y(y), m_z(z) {
    }

    void apply() const {
        glVertex3f(m_x, m_y, m_z);
    }

private:
    GLfloat m_x, m_y, m_z;
};
glBegin(GL_POLYGON);
one.apply();
...
按照问题中的示例,您将实例化此类型的对象:

Vertex3f one(xL, yB, zF);
然后像这样应用它:

class Vertex3f {
public:
    Vertex3f(GLfloat x, GLfloat y, GLfloat z)
        : m_x(x), m_y(y), m_z(z) {
    }

    void apply() const {
        glVertex3f(m_x, m_y, m_z);
    }

private:
    GLfloat m_x, m_y, m_z;
};
glBegin(GL_POLYGON);
one.apply();
...

您可以重载函数调用操作符,而不用apply方法。我认为在这种情况下,使用显式方法会使代码更容易理解,但这是个人偏好的问题。

您所要求的最符合某些编程语言中a的要求。但你甚至没有指明你说的是哪种语言。然而,我认为你甚至不想要闭包。您只希望能够引用顶点数据。你应该看看OpenGL的顶点数组和C中的VBOs.struct{double x,y,z;}vertex3。或者更好地说,正如derhass所说,使用顶点缓冲区对象而不是立即模式。你所要求的与某些编程语言中的顶点最匹配。但你甚至没有指明你说的是哪种语言。然而,我认为你甚至不想要闭包。您只希望能够引用顶点数据。你应该看看OpenGL的顶点数组和C中的VBOs.struct{double x,y,z;}vertex3。或者更像derhass所说的,使用顶点缓冲区对象而不是立即模式。答案很好,除了作为C样式转换编写的免费const_cast。我们也可以简单地使用float[3],这已经被转换为float*@benvoigt,同意。但是,在旧的Opengl中,可能有一些函数采用float*而不是const float*,比如GLU镶嵌。回答不错,除了作为C样式的cast编写的免费const_cast之外。我们也可以简单地使用float[3],这已经被转换为float*@benvoigt,同意。但在旧的Opengl中,可能会有一些函数采用float*而不是const float*,比如GLU细分。