Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSX上OpenGL 2.1中未绘制三角形_Java_Macos_Opengl_Geometry_Gldrawarrays - Fatal编程技术网

Java OSX上OpenGL 2.1中未绘制三角形

Java OSX上OpenGL 2.1中未绘制三角形,java,macos,opengl,geometry,gldrawarrays,Java,Macos,Opengl,Geometry,Gldrawarrays,下面是一篇关于使用OpenGL在Java中创建游戏引擎的教程 我正试图在屏幕上渲染一个三角形。一切都很好,我可以改变背景颜色,但三角形不会显示。我也试过运行教程系列中提供的代码,但仍然不起作用 链接到教程: 链接到视频中使用的代码: 设置 我试过检查OpenGL版本,我相信我有2.1版本 MacOSX Java-Eclipse Mesh.java import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL1

下面是一篇关于使用OpenGL在Java中创建游戏引擎的教程

我正试图在屏幕上渲染一个三角形。一切都很好,我可以改变背景颜色,但三角形不会显示。我也试过运行教程系列中提供的代码,但仍然不起作用

链接到教程:

链接到视频中使用的代码:

设置

  • 我试过检查OpenGL版本,我相信我有2.1版本
  • MacOSX
  • 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);
    }
}
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
}
}
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;
    }
}
RenderUtil.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);
    }
}
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
}
}
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;
    }
}
Util.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);
    }
}
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
}
}
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;
    }
}
import java.nio.FloatBuffer;
导入org.lwjgl.BufferUtils;
公共类Util
{
//创建一个浮点缓冲区(我们需要它,因为java很奇怪)
公共静态FloatBuffer createFloatBuffer(整型大小)
{
返回BufferUtils.createFloatBuffer(大小);
}
//翻转缓冲区以满足OpenGL的期望
公共静态FloatBuffer createFlippedBuffer(顶点[]顶点)
{
FloatBuffer=createFloatBuffer(顶点.length*顶点.SIZE);
对于(int i=0;i
是否尝试一次导入

import static org.lwjgl.opengl.GL11.*

我只有一个在我的导入,也尝试导入您需要单独的软件包。有一件事你可能会做错,那就是导入多个版本的OpenGL,你使用的是一个无效的传统和现代OpenGL的混合体

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


如果您刚刚开始,最好的选择可能是坚持使用现有的着色器,并研究如何开始实现自己的着色器。如果您想让代码使用传统的固定管道(仅在OpenGL的兼容性配置文件中受支持),则需要使用
glvertexpinter()
glEnableClientState()
函数。视频结尾处的注释说您可能需要一个shaderOh,您是对的!我在旅行,所以我下载了视频,但看不到。虽然还有一些事情要做,但是谢谢:)谢谢你的帮助!我已经设法让OpenGL4.1在Mavericks上运行,使用以下指南:下一步:添加GLSL着色器!