【问题标题】:Rotating a 3d world in LuaGL or OpenGL在 LuaGL 或 OpenGL 中旋转 3d 世界
【发布时间】:2014-11-21 04:18:05
【问题描述】:

我只是想知道如何在 LuaGL 或 OpenGL 中旋转 3d 世界。我遇到的问题是,当我旋转时,当我在程序中靠近墙壁时,我最终要么在墙壁上,要么在我建造的房间外面。不完全确定为什么会这样,而且更难,因为我看到的很多编程代码都是面向 C 或 C++ 的。我已经检查过 NEHE,它是面向 C 或 C++,而不是面向 Lua。

【问题讨论】:

  • 这是一个普遍的问题,不是lua特有的;大概您有某种模型,其中包含要渲染的事物和相机位置-我想您需要根据基于该模型的条件来限制旋转。
  • 感谢您的回答,但我会先尝试使用 Daniel 的修复程序。我已经尝试硬编码限制玩家可以去哪里,当玩家按下 a 或 d 时,我最终限制了玩家移动 2 个单位(因为我限制了沿 x 轴的移动)!我这样做有点愚蠢,这让我发疯了!谢谢你,但我会记住这一点!

标签: opengl lua


【解决方案1】:

问题是您正在围绕其世界空间坐标旋转所有内容,要解决此问题,您需要使对象的原点等于您希望旋转的点,然后旋转,然后将其转换为它应该是。

例如,如果你只是想旋转你的世界,你需要确保你正在绘制的每个对象的世界矩阵等于单位矩阵。

在图形中我们遵循 scaleMatrix * rotationMatrix * translationMatrix 的原理。

这是一个示例,说明您的对象的绘制方法可能是什么样的。

不过,您应该考虑使用 glm 来处理您的矩阵,我发现它工作得更好。

glPushMatrix();
glLoadIdentity();
glScale();
glRotate();
glTranslate();
glPopMatrix)();

【讨论】:

  • 感谢您的回答。现在,有什么方法可以指向教程或提供示例代码(以您喜欢的任何语言或伪代码)作为如何访问与“世界”矩阵分开的比例、旋转和平移矩阵?这是我有点困惑的地方。在我的代码中,我使用 "gl.Rotate blah blah blah, gl.Rotate blah blah blah, gl.Translate(position[1], position[2], position[3]) 其中 blah 只是一个旋转的数字position[i] 是当前视图的位置,或者我猜是当前正在绘制“世界”视图。我是图形编程的菜鸟。:(
  • 如果您使用gl.* 方法,您应该已经知道所有内容的位置,通常在绘制任何内容之前加载单位矩阵,然后将矩阵移动到您想要的位置。您应该能够只加载单位矩阵,然后旋转,然后平移。
  • 恐怕我现在更迷茫了。我认为我遇到的整个问题是我创建了一个名为“位置”的变量,我目前正在存储相机的当前位置。下面是我用于渲染视图的代码。
  • 函数窗口:action(x, y) iup.GLMakeCurrent(self) gl.Clear('COLOR_BUFFER_BIT,DEPTH_BUFFER_BIT') gl.MatrixMode('MODELVIEW') gl.LoadIdentity() gl.PushMatrix( ) --if pda=='false' then-- (忘记这一行) gl.Rotate(xrot, 1, 0, 0) gl.Rotate(yrot, 0, 1, 0) gl.Translate(position[1 ], position[2], position[3]) gl.PopMatrix() draw() iup.GLSwapBuffers(self) end
  • 现在我根本动弹不得。抱歉,我是这里的图形新手。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多