【问题标题】:sketch cylinder [duplicate]草图圆柱体[重复]
【发布时间】:2012-11-23 10:02:16
【问题描述】:

可能重复:
sketching object near to each other

我想在屏幕上画下图;

             |----|   sphere
             |----|
             / /
            / /
           / /         cylinder
          / /
         / / angle = 45
         | |
         | |
         | |           cylinder (i)
         | |
         | |
         | |
 -----------           cylinder
 -----------

要绘制标有 (i) 的圆柱体,我使用了下面的代码,你能帮我看看我的错误是什么,因为我无法绘制 (i) 吗?

glTranslatef(0.0f, 10.0f, 400.0f ) ;
glColor3f ( 0.0f, 1.0f, 1.0f ) ;
glRotatef (90.0f, 1.0f, 1.0f, 0.0f );
gluCylinder(quadric,0.0f,200.0f,100.0f,32,32);
glTranslatef(0.0f, 10.0f, -400.0f ) ;

【问题讨论】:

  • 你之前问过这个。那时这不是一个真正的问题,现在也不是。
  • 也许您不应该如此努力地解决这个特殊问题,而应先处理更基本的步骤:设置窗口和上下文、视口、投影、模型视图和转换。
  • 您的错误可能是,您只是将一些随机代码复制'n'粘贴在一起,没有清楚地了解它实际上做了什么。这个“Cargo Cult Programming”,永远不会让你走得太远,你甚至不应该尝试把它交出来,因为一些 TA 倾向于在这方面给出负面评价(当我是 TA 时,我确实给出了负面评价,每当我遇到 Cargo Cult程序)。
  • @user1845897:让你不再试图作弊,而是真正学习你应该学习的东西。你可能认为我对你很刻薄,但实际上我希望你通过那门课。但为此,您必须了解您的工作。仅向您展示一些代码无济于事;读完之后你也不会变得更聪明。
  • 我建议和 datenwolf 一样:一般来说,如果您遇到问题,请从代码中退后一步,想象一下您想要实现的目标。 在这种 3D 问题的情况下 闭上眼睛,在脑海中组合场景。一步步。想象一下气缸。它的方向是什么?这是正确的吗?如果没有,你必须旋转它。 位置现在正确吗?如果没有,您必须将其“推”到正确的位置。为每个步骤找到合适的矩阵,并为每个部分执行此操作。第一个将是艰难的。第二个并不容易,但第三个会很好!

标签: c++ c opengl graph


【解决方案1】:

我不想在这里成为坏人,所以让我解释一下,为什么那段代码在没有上下文的情况下一文不值,以及为什么你需要理解。

让我们逐行浏览这个sn-p。一切从

开始
glTranslatef(0.0f, 10.0f, 400.0f ) ;

第一个问题是:这是在什么矩阵上运行。可能是模型视图,但我们不知道。在调用 glTranslatef 之前的矩阵是什么? OpenGL 矩阵运算有点像 x86 汇编,因为它们用运算结果替换堆栈上的矩阵。

glColor3f ( 0.0f, 1.0f, 1.0f ) ;

这设置颜色状态。当然。通常将此调用与要绘制的几何图形组合在一起,而不是将其放在代码中间的某个位置。

glRotatef (90.0f, 1.0f, 1.0f, 0.0f );

绕轴 (1, 1, 0) 旋转,即就像将轴穿过对象,通过局部原点并朝向点 (1, 1, 0),然后将其旋转 90°关于这个轴。

gluCylinder(quadric,0.0f,200.0f,100.0f,32,32);

现在绘制了一个圆柱体,它将首先旋转,然后平移,然后……只有您知道,因为您省略了在开始渲染帧时重置模型视图矩阵的部分。

glTranslatef(0.0f, 10.0f, -400.0f ) ;

最终的 glTranslatef 对绘制圆柱体没有任何影响。


你现在看到问题了吗?你在问一个非常具体的问题,这显然是作业,放一些随机代码在那里,只是问“如何绘制它”而不知道你实际上在做什么。

如果您不先掌握基础知识,我们将无法帮助您。我们很乐意帮助您到达那里。从画一些简单的东西开始,比如以窗口为中心的三角形。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多