C++opengl在glTranslatef之后获得新的顶点位置
C++ opengl get new vertex position after glTranslatef
我的三维空间中有一个平面,我想把它移到其他地方,所以我用glTranslate来做。
平面顶点数据为:(0,0,0)、(1,,0),(1,1,0)和(0,1,0)。我通过使用glTranslatef(2.0,0.0,0.0)将对象转换到(2,0,0)的位置
平移后,点数据保持不变,因此如果我想与平面碰撞,视觉位置不是它的实际位置。
是否有方法从MODELVIEW_MIX获取点数据,或者至少有方法找出glTranslate之后的新值?
不要只在实际值上添加2.0来移动它,因为如果我想使用glRotate等,我仍然想要点的位置。
如果你真的不想维护自己的转换矩阵,你可以用获得当前的模型视图矩阵
GLfloat mat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, mat);
然后可以使用标准矩阵乘法将此矩阵应用于顶点。请记住,矩阵是按列的主要顺序排列的。对于输入向量xIn
,变换后的向量xOut
为:
xOut[0] = mat[0] * xIn[0] + mat[4] * xIn[1] + mat[8] * xIn[2] + mat[12];
xOut[1] = mat[1] * xIn[0] + mat[5] * xIn[1] + mat[9] * xIn[2] + mat[13];
xOut[2] = mat[2] * xIn[0] + mat[6] * xIn[1] + mat[10] * xIn[2] + mat[14];
IMHO,在您自己的代码中跟踪当前的转换矩阵确实是一种更好的方法。除了消除可能对性能有害的glGet()
调用外,它还让您走上了使用现代OpenGL(核心配置文件)的道路,在现代OpenGL中,矩阵堆栈和所有相关调用都不存在了。
您可以通过平移和旋转创建一个矩阵,以便使用该矩阵来变换坐标。有许多库可以帮助您创建这样的矩阵和变换坐标。
相关文章:
- 如何循环打印顶点结构
- 将顶点位置从顶点传递到片段着色器 - 仅在使用 Nsight 进行调试时有效
- 如何在顶点着色器中使用VBO数据作为位置数据,在片段着色器中使用统一数据作为颜色数据
- OpenGL ES:在顶点着色器中计算顶点位置时性能不佳
- 无法在顶点着色器中设置输入的位置
- 我可以将单个顶点索引与具有所有属性(位置、法线、texCoord)的顶点缓冲区一起使用吗?
- 给定一个用三角形镶嵌的补丁,如何修改其新的顶点位置
- 了解 glm::ortho() 的参数如何影响投影后的顶点位置
- 顶点属性 - 对顶点位置使用短点而不是浮点数
- 如何将顶点位置传递给顶点着色器.我写了一个着色器,它不会在屏幕上绘制任何内容
- 顶点着色器中的位置矢量与glLate冲突
- C++opengl在glTranslatef之后获得新的顶点位置
- 对象模型加载纹理坐标和顶点位置没有正确加载
- OpenGL以像素为单位定义顶点位置
- 带有骨骼的Assimp + COLLADA模型=不正确的顶点位置
- OpenGL如何知道它应该基于GL_ARRAY_BUFFER绘制顶点到什么位置
- GLSL-调用的顶点和片段的时间和位置
- 我如何从wavefront .obj文件中获得索引顶点位置和索引顶点法线到OpenGL顶点着色器
- 如何使用glsl改变顶点位置
- OpenGl的错误.运行时立方体顶点位置错误