[英]OpenGL 3D Rotation doesn't look as expected
我需要在OpenGL 2.1(实际上是兼容性配置文件)中获得二维二维的植物细胞二维层。 到目前为止,它看起来还不错,没有任何转换:
您在中间看到的是我为比较目的绘制的一个小型3D立方体。 它使用与所有其他模型相同的变换矩阵。 每个单元由一个突出的平台(较轻的部分)和倾斜的壁(阴影的部分)组成。 有一个漫射的白光源从眼睛周围的某个地方指向细胞。
现在是我卡住的部分。 缩放和平移效果很好,但是我无法使单元的3D旋转正常工作。 围绕(0,0,0)定义的多维数据集完全按预期旋转,但是单元格显示了一个我无法解释的奇怪行为。
这是稍微旋转的同一模型。
首先,阴影是不同的(正如我想说的那样)。 光源不动。 我已经尝试过移动它,但是它并没有真正改变很多,所以这完全是另一个问题。 我最特别的是细胞被切断的方式。 左下角有缺失的部分。 可能会说我们正在寻找该单元格的该部分,但是该单元格的另一部分看起来并不像预期的那样。 还是灯光不好?
我正在寻找这种只有一点点3D模型的旋转方式,这对用户来说会更令人愉悦。 我会去改变照明吗? 提醒您,我无法使用Glu,因此没有gluLookAt
可以代替查看我的相机。 会不会有另一种方法呢? 鼓励创造性的答案。 简而言之,我需要一种让用户在这个略微的3D模型中浏览的方法,知道它主要是2D的,感觉很直观。
一些用于上下文的图像。 该应用程序通过使用鼠标在屏幕上拖动来支持旋转,因此播放起来很容易。
绕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.