- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
原始问题
我想使用“gluPerspective”、“glViewport”和“gluLookAt”来操作我的相机和屏幕。
我将哪些功能应用于哪种矩阵模式?我应该/必须以什么顺序使用它们?
例如,我正在尝试像这样设置我的屏幕和相机:(但它不起作用!)
glMatrixMode(GL_PROJECTION) // Apply following to projection matrix - is this correct?
glLoadIdentity(); // Reset first
glPerspective(45.0, (double)w/(double)h, 1.0, 200.0); // Set perspective
glViewport(0, 0, w, h); // Set viewport
glMatrixMode(GL_MODELVIEW); // Apply following to modelview - should glViewport come under here?
glLoadIdentity(); // Reset first
gluLookAt(px, py, pz, cx, cy, cz, ux, uy, uz); // Set position, centre and then up vectors
// This surely comes after calling GL_MODELVIEW?
我四处寻找在线文档,我了解这些功能,只是不知道它们应该去哪里以及以什么顺序!
// Firstly, the window may have been resized so re-create the viewing area
glViewport(0, 0, width_of_window_rendering_area, height_of_window_rendering area);
这将重新创建用于在窗口内部的整个区域进行渲染的视口(viewport)。使用 sfml,您可以执行诸如 window.width() 或 window.height() 之类的操作,或类似的操作,具体取决于您使用的窗口工具包(glut、glfw、sdl 等)...
// The second step is to add a projection matrix. There are three main ones I like to use
// Uncomment the one you want
glMatrixMode(GL_PROJECTION); // Tell OpenGL to manipulate the correct matrix stack
glLoadIdentity(); // Reset the projection matrix, or bad things happen after multiple calls to below functions!
// glOrtho( ... ) // Uncomment to use 2D rendering
// gluPerspective( ... ) // Uncomment to use (easy) 3D rendering
glFrustrum( ... ) // Uncomment to use (harder/less intuitive?) 3D rendering
glMatrixMode(GL_MODELVIEW); // I always prefer to leave OpenGL in the modelview manipulation mode.
// I consider it the "default" and safest mode to leave OpenGL in, as any rogue
// calls to functions changing its contents is likely to mess up your geometry
// which should be visible as a problem on the screen, which tells you you need
// to fix something! Manipulating the other matrix stacks may not show obvious
// problems.
您需要从“glOrtho”、“gluPerspective”和“glFrustrum”三个选项中选择一个。还有'gluOrtho2D',但要小心使用! (我更喜欢自己用“glOrtho”指定近平面和远平面。)您还需要用函数的参数替换“...”。
// The third step is to clear the screen and set your camera / geometry position
glClear(GL_COLOR_BUFFER_BIT); // use bitwise OR ('||') with 'GL_DEPTH_BUFFER_BIT' and 'GL_STENCIL_BUFFER_BIT' if required
gluLookAt( ... );
// I like to use gluLookAt, or at least I _italic_used to! Now I implement my own camera...
// That is another fun thing you should try if you are comfortable with 3D geometry and hard math!
// The fourth step is to draw your scene. You may want to put lighting stuff first or in with the drawing
glutWireTeapot( ... );
方法二:
最佳答案
我将我的 reshape 回调函数定义为:
调用 glViewport(...)
一次在开始。
然后用单位矩阵重新加载投影矩阵:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glPerspective(...)
glMatrixMode(GL_MODELVIEW);
gluLookAt(...)
如果您需要更改相机位置,可以随时调用。
关于opengl - gluPerspective、glViewport、gluLookAt 以及 GL_PROJECTION 和 GL_MODELVIEW 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053334/
我很难理解这些是如何工作的。首先,在 2d 游戏中,投影矩阵应该设置为左、右、上、下与窗口匹配的正交投影矩阵,对吗?但是当窗口调整大小时,我应该只更改 glViewport,而不是投影矩阵吗?以及如何
在“多点触控”环境中,显示在表面上的任何应用程序都可以旋转/缩放到用户的方向。实际的解决方案是在 FBO 上绘制应用程序,并绘制一个带有纹理的旋转/缩放矩形。我不认为这对性能有好处,而且所有显卡都不提
我有一个在世界坐标中定义的对象,比如一个以 (2,3) 为中心、半径为 4 的圆。如果我希望圆不变形,则在视口(viewport)中完全可见并在视口(viewport)中尽可能大,我如何制定一个 gl
我对 glViewport 有疑问。在我的小程序中,我有两个视口(viewport)。我可以在其中一个视口(viewport)中绘制一个表格(使用 motionfunc),在另一个视口(viewpor
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我制作了一个大小为 800x600 的窗口。我打了电话 gluOrtho2D(-400,400,-300,300); glViewport(400,300,400,300); 我在 (-100,-10
在底部编辑我已添加源文件 我的程序只是渲染一个三角形,但它工作正常,但是当我使用glviewport函数将其设置为x和y的createwindow尺寸,即640和640并在两台不同的计算机上运行相同的
我读了这个tutorial我正确地执行了它。 但是,我想应用一些更改。第一个变化是看到该圆的不同 View ,例如仅显示圆的 1/4。我知道这是由 glViewPort(parameters) 完成的
我正在使用现代 opengl,我的目标是调试视锥体剔除。为了实现这一点,我创建了另一个视口(viewport),这样我就可以在我的主要程序中移动时查看我的整个模型和我的平截头体移动。 它有效,但仍然有
我正在对 FrameBufferObject 进行渲染传递,这样我就可以在下一个渲染传递中将结果用作纹理。查看教程,我需要调用: glBindFramebuffer(GL_TEXTURE2D, mFr
在 OpenGL-ES 上,我对设置之间的区别感到困惑 glOrthof() glViewPort() GLU.gluOrtho2D() 及其各自的参数。因为我相信这一切都将您可以看到的部分设置为指
我有一个包含大约 3 个不同大小的帧缓冲区的程序。我在开始时初始化它们,为它们提供适当的渲染目标并更改每个的视口(viewport)大小。 我原本以为你只需调用glViewport仅当您初始化帧缓冲区
我用 OpenGL 和 C 编写了一个小型拼贴游戏引擎,但我似乎无法弄清楚问题出在哪里。我的主循环看起来像这样: void main_game_loop() { (poll for event
我创建了一个带有 Canvas 的 JFrame,如下面的代码所示。我想做的是在屏幕尺寸更新时调整 openGL 上下文的大小。这应该像调用 glViewport() 一样简单,我在名为 resize
我刚刚开始使用 opengl es 为我的跨平台框架(iOS 和 Android)制作渲染器。当我到达视口(viewport)的东西(分屏的东西需要)并注意到 iOS 和 Android 之间存在差异
我正在试验新的 QOpenGLWidget 类(请注意,这不是 QGLWidget 类)。 我正在画一个三角形。我有一个普通的顶点着色器,它接收剪辑空间中的坐标,因此不涉及矩阵或投影。其中一个顶点的坐
我将 glViewport 放在 QOpenGLWidget::resizeGL 覆盖的虚拟函数中,它确实被调用并设置视口(viewport)仅使用部分小部件空间。但它没有任何效果,内容仍然绘制到小部
在大多数 Android OpenGL 示例中,我看到人们在 onSurfaceChanged 中调用 glViewport。但是,我只是注意到,如果我将其注释掉,我的程序的行为仍然相同。所以有必要调
原始问题 我想使用“gluPerspective”、“glViewport”和“gluLookAt”来操作我的相机和屏幕。 我将哪些功能应用于哪种矩阵模式?我应该/必须以什么顺序使用它们? 例如,我正
为什么我们将 0 作为 GLES20.glViewport(0, 0, width, height) 的前两个参数传递?什么意思? 最佳答案 看看规范,它解释了一切:Opengl spec . 参数
我是一名优秀的程序员,十分优秀!