我有一个matrix4f,我正在使用统一变量从我的ShaderProgram类传递到我的顶点着色器类。这个矩阵应该充当顶点的翻译。以下是矩阵的样子
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
当我将该变量(称为“test”)乘以顶点(称为gl_Vertex)时,什么都不可见,它只是留下一个空白屏幕。这只有在我将其乘以统一变量“test”时才会发生,如果我将其乘以具有相同值的新matrix4f,它会正常工作。如果我使用向量统一变量而不是矩阵,它会按预期工作。
我是否正确地将变量传递到GLSL顶点着色器类?如果是这样,为什么我的quad没有出现在屏幕上?
这是我的顶点着色器
#version 400 core
uniform vec4 translation;
uniform vec4 size;
uniform vec4 rotation;
uniform mat4 test;
in vec2 textureCoords;
in vec3 position;
out vec2 pass_textureCoords;
void main(void){
//pass texture cords
pass_textureCoords = textureCoords;
//This works by multiplying by identity matrix
//gl_Position = mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) * gl_Vertex;
//This works by passing vec4's not matrix4
/*gl_Position = vec4(((gl_Vertex.x + translation.x)*size.x),
((gl_Vertex.y + translation.y)*size.y),
((gl_Vertex.z + translation.z)*size.z),
((gl_Vertex.w + translation.w)*size.w)
);*/
//this leaves a blank window
gl_Position = test * gl_Vertex;
}
我是这样声明统一变量位置的:
translationLocation = GL20.glGetUniformLocation(programID, "translation");
sizeLocation = GL20.glGetUniformLocation(programID, "size");
rotationLocation = GL20.glGetUniformLocation(programID, "rotation");
textureLocation = GL20.glGetUniformLocation(programID, "textureSampler");
testMat = GL20.glGetUniformLocation(programID, "test");
这就是我如何呈现均匀变量
public void start(){
GL20.glUseProgram(programID);
Vector4f translation = offset.getTranslation();
Vector4f size = offset.getSize();
Vector4f rotation = offset.getRotation();
GL20.glUniform4f(translationLocation, translation.x, translation.y, translation.z, translation.w);
GL20.glUniform4f(sizeLocation, size.x, size.y, size.z, size.w);
GL20.glUniform4f(rotationLocation, rotation.x, rotation.y, rotation.z, rotation.w);
FloatBuffer buff = BufferUtils.createFloatBuffer(16);
offset.getTestTranslation().storeTranspose(buff);
GL20.glUniformMatrix4(testMat, false, buff);
GL20.glUniform1i(textureLocation, 0);
}
这就是我在将变量传递给GLSL之前声明变量的方式
Vector4f translation;
Vector4f size;
Vector4f rotation;
Matrix4f testTranslation;
public Offset(){
translation = new Vector4f(0, 0, 0, 0);
size = new Vector4f(1, 1, 1, 1);
rotation = new Vector4f(0, 0 , 0, 0);
testTranslation = new Matrix4f();
testTranslation.translate(new Vector3f(0,0,0));
}
好吧,事实证明,我使用以下方法将matrix4f转换为浮子Buffer。
matrix4f.storeTranspose(buff)
显然这不能正确地将矩阵存储到浮点缓冲区中。我现在使用这种方法在渲染着色器程序时将矩阵发送到顶点着色器
public void setMatrixArray(boolean transposed, Matrix4f[] matrices){
FloatBuffer matrixBuffer = BufferUtils.createFloatBuffer(16*matrices.length);
for(int i = 0; i<matrices.length; i++) {
matrices[i].store(matrixBuffer);
}
matrixBuffer.flip();
GL20.glUniformMatrix4(testMat,transposed,matrixBuffer);
}
我试图在底部导航栏下显示一个视图,以向用户显示一条消息。 需要使用翻译动画隐藏此视图。 没有动画的当前行为看起来像下面的附件 在执行动画时,翻译动画所覆盖的部分将从屏幕上移除,并留下一个空白(我无法去掉它): 下面是动画的代码: 有没有其他方法来执行这个动画而不得到这个问题? 提前致谢
我使用的是EclipseIDE,下面的代码在浏览器上显示空白屏幕。我不知道为什么它会显示空白屏幕。有什么想法吗?提前谢谢。 请查找部署描述符文件。网状物xml:
我以前也发布过同样的问题,但我现在再次发布,因为我在代码中发现了更多的错误并更正了它们。然而,我仍然面临着和以前一样的问题! 原始帖子:我几周前刚开始学习Python,我正在学习一个教程,用pygame构建一个数独解算器! 我现在面临的问题是,每当我尝试运行代码时,只会弹出一个黑色的空白窗口。我已经一遍又一遍地检查我的代码,但我似乎找不到问题。。。我不确定我的代码中到底是哪里出了问题,所以请原谅我
我的有问题,当我在手机上启动应用程序时,它会显示约0.5秒的白色屏幕。扩展了,在中,我声明为启动器,肖像模式为。 代码: XML:
我有一个基本的OpenGL应用程序,我想使用我的投影矩阵。 这是我的矩阵: (WorldCoordinates是Matrix4结构,它只包含一个名为m的变量,即浮点[4][4])(宽度和高度是两个s)。然后,我使用以下方法将此坐标应用于我的<code>顶点 (Shader是一个类,并且有一个绑定()方法,它只是glUseProgram)。 这是我的顶点着色器GLSL 使用这个,它不起作用。但将gl
问题内容: 嗨,我正在制作一个游戏,并且在游戏中添加了一个共享按钮。我希望用户能够在一条消息中彼此共享一条消息,URL和屏幕快照。它的共享方面工作正常,并且一切正常,但屏幕快照本身显示为空白。这是我用来截屏的代码: 请帮助我解决此问题,请确保使用Swift语言来解决。如果这有所作为,我也使用SpriteKit技术。我是编码新手,所以请非常清楚。非常感谢你! 问题答案: 更新: Xcode 8.2.