我对OpenGL,SDL和OBJ-文件都很陌生,并且已经和一个问题斗争了很多天了。
OBJ纹理图像:
结果:OpenGL-SDL中的对象-窗口:
以下图片是将一条显示代码行更改为:
glTranslatef( 0.0, 1.0, -19.5 );
我的目标是“适合”"OpenGL“(它叫.)。模特?Framebuffer?对象?)进入SDL窗口的边界。或者可能“调整”SDL窗口到OpenGL对象的大小。为什么?因为在下一个步骤中,我将把整个SDL窗口“导出”到一个位图中,该位图将被用作地理信息系统软件中的数字化背景,用于地理参照。
我是否必须更改视图设置,还是有可能“抓取”OpenGL对象的大小以适应SDL主窗口?
例如,如果我将显示代码中的一行更改为:
glTranslatef( 0.0, 1.0, -19.5 );
OBJ文件中顶点"v“的”坐标“到底是什么?他们拥有哪一个“测量单位”?这是当地的土狼吗?
什么是纹理OpenGL对象“像素大小”(因为纹理模板的像素大小是1024x1024)?
我从在线教程中学到的许多代码,但我不确定它们对我的屏幕有什么影响。我对所有改变观点的可能性太困惑了。
所以任何帮助都是非常感谢的。这让我睡眠不好..。
发布于 2016-05-13 16:16:30
可以这样做的一种方法是,找到对象尺寸(遍历所有像素并确定每个轴上的最小值和最大值),在该深度找到对象相对于摄像机视点和视点的深度。最后,您可以找到应用于对象的最佳比例,以便它覆盖整个屏幕。
但这很复杂。它将更容易利用一个正交投影,然后“玩”与你的对象的规模。您仍然可以找到我前面提到的对象维度,这样可以直接做到这一点。使用这些:
glOrtho( -512, 512, -384, 384, -16, 16 );
// Remove the translations you were applying to your object
glScalef( 100.0f, 100.0f, 1.0f );
这应该允许您看到您的对象与一个正交投影。从这里开始,你应该能够调整标度值,直到你得到你想要的。
你能解释一下"Z“值吗?
首先这是我的错。它不完全是Z值,而是深度值。
默认情况下,当您在OpenGL中指定一个视图卷时,无论是使用正投影还是透视投影,“照相机”都会朝负Z轴的方向看。您可以使用lookAt
函数更改方向,但在您的示例中没有更改,因此得到了默认的视图方向。由于这个原因,你经常会看到Z深度被使用。
正投影定义了立方体/棱镜的观看量,其效果是所有物体,无论离观看者有多远,都会以相同的比例出现。glOrtho
函数的最后2个参数是near
和far
值,定义了查看卷的深度。在我提出的评论中,我使用:
glOrtho( -512, 512, -384, 384, -16, 16 )
由于默认情况下,相机是朝负Z方向看,以0为中心,我们可以看到体积内的物体的相对深度为-16,16。也就是说:
在|-16 * (0,0,-1)| = 16
的接近值和|16 * (0,0,-1)| = -16
的远值处。
OBJ文件中顶点"v“的”坐标“到底是什么?
很可能它们位于对象坐标(对象空间)中,它定义了每个顶点相对于对象本身的位置,其原点为0,0,0。是的,物体的局部坐标系。当您将转换应用到对象(即翻译)时,结果值将位于世界坐标(world space)中。
我是否必须更改视图设置,还是有可能“抓取”OpenGL对象的大小以适应SDL主窗口?
这得由你来决定。但它可能更有意义的缩放你的对象,以适应窗口,而不是相反。我给你演示了一种缩放物体的方法。
什么是纹理OpenGL对象“像素大小”(因为纹理模板的像素大小是1024x1024)?
当提到纹理像素时,我们称之为纹理像素。但我不明白你在问什么。
(它叫.?模特?Framebuffer?对象?)
https://stackoverflow.com/questions/37207415
复制相似问题