- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道在 opengl 中使用 gluLookAt(...) 、glPushMatrix 和其他基本转换工具的目的是什么。我被困在这些代码中。在为 opengl 设置适当的要求后,当我在 glPushMatrix() 中实现 glulookat(.....) 时。代码工作正常,在按键上,立方体以适当的旋转呈现,但是当我在 glPushMatrix() 和 glPopMatrix() 之外实现 gluLookAt(....) 时,事情变得疯狂了。立方体显示异常行为,最后得到从屏幕上消失。
gluLookAt(0.0f, 0.0f, 400.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
glPushMatrix();
//gluLookAt(0.0f, 0.0f, 400.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
glBegin(GL_QUADS);
// Front Face
// White
glColor3ub((GLubyte) 255, (GLubyte)255, (GLubyte)255);
glVertex3f(50.0f,50.0f,50.0f);
// Yellow
glColor3ub((GLubyte) 255, (GLubyte)255, (GLubyte)0);
glVertex3f(50.0f,-50.0f,50.0f);
// Red
glColor3ub((GLubyte) 255, (GLubyte)0, (GLubyte)0);
glVertex3f(-50.0f,-50.0f,50.0f);
// Magenta
glColor3ub((GLubyte) 255, (GLubyte)0, (GLubyte)255);
glVertex3f(-50.0f,50.0f,50.0f);
// Back Face
// Cyan
glColor3f(0.0f, 1.0f, 1.0f);
glVertex3f(50.0f,50.0f,-50.0f);
// Green
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(50.0f,-50.0f,-50.0f);
// Black
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(-50.0f,-50.0f,-50.0f);
// Blue
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-50.0f,50.0f,-50.0f);
// Top Face
// Cyan
glColor3f(0.0f, 1.0f, 1.0f);
glVertex3f(50.0f,50.0f,-50.0f);
// White
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(50.0f,50.0f,50.0f);
// Magenta
glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f(-50.0f,50.0f,50.0f);
// Blue
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-50.0f,50.0f,-50.0f);
// Bottom Face
// Green
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(50.0f,-50.0f,-50.0f);
// Yellow
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(50.0f,-50.0f,50.0f);
// Red
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(-50.0f,-50.0f,50.0f);
// Black
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(-50.0f,-50.0f,-50.0f);
// Left face
// White
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(50.0f,50.0f,50.0f);
// Cyan
glColor3f(0.0f, 1.0f, 1.0f);
glVertex3f(50.0f,50.0f,-50.0f);
// Green
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(50.0f,-50.0f,-50.0f);
// Yellow
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(50.0f,-50.0f,50.0f);
// Right face
// Magenta
glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f(-50.0f,50.0f,50.0f);
// Blue
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-50.0f,50.0f,-50.0f);
// Black
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(-50.0f,-50.0f,-50.0f);
// Red
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(-50.0f,-50.0f,50.0f);
glEnd();
glPopMatrix();
最佳答案
gluLookAt
将事件矩阵堆栈的当前最顶层元素与观察矩阵相乘,并以此替换最顶层元素。
Push 和 Pop 是标准的堆栈操作。 Push 创建最顶层元素的拷贝并将其压入栈顶,pop 将其移除。
因此,您在 push-pop block 中所做的任何更改都会通过 pop 操作恢复。但是在堆栈框架(push-pop)之外,更改将累积。如果你在 push-pop 之外的 gluLookAt
之前放置一个 glLoadIdentity
,它也会工作,但那是因为你将矩阵重置为一个正常的值而不是在之前渲染的基础上工作。
关于c++ - 在 glPushMatrix 内部和外部实现 glulookat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21730632/
我在 OpenGL 的天空盒内制作过山车,并且没有太多关于它的功能或计算机图形的背景知识,这被证明是非常困难的。我使用 Catmull-Rom 样条插值绘制了一个过山车,并使用 glVertex3f
我正在尝试制作一个在 3D 空间中自由移动的相机。 glulookat 函数如下所示: gluLookAt(g_eye[0],g_eye[1],g_eye[2], g_look
我正在尝试将我的太空入侵者游戏切换为第一人称视角,即从船上看世界的视角。我对应该关注什么点感到有点困惑。我目前在 gluLookAt 中使用这些参数: GL11.glMatrixMode(GL11.G
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
我正在尝试使用 gluLookAt() 函数来控制放大和缩小。现在它根本没有改变矩阵,我不知道为什么。 相关代码如下: // Basic Opengl display function void on
我没有多少 OpenGL 经验。我正在尝试画一个茶壶并在茶壶周围移动相机。为此,我使用了 gluLookAt 函数。问题是,当我调用 gluLookAt 时,屏幕是空白的,我看不到我的茶壶。 #inc
我刚买了一台新电脑,现在必须让我的演示程序与 SDL2/OpenGL 一起运行。我使用该程序尝试了各种技术并使用了 gluLookAt(显然,不应该再使用它,甚至永远不应该使用它)。 现在我正在寻找一
我使用 Eclipse 在 OpenGL 中创建了一个保龄球游戏。 现在我想在按下按键时更改相机的 View 。 但是当我按下 x 按钮时,一切都消失了。 这里是我们的代码:- #include #
我正在用 opengl 编程,我想更改相机 View : ... void RenderScene() //Zeichenfunktion { glClearColor( 1.0, 0.5, 0.0
伪代码: drawScene() { for(every 3Dobject) { glMatrixMode(GL_MODELVIEW); glLoadIdent
这就是我计算视线 vector 和向上 vector 的方式。 ly = sin(inclination); lx = cos(inclination)*sin(azimuth);
我正在使用 openGL/GLUT 只是想绘制一个图元并使用 gluLookAt() 来移动相机。遇到麻烦,我只看到黑色。这是我的渲染函数代码。 glMatrixMode(GL_MODELVIEW);
为什么 gluLookAt 不工作? 它对场景没有任何影响,就好像它甚至没有被调用一样。 是因为我正在使用 glMatrixMode(GL_MODELVIEW); 如果我不包含它,屏幕上什么也看不到。
我有一个 OpenGL 程序,当我调用它时它可以工作: gluLookAt(0.1,0.1,0.1, 0,0,0, 0,0.1,0); ...但不是当我这样称呼时: gluLookAt(0.01,0.
通过这条指令 gluLookAt: gluLookAt( p1, p2, p3, l1, l2, l3, u1, u2, u3 ); 如何将相机向左移动一个单位,同时保持注视同一点的方向? 显然我不能
我正在尝试使用 gluLookAt() 设置视角 这里有我的代码,我尝试在其中设置相机但没有结果 这里的函数displaycone(): void displayCone(void) { gl
我想使用 Camera 外部矩阵和 gluLookAt 函数在图像上显示模型。 模型平移到原点,即模型的质心位于原点。 (模型坐标系以右手为准) 然后使用 cvFindExtrinsicCameraP
我尝试自己计算观察矩阵,而不是使用 gluLookAt()。我的问题是我的矩阵不起作用。然而,在 gluLookAt 上使用相同的参数确实有效。 我创建观察矩阵的方法: Vector3 Eye, At
据我了解, gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x,
我正在开发一个简单的 2D 自上而下 OpenGL 游戏,其中相机跟随玩家。我使用 gluLookAt 将相机定位在玩家上方并朝其方向看。然而,在运行游戏时,即使没有输入,相机也会围绕轴旋转。 旋转速
我是一名优秀的程序员,十分优秀!