繁体   English   中英

OpenGL 3D旋转看起来不符合预期

[英]OpenGL 3D Rotation doesn't look as expected

我需要在OpenGL 2.1(实际上是兼容性配置文件)中获得二维二维的植物细胞二维层。 到目前为止,它看起来还不错,没有任何转换:

欢乐日场景

您在中间看到的是我为比较目的绘制的一个小型3D立方体。 它使用与所有其他模型相同的变换矩阵。 每个单元由一个突出的平台(较轻的部分)和倾斜的壁(阴影的部分)组成。 有一个漫射的白光源从眼睛周围的某个地方指向细胞。

现在是我卡住的部分。 缩放和平移效果很好,但是我无法使单元的3D旋转正常工作。 围绕(0,0,0)定义的多维数据集完全按预期旋转,但是单元格显示了一个我无法解释的奇怪行为。

这是稍微旋转的同一模型。

在此处输入图片说明

首先,阴影是不同的(正如我想说的那样)。 光源不动。 我已经尝试过移动它,但是它并没有真正改变很多,所以这完全是另一个问题。 我最特别的是细胞被切断的方式。 左下角有缺失的部分。 可能会说我们正在寻找该单元格的该部分,但是该单元格的另一部分看起来并不像预期的那样。 还是灯光不好?

我正在寻找这种只有一点点3D模型的旋转方式,这对用户来说会更令人愉悦。 我会去改变照明吗? 提醒您,我无法使用Glu,因此没有gluLookAt可以代替查看我的相机。 会不会有另一种方法呢? 鼓励创造性的答案。 简而言之,我需要一种让用户在这个略微的3D模型中浏览的方法,知道它主要是2D的,感觉很直观。

一些用于上下文的图像。 该应用程序通过使用鼠标在屏幕上拖动来支持旋转,因此播放起来很容易。

绕y轴旋转90度(确定)

绕y轴旋转90度

如此微微旋转

在此处输入图片说明

在此处输入图片说明

转换:

    glLoadIdentity();

glScalef(m_preferences->m_mesh_magnification, m_preferences->m_mesh_magnification, 1.0);
glRotatef(m_totalRotation.x() / 5., 0, 1, 0); // user rotation
glRotatef(m_totalRotation.y() / 5., -1, 0, 0); // user rotation

resizeGL(w, h)主体,负责投影视图:

    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho(-((GLdouble) w) / 2, ((GLdouble) w) / 2, ((GLdouble) h) / 2, -((GLdouble) h) / 2, -1.0, 1.0);
//glFrustum(...) if we want a realistic projection
glMatrixMode (GL_MODELVIEW);

基本上,我将y指向下方并在中间放置(0,0)。 我认为y方向模仿了Qt的默认设置,而起点的位置是项目决定。

编辑:旋转后的最终结果

在此处输入图片说明

glOrtho(-((GLdouble) w) / 2, ((GLdouble) w) / 2, ((GLdouble) h) / 2, -((GLdouble) h) / 2, -1.0, 1.0);

-1.0, 1.0是您的近和远剪切平面。 不会绘制在近平面之前或之后的任何内容。 您将需要增加这些值-但不要增加太多,因为您将失去Z缓冲区的精度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM