所以这段代码应该渲染一个矩形(最终我希望它渲染一个立方体,但是如果不能先绘制一个矩形,尝试这样做是没有意义的)。
我有检查GL错误的代码,虽然有一个,但这个问题的答案让我觉得它不相关(它是GL_INVALID_ENUM
,在glewInit()之后立即抛出)
)。
这是我的代码:
主要:
#include <glm/glm.hpp>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <GL/gl.h>
#include <GL/glext.h>
#include <thread>
#define GLEW_STATIC
#include <GL/glew.h>
#include <engine.hpp>
GLuint VertexBuffer, VertexArray, ElementBuffer, ShaderProgram;
GLfloat vertices[] = {
-0.5, 0.5, 0.5, // Front Top Left - 0
0.5, 0.5, 0.5, // Front Top Right - 1
0.5, -0.5, 0.5, // Front Bottom Right - 2
-0.5,-0.5, 0.5, // Front Bottom Left - 3
-0.5, 0.5,-0.5, // Back Top Left - 4
0.5, 0.5,-0.5, // Back Top Right - 5
0.5, -0.5,-0.5, // Back Bottom Right - 6
-0.5,-0.5,-0.5, // Back Bottom Left - 7
};
GLuint elements[]{
0,1,2,
2,3,0
};
int main()
{
CheckForGLErrors(__func__, __LINE__);
/*Initialization*/
GLFWwindow* window = InitializeContext();
CheckForGLErrors(__func__, __LINE__);
//Create our element buffer object using the elements array
ElementBuffer = InitializeElementBuffer(elements, sizeof(elements)/sizeof(GLuint));
CheckForGLErrors(__func__, __LINE__);
//Load and compile the shaders
ShaderProgram = LoadShaders("vertexshader.cpp", "fragmentshader.cpp");
CheckForGLErrors(__func__, __LINE__);
//Create our vertex attribute array
VertexArray = CreateVertexArray();
CheckForGLErrors(__func__, __LINE__);
//Create our vertex buffer object using the vertices array
VertexBuffer = InitializeVertexBuffer(vertices, sizeof(vertices)/sizeof(GLfloat));
CheckForGLErrors(__func__, __LINE__);
//Assign our array the appropriate structure
InitializeVertexArray(ShaderProgram);
CheckForGLErrors(__func__, __LINE__);
while(!glfwWindowShouldClose(window))
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS){
glfwSetWindowShouldClose(window, GL_TRUE);
}
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
CheckForGLErrors(__func__, __LINE__);
glfwSwapBuffers(window);
glfwPollEvents();
}
CheckForGLErrors(__func__, __LINE__);
glfwTerminate();
}
引擎(pastebin链接,因为SO似乎不希望我的帖子中有那么多文本)更新以修复用户指出的缺陷3256930
- engine_shaders.hpp(同样的理由再次使用pastebin)
我很乐意按要求提供更多资料。
注意:我以前已经能够画三角形了,但是我的旧代码并没有告诉我为什么失败。
将数组作为函数参数传递时,它将其视为指针,并且不能在函数中使用sizeof来获取数组的完整大小。在这种情况下,还需要将数组的大小作为函数参数传递。调用glBufferData时,size参数需要数组的字节大小,而不是数组中的元素数。
这是代码中唯一可能有错误的部分: 你能在这段代码中看到什么错误吗?启用glEnable(GL_TEXTURE_2D)并没有什么不同。纹理坐标是正确的,片段和顶点着色器肯定是正确的。 解决了这不是问题,我仍在使用glGenerateMipmap(…)在glTexImage2D(…)之前。真正的问题是,当我的图像是GL_RGB格式时,我通过了格式GL_RGBA。另外我的t-
我正在渲染很多轴对齐的3D立方体。每个立方体的中心位置和/或颜色可能不同于其他立方体。这就是我现在渲染它的方式 My DrawCube()使用和存储在VBO中的顶点数据,简单地渲染立方体每一侧对应的6个四边形。glVertexPointer和glColorPointer用于设置属性元素。 这是可行的,但是我想通过使用可能是glDrawElementsInst的()来使用即时渲染。但是由于项目的一些
纹理根本不渲染,几何体都是黑色的。 截图:http://i.imgur.com/ypMdQY4.png 代码:http://pastebin.com/SvB8rxxt 我也会链接到我试图渲染的纹理和transformations.py模块,但是我没有被允许放置两个以上链接的声誉。谷歌搜索“现代opengl 02”会给你前者的教程,“转换py”会给你后者。 搜索“纹理材料开始”以查找纹理材料的设置位
我们当前的任务要求我们在openGL中使用较旧的固定管道方法。我们使用的是LWJGL 2.9.3。下面的代码显示一个三角形。问题是,它会疯狂地闪烁。显示器。swapBuffers()方法不会引发异常,并且无论是否包含它都没有任何区别。我根据这个问题创建了这个示例: gluPerspective、GluViewport、gluLookAt以及GL_投影和GL_MODELVIEW矩阵 编辑 还有一件事
我正在尝试使用OpenGL GLSL着色器渲染到纹理。首先,我尝试用白色填充30x30纹理的每个像素。我将顶点着色器索引从0传递到899,表示纹理的每个像素。对吗?顶点着色器: 片段着色器:
我正试图按照本教程学习pygame。我正试图繁殖敌人的物体,但我认为我犯了一个错误,因为没有显示任何东西。 据我所知,我必须创建一个敌人类,然后添加一个事件来添加敌人(ADDENEMY)。当该事件被调用时(由于计时器的作用,每250毫秒一次),它应该会显示一个向左移动的敌人,直到它到达显示的末尾。 我有一组敌人精灵和一组所有精灵,我使用screen.blit和for循环将所有精灵中的每个实体渲染到