- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我可以自己进行位置数学运算时,插入/弹出矩阵以平移形状的目的是什么?我可以理解使用前面提到的矩阵来做更困难的操作(例如旋转),但为什么要专门翻译?
public void render()
{
positionX++;
GL.PushMatrix();
GL.Translate(positionX, positionY, 0);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
GL.Begin(PrimitiveType.Quads);
GL.Vertex2(0, 0);
GL.Vertex2(0 + widthX, 0);
GL.Vertex2(0 + widthX, 0 + widthY);
GL.Vertex2(0, 0 + widthY);
GL.PopMatrix();
GL.End();
}
对比
public void render()
{
positionX++;
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
GL.Begin(PrimitiveType.Quads);
GL.Vertex2(positionX, positionY);
GL.Vertex2(positionX + widthX, positionY);
GL.Vertex2(positionX + widthX, positionY + widthY);
GL.Vertex2(positionX, positionY + widthY);
GL.End();
}
最佳答案
我不认为这是一个愚蠢的问题,尽管随着您更多地使用 OpenGL,答案可能会变得清晰。
使用glTranslate
(或类似的方法)进行翻译在您需要不同的转换顺序时肯定会派上用场。仅当平移是您要执行的第一个转换时,更改顶点坐标才有效。例如,如果你想做旋转,然后平移,然后再旋转,你必须使用矩阵。
然而,主要原因是通常您不会在每一帧都将顶点发送到 GPU。这非常慢,事实上,您使用的所有 GL.*
方法现在都已弃用。现在的做法是:
纹理、着色器和其他东西也是如此。
因此,您通常不会在将顶点数据发送到 GPU 后对其进行修改(从技术上讲,可以修改,但出于性能原因,不建议这样做)。因此,如果您想要进行任何转换,就必须使用矩阵。
最后一点,我要再说一遍,您使用的是已弃用的功能,我认为这对于学习一些基本概念来说还算不错,但我肯定会建议迁移到当前的 OpenGL(或至少是 OpenGL 3)尽快了解着色器、顶点缓冲区、顶点数组和所有新的 Shiny 东西。
TL;DR:是的,你可以自己做。但最好让你的显卡来做,因为它可以更快地完成。事实上,这是拥有专用显卡的主要原因。
关于c# - 为什么要使用 glTranslate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238632/
当我可以自己进行位置数学运算时,插入/弹出矩阵以平移形状的目的是什么?我可以理解使用前面提到的矩阵来做更困难的操作(例如旋转),但为什么要专门翻译? public void render()
我想绘制一个立方体并翻译它,但模型 View 矩阵上的转换似乎不起作用。它们的效果为 0。 gl.glClearColor(0, 0, 0, 0); gl.glClear(GL.GL_COLOR_BU
这是我一直遇到的一个大问题。 我正在尝试使用 glTranslate 渲染多个图 block ,但是当我使用 x、y 坐标调用我的绘图函数时,图 block 的间距很奇怪(我不想要空格)。 这是发生了
我正在学习 openGL 以及如何进行转换和缩放等转换。我知道你通常必须翻译到原点,然后做任何你想做的事情(比如缩放),然后再翻译回来。根据我的理解,这是手动完成的,但您可以使用 glScale()
我正在尝试绕轴旋转立方体,我正在做的是: glTranslatef(0.0f, 0.0f, -60.0f); glRotatef(angle, 0.0f, 1.0f, 0.0f); 我
我有一个八边形,我需要将其旋转和平移到 10,000 个不同的位置/角度。角度和坐标动态变化。 如果我在即时模式下使用 glRotate 和 glTranslate,由于客户端/服务器之间的所有来回,
我遇到了一个问题,我用以下代码制作了一个圆柱体,我一直在尝试移动它(向后移动,以便它的中心位于灰色光束所在的位置)。 但是,输出根本没有移动圆柱体,我没能发现问题所在? GLfloat plane[]
我正在使用 glRotate 和 glTranslate 函数来围绕自身旋转模型。但是当我运行我的程序时,我的模型正在围绕它旁边的一个点旋转。这是我的模型定义: private static fina
我需要一个函数来将类似 glTranslate() 的翻译应用于一个点。有人知道像 glTranslate() 和 glRotate() 这样的函数可以修改和检索要相乘的矩阵吗? 最佳答案 有成千上万
我正在尝试创建一个简单的 JOGL 程序,但遇到了问题。我刚刚将所有必要的包导入到我的类文件中,但是现在,每次我使用 glTranslate 函数时,它都会被标记为红色错误,例如在该代码块的末尾。 p
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 3 年前。 Improve this ques
我的目标是通过按下箭头键来移动对象。为此,在回调中,我从某个偏移量创建平移矩阵,并将其乘以世界矩阵。但是它不起作用 - 立方体不会通过按键移动。我还注意到直接使用 glTranslate() 和设置的
我在 GLFW 上下文中使用 GLUT 绘制了一个球体。我使用的代码是: void drawSphere(std::vector color, std::vector position, float
假设我使用 glRotate 根据一些任意用户输入来转换当前 View (即,如果按下左键则 rtri+=2.5f) glRotatef(rtri,0.0f,1.0f,0.0f); 然后我在旋转后的位
我正在尝试渲染图像并使用 glTranslate 对其进行偏移: glPushMatrix(); glTranslatef(x, y, 0.0f); glDrawElements(GL_TRIANGL
我正在寻找矩阵的解释(或图像)以及在对其进行平移、旋转和缩放时矩阵如何变化...(一个单元格带有 sin(angle),另一个单元格的 x 坐标为翻译) 最佳答案 现在,忽略平移,这是一个比旋转和缩放
概述: 我正在尝试创建一个类似于此的 3D 应用程序: www.youtube.com/watch?v=h9kPI7_vhAU. 我正在使用 OpenCV2.2、Python2.7 和 pyOpenG
在 OpenGL ES 1.x 中,可以先执行 glTranslate,然后执行 glRotate,以修改旋转中心的位置(即 围绕给定点旋转 )。据我了解,在 OpenGL ES 2.0 中,矩阵计算
我是一名优秀的程序员,十分优秀!