注意:很抱歉链接/图片只不过是文本-作为一个新用户,我不能张贴图片,也不能张贴
所以我一直在使用被弃用的OpenGL,并在几周前决定最终转向更现代的方法。我使用Open.gl作为资源(我发现LWJGL教程是不一致和稀疏的),并且能够渲染到本教程的最后一幅图像。然而,我在下一页遇到了一些严重的问题(渲染一个立方体)。
我在这个问题上做了很多研究,并多次改进/重新组织我的代码,以便完全理解每个组件的用途,并确保我没有错过一些基本的东西(如忘记翻转缓冲区),并且只设法缩小我认为可能发生错误的区域。
因此,我的基本目标是使用此示例代码呈现多维数据集:http://open.gl/content/code/c5_cube.txt
这是我的比较代码:http://pastie.org/5864112#241
我从代码中得到的结果如下:
如果我只在Z方向平移视图矩阵,我会得到与上一篇教程末尾的图像完全相同的结果:< code > https://dl . Dropbox . com/u/38489921/vbo 11 . png
//set up view matrix - TODO: problem 1?
Matrix4f view = new Matrix4f();
view.setIdentity();
view.translate(new Vector3f(0.0f, 0.0f, -2f));
view.m13 = 1f;
FloatBuffer viewSend = BufferUtils.createFloatBuffer(16);
view.store(viewSend);
viewSend.flip();
int uniView = glGetUniformLocation(shaderProgram, "view");
glUniformMatrix4(uniView, false, viewSend);
这实际上可能是我的问题——示例代码使用了glm::lookAt(),我没有权限访问它,所以我可能对矩阵做了完全错误的事情。
继续前进,如果我在Y方向上平移视图矩阵任意数量(下图代码),我得到一种扭曲的立方体:https://dl.dropbox.com/u/38489921/vbo12.png
//set up view matrix - TODO: problem 1?
Matrix4f view = new Matrix4f();
view.setIdentity();
view.translate(new Vector3f(0.0f, 1.0f, -2f));
view.m13 = 1f;
FloatBuffer viewSend = BufferUtils.createFloatBuffer(16);
view.store(viewSend);
viewSend.flip();
int uniView = glGetUniformLocation(shaderProgram, "view");
glUniformMatrix4(uniView, false, viewSend);
这让我认为这是透视投影的问题,所以我做了更多的研究,并确保我的透视()函数是正确的。对投影实现的更改几乎没有更改视觉结果,因此我将在此处突出显示该函数以及我如何使用它:
//set up projection matrix //TODO: problem 2?
Matrix4f proj = perspective(90f, 600f / 800f, 1f, 10f);
FloatBuffer projSend = BufferUtils.createFloatBuffer(16);
proj.store(projSend);
projSend.flip();
int uniPersp = glGetUniformLocation(shaderProgram, "proj");
glUniformMatrix4(uniPersp, false, projSend);
private Matrix4f perspective(float fov, float aspectRatio, float zNear, float zFar) {
float zm = zFar - zNear;
float zp = zFar + zNear;
Matrix4f persp = new Matrix4f();
persp.m00 = (1 / (float)Math.tan(Math.toRadians(fov / 2))) / aspectRatio;
persp.m11 = 1 / (float)Math.tan(Math.toRadians(fov / 2));
persp.m22 = -zp / zm;
persp.m23 = -1;
persp.m32 = -((2 * zNear * zFar) / zm);
return persp;
}
在我看来,这是一个非常奇怪的错误,我完全无法理解。经过大量的研究试图自己修复它,老实说,它已经到了我的大脑受伤的程度,所以我想我应该寻求一些帮助。
我在这里的目标是确定导致此错误的原因,原因以及如何修复它(以及,如有必要,我可以使用任何特殊提示或技巧来确保此类错误不再发生)。我非常感谢任何帮助,并会提供所需的任何进一步信息。
非常感谢,乔诺。
我不太明白你有什么问题。你说当你转换你的视图矩阵时,你会得到意想不到的行为...正确
我在你的矩阵设置中没有看到任何错误,所以,请提供你的GLSL着色器代码和你声明图像顶点信息的时刻(不是作为纹理的图像,而是作为空间中的3D对象的图像)。我想这是有问题的(当你只有4个顶点时,你不可能得到一个立方体,所以也许你有更多)。
另外,只是为了帮助您,这是“现代胶眼”的代码
public Matrix4f set(float cameraX, float cameraY, float cameraZ,
float lookX, float lookY, float lookZ){
//My advice to you: you shouldn't create new matrix everytime,
//it will give you little glitches.
//Create some new class containing this method, change type to void
//and declare "matrix" as a field - make your own "camera" object (java object)
Matrix4f matrix = new Matrix4f();
Matrix4f aux = new Matrix4f();
Vector3f dir = new Vector3f(lookX - cameraX, lookY - cameraY, lookZ - cameraZ);
Vector3f up = new Vector3f(0, 1f, 0);
Vector3f right = new Vector3f();
dir.normalise();
Vector3f.cross(dir,up,right);
right.normalise();
Vector3f.cross(right,dir,up);
up.normalise();
matrix.m00 = right.getX();
matrix.m01 = right.getY();
matrix.m02 = right.getZ();
matrix.m03 = 0.0f;
matrix.m10 = up.getX();
matrix.m11 = up.getY();
matrix.m12 = up.getZ();
matrix.m13 = 0.0f;
matrix.m20 = -dir.getX();
matrix.m21 = -dir.getY();
matrix.m22 = -dir.getZ();
matrix.m23 = 0.0f;
matrix.m30 = 0.0f;
matrix.m31 = 0.0f;
matrix.m32 = 0.0f;
matrix.m33 = 1.0f;
//setup aux as a translation matrix by placing positions in the last column
aux.m30 = -cameraX;
aux.m31 = -cameraY;
aux.m32 = -cameraZ;
//multiplication(in fact translation) viewMatrix with aux
Matrix4f.mul(matrix, aux, matrix);
return matrix;
}
我发现了你的问题:
view.m13 = 1f;
这意味着你的相机在第四维W空间,所以当你转换你的视图矩阵时,你的图像也在W方向移动。所以,把这条线去掉。
此外,这是更好地理解LWJGL中的矩阵的提示:
m00 |m10 |m20 |m30 |||_||||Yx |Zx |宽
m01|m11 | m21 124;m31
m02 | M12 | m22 | m32 | | | _ | | Xz | Yz | Zz | Wz
m03 | M13 | M23 | m33 | | | _ | | Xw | Yw | Zw | Ww
m03,m13,m23几乎总是必须为0,m33 = 1。
当做
在我的主类下面,我试图从搅拌机渲染一个obj. obj文件,在将其重新格式化为(据称)为我的渲染工作后,它会出现错误。我如何解决这个问题? 主要类: OBJLoader类: 类别模型: 类面: 对不起,如果这是过度的,我知道错误来自第85行,但我似乎不知道如何修复它。 OBJ文件示例(精简):
每当我运行这个,窗口就会弹出,我看到这个。(当我运行游戏时,我看到了这一点) 如果您简单地创建一个新的Java项目,导入OpenGL、GLFW和LWJGL以及本机,然后复制代码,就可以重新创建它(删除包)
我在GeoServer中正确显示国家边界时遇到问题,您可以从下面的链接(意大利地图)中看到。 http://trideg.server.de/tridec/wms?service=WMS 问题出现在边缘非常锋利的国家边界上(我假设),例如阿尔巴尼亚的形状正确地显示: http://trideg.server.de/tridec/wms?service=WMS 我从naturalearthdata.
对于使用Box2DDebugRenderer进行渲染Box2D调试,我有一些问题。我有两个正交摄像机,一个用于渲染世界(名为Cam),另一个用于HUD(healthBar,Armor,…)(名为hudCam)。 我试图渲染: > b2dr。渲染(世界,凸轮组合)- 我找不到一种方法来渲染Box2D完全像凸轮,看到所有机构的边缘。 如果有人理解我的问题,请帮助我! 谢谢。
我面临一些渲染问题。试图建立一个2d平台游戏,我的计划是创建与搅拌机的演员。我是新手,搅拌机和libgdx,不知道错误在哪里。 在《搅拌机》中,演员看起来很好。由libgdx渲染,我只看到奇怪的形式,根本不像我的演员。 -----编辑好,我缩小了问题的范围。在blender中,我创建了一个简单的立方体。在我的libgdx应用程序中,如果只渲染多维数据集而不渲染其他内容,则可以很好地渲染此多维数据集
我正在尝试为mathml呈现SVG。它在chrome上看起来不错,但在IE中,svg的标签有附加属性,我们如何避免添加这些附加属性?请尝试在chrome和IE中将下面的mathml呈现为SVG。您可以看到生成的SVG标记中的差异(两种浏览器中的附加scrrenshots) MathML是: