即使这个问题被问了很多次(我读了所有这些,没有一个解决方案对我有效),我也试图用LWJGL和OpenGL建模一个矩形,但每次都会崩溃。我的电脑数据如下:
AMD Ryzen 1600x | MSI Nvidia GTX 1060(6GB)| MSI x370 Carbon Pro主板
我还在英特尔安装程序上尝试了这个,使用i7处理器和Nvidia Quadro K1000M设置,但您可以在以下内容中看到相同的错误:
https://hastebin.com/ayiqiritov.makefile
我的绘画方法:
public void render(RawModel model){
GL30.glBindVertexArray(model.getVaoID());
GL20.glEnableVertexAttribArray(0);
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, model.getVertexCount());
GL20.glDisableVertexAttribArray(0);
GL30.glBindVertexArray(0);
}
在这个类中,我创建了VAO和VBO,并将数据存储到其中:
private List<Integer> vaos = new ArrayList<Integer>();
private List<Integer> vbos = new ArrayList<Integer>();
public RawModel loadToVAO(float[] positions) {
int vaoID = createVAO();
storeDataInAttributeList(0, positions);
unbindVAO();
return new RawModel(vaoID, positions.length / 3);
}
public void cleanUp() {
for (int vao : vaos) {
GL30.glDeleteVertexArrays(vao);
}
for (int vbo : vbos) {
GL15.glDeleteBuffers(vbo);
}
}
private int createVAO() {
int vaoID = GL30.glGenVertexArrays();
vaos.add(vaoID);
GL30.glBindVertexArray(vaoID);
return vaoID;
}
private void storeDataInAttributeList(int attributeNumber, float[] data) {
int vboID = GL15.glGenBuffers();
vbos.add(vboID);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
FloatBuffer buffer = storeDataInFloatBuffer(data);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
GL20.glVertexAttribPointer(attributeNumber, 3, GL11.GL_FLOAT, false, 0, 0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}
private void unbindVAO() {
GL30.glBindVertexArray(0);
}
private FloatBuffer storeDataInFloatBuffer(float[] data) {
FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length);
buffer.put(data).position(0);
buffer.flip();
return buffer;
}
我的主要方法是:
public static void main(String[] args){
if(!glfwInit()){
throw new IllegalStateException("Failed");
}
System.out.println(GL11.glGetString(GL11.GL_VERSION));
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MINOR, 3);
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MAJOR, 4);
long window = GLFW.glfwCreateWindow(640, 480, "Hello World", 0, 0);
if(window == 0){
throw new IllegalStateException("Failed to create Window");
}
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window, (vidmode.width() - 640) / 2, (vidmode.height() - 480) / 2);
glfwShowWindow(window);
Loader loader = new Loader();
Renderer renderer = new Renderer();
float[] vertices = {
-0.5f, 0.5f, 0f,
-0.5f, -0.5f, 0f,
0.5f, -0.5f, 0f,
0.5f, -0.5f, 0f,
0.5f, 0.5f, 0f,
-0.5f, 0.5f, 0f
};
RawModel model = loader.loadToVAO(vertices);
while(!glfwWindowShouldClose(window)){
renderer.prepare();
renderer.render(model);
glfwPollEvents();
}
loader.cleanUp();
GLFW.glfwTerminate();
}
所以我已经尝试过了:
更新图形卡驱动程序、更新java、更新Windows、设置新eclipse、重新安装java并删除。eclipse中的元数据。
谁能帮帮我吗?
根据评论
我还没有实现着色器
OpenGL中最先进的渲染方式是使用着色器。
如果您不使用着色器,那么您必须通过glVertexPointer
定义顶点数据数组。glVertexPointer
为固定函数顶点坐标属性指定数组。如果您没有着色器程序,那么您必须使用固定函数管道。
private void storeDataInAttributeList(int attributeNumber, float[] data) {
int vboID = GL15.glGenBuffers();
vbos.add(vboID);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
FloatBuffer buffer = storeDataInFloatBuffer(data);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
GL11.glVertexPointer( 3, GL11.GL_FLOAT, 0, 0 ); // <---------
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}
此外,您还必须通过glEnableClientState(GL_vertex_ARRAY)
启用顶点坐标的客户端功能:
public void render(RawModel model){
GL30.glBindVertexArray(model.getVaoID());
GL11.glEnableClientState( GL11.GL_VERTEX_ARRAY ); // <---------
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, model.getVertexCount());
GL11.glDisableClientState( GL11.GL_VERTEX_ARRAY ); // <---------
GL30.glBindVertexArray(0);
}
进一步注意,在使用OpenGL指令(如GL30.glGenVertexArray()
)之前,您必须创建“GLCapables”实例并使OpenGL绑定可供使用,并且您必须确保OpenGL上下文是最新的。
调用glfwMakeContextCurrent(窗口)
和GL。createCapabilities()
在创建窗口之后,在任何OpenGL指令之前:
long window = GLFW.glfwCreateWindow(640, 480, "Hello World", 0, 0);
if(window == 0){
throw new IllegalStateException("Failed to create Window");
}
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window, (vidmode.width() - 640) / 2, (vidmode.height() - 480) / 2);
glfwMakeContextCurrent(window); // <-----
glfwShowWindow(window);
GL.createCapabilities(); // <-----
.....
最后,渲染循环中缺少glfwSwapBuffers
intglfwSwapBuffers
交换指定窗口的前后缓冲区。换句话说,简单地说,它会在屏幕上显示渲染到的缓冲区:
while(!glfwWindowShouldClose(window)){
renderer.prepare();
renderer.render(model);
glfwSwapBuffers(window); // <-----
glfwPollEvents();
}
另请参见LWJGL 3指南-入门
我有一个Selenium集线器,其中6个节点基于该平台注册如下: > 3平台作为WIN10 3平台作为VISTA 有没有办法通过提及OSname在平台上调用chrome浏览器,我已经尝试了几个选项,但看起来集线器随机调用驱动器而不是基于操作系统版本。 任何洞察都会有所帮助。在某些情况下,当我提到WIN10的chrome驱动程序时,chrome驱动器崩溃,如下所示: 节点注册如下: 和 如果能帮助解
问题内容: 当使用Lucene为文档建立索引时,我的JVM(1.6.0_29)在频繁使用时始终崩溃。我得到: 环境: JDK:1.6u29(与1.6_02相同的问题)Lucene版本3.4.0 vm_info:适用于linux-amd64 JRE(1.6.0_29-b11)的Java HotSpot(TM)64位服务器VM(20.4-b02),由“ java_re”于gcc 3.2.2于2011年
我一直在尝试将. ttf字体添加到我的android移动应用程序中。我正在使用Libgdx引擎创建我的应用程序,并尝试添加True Type扩展以允许使用. ttf字体。这是我正在运行以尝试创建字体的代码。 当我调用这段代码时,我的应用程序会给我消息,没有其他信息。我已经在核心和android项目中包含了和。我已经单击了在这两个项目上导出它们的选项。我已经在和文件夹中包含了两个文件。 谁能告诉我为
在Windows Phone8(诺基亚Lumia520)上调试应用程序时,我面临崩溃,我不知道为什么。游戏在Unity中开发,最初针对iOS和Android,现在被移植到WP8。失败发生在单步执行我的脚本之前,并且处理程序也无法到达。 调试器(仅本机)设置为在引发异常且用户未处理时中断。第一次调用堆栈是: 环境: Windows Pro 8.1 64位 Unity Pro 4.3.1F1 Micr
每次我打开Aptana它都会崩溃。 Java运行时环境检测到一个致命错误: 如果您想提交错误报告,请访问:http://bugreport.sun.com/bugreport/crash.jsp崩溃发生在Java虚拟机之外的本机代码中。有关报告错误的位置,请参见问题框。
问题内容: 通过Web Start启动从服务器后,我正在尝试安装Jenkins从服务器服务。尝试在Windows 10和Windows 8.1上安装时出现以下错误。 我可以在win 7上安装任何奴隶服务而没有任何问题。知道为什么会发生这种情况,或者是Jenkins的某些限制,还是我缺少一些依赖关系? 我的詹金斯版本是1.655,在安装时使用chrome浏览器。Jenkins master在Wind