三角形没有在OSX上的OpenGL 2.1中绘制

我正在学习使用OpenGL在Java中创建游戏引擎的教程。

我想在屏幕上渲染一个三角形。 一切都运行正常,我可以改变背景颜色,但三角形不会显示。 我也试过运行作为教程系列的一部分提供的代码,它仍然无法正常工作。

链接到教程: http : //bit.ly/1EUnvz4

链接到video中使用的代码: http : //bit.ly/1z7XUlE

建立

  • 我已经尝试检查OpenGL版本并且相信我有2.1。
  • Mac OSX
  • Java – Eclipse

Mesh.java

import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL15.*; import static org.lwjgl.opengl.GL20.*; public class Mesh { private int vbo; //pointer to the buffer private int size; //size of the data to buffer public Mesh () { vbo = glGenBuffers(); size = 0; } public void addVertices (Vertex[] vertices) { size = vertices.length; //add the data by first binding the buffer glBindBuffer (GL_ARRAY_BUFFER, vbo); //vbo is now the buffer //and then buffering the data glBufferData (GL_ARRAY_BUFFER, Util.createFlippedBuffer(vertices), GL_STATIC_DRAW); } public void draw () { glEnableVertexAttribArray (0); //divide up the data into a segment glBindBuffer (GL_ARRAY_BUFFER, vbo); //vbo is now the buffer //tell OpenGL more about the segment: //segment = 0, elements = 3, type = float, normalize? = false, vertex size, where to start = 0) glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0); //draw GL_TRIANGLES starting from '0' with a given 'size' glDrawArrays (GL_TRIANGLES, 0, size); glDisableVertexAttribArray (0); } } 

RenderUtil.java

 import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL30.*; public class RenderUtil { public static void clearScreen () { //TODO: Stencil Buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } //set everything to engine defaults public static void initGraphics () { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // default color glFrontFace(GL_CW); // direction for visible faces glCullFace(GL_BACK); // direction for back faces glEnable (GL_CULL_FACE); // don't draw back faces glEnable (GL_DEPTH_TEST); // determines draw order by pixel depth testing //TODO: Depth clamp for later glEnable (GL_FRAMEBUFFER_SRGB); // do exponential correction on gamma so we don't have to } } 

Util.java

 import java.nio.FloatBuffer; import org.lwjgl.BufferUtils; public class Util { //create a float buffer (we need this because java is weird) public static FloatBuffer createFloatBuffer (int size) { return BufferUtils.createFloatBuffer(size); } //flip the buffer to fit what OpenGL expects public static FloatBuffer createFlippedBuffer (Vertex[] vertices) { FloatBuffer buffer = createFloatBuffer(vertices.length * Vertex.SIZE); for (int i = 0; i < vertices.length; i++) { buffer.put(vertices[i].getPos().getX()); buffer.put(vertices[i].getPos().getY()); buffer.put(vertices[i].getPos().getZ()); } buffer.flip(); return buffer; } } 

您正在使用传统和现代OpenGL的无效组合。

您调用的glVertexAttribPointer()glEnableVertexAttribArray()函数用于设置通用顶点属性。 这是在当前版本的OpenGL(桌面OpenGL的核心配置文件,或OpenGL ES 2.0及更高版本)中设置顶点属性的唯一方法。 它们也可以在旧版本的OpenGL中使用,但只能与提供在GLSL中实现的自己的着色器结合使用。

如果您刚刚开始,您最好的选择可能是坚持您拥有的,并研究如何开始实现自己的着色器。 如果您希望代码使用传统的固定管道(仅在OpenGL的兼容性配置文件中支持),则需要使用glVertexPointer()glEnableClientState()函数。

尝试一次导入?

 import static org.lwjgl.opengl.GL11.* 

我只有一个导入,也尝试单独导入你需要的包。 您可能做错的一件事是导入多个版本的OpenGL