c++ - 绘制彼此靠近的对象

标签 c++ c opengl graphics

<分区>

我想在屏幕上绘制下图:

             |----|    sphere
             |----|
             / /
            / /
           / /         cylinder
          / /
         / / angle = 45
         | |
         | |
         | |           cylinder
         | |
         | |
         | |
 -----------           cylinder
 -----------

我的输出:

             / /
            / /
           / /         cylinder
          / /                        |-----|  sphere
         / / angle = 45              |-----|

我将绘制顶部的草图,即带有圆柱体的球体。我的代码在下面,请看看有什么问题。

我试图找到为什么我的基元彼此不靠近的错误。但是,我找不到。我试图改变翻译的参数,但它不起作用。请帮忙

void object(void) {
    GLUquadraticObj *t = gluNewQuadratic();

    glTranslatef(-2.0f, -1.0f, 0.0f);
    gluCylinder(t, 0.1f, 0.1f, 0.3f, 32,32);
    gluSphere(t, 0.2f, 26, 13);

}

void display(void) {
    glLoadIdentity();
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
    object();
    glPopMAtrix();
    glPopMatrix();
    glutSwapBuffers();
    glFlush();        
}

void reshape(int w, int h) {
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0f, w/h, 1.0, 500.0f);
    glLoadIdentity();
}

最佳答案

您需要在对 gluCylinder 和 gluSphere 的调用之间进行转换。在当前代码中,它们将具有相同的转换,即它们将处于相同的位置/方向。尝试:

gluCylinder ( t, 0.1f, 0.1f, 0.3f, 32,32);
glTranslatef ( -2.0f, -1.0f, 0.0f );
gluSphere ( t, 0.2f, 26, 13 ) ;

此外,您调用 PopMatrix() 的次数比调用 PushMatrix() 的次数多。

关于c++ - 绘制彼此靠近的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13518651/

相关文章:

java - JNI指针依赖的设计模式

opengl - 是否可以将 OpenCV GpuMat 绑定(bind)为 OpenGL 纹理?

c++ - 如何在平行 View 中保持良好的纵横比

c++ - Zeromq : How to send message longer than 30 character from python client to c++ server

C++ 为什么 bitvec[0].flip() 有效

c++ - 如何在 C++ 中的单个构造函数中调用多个构造函数

c - C 编程语言练习 1-14

c++ - VisualStudio Code可以用来调试C++程序吗?

c++ - 有没有办法通过模板参数自动解析重载方法?

c - opengl矩阵数学乘法