Skip to content

Latest commit

 

History

History
103 lines (70 loc) · 1.98 KB

13.新建网格类.md

File metadata and controls

103 lines (70 loc) · 1.98 KB

GameEngine Java 3D V2.0

13.网格类 mesh

该类主要用来返回或设置网格面对应的材质、顶点数组、纹理坐标数组、顶点索引

缓存工具 用来存储网格类的每个顶点类的x y z 数据

public class Util {

    public static FloatBuffer createFloatBuffer(int size)
    {
        return BufferUtils.createFloatBuffer(size);
    }

    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;
    }

}

网格类

public class Mesh {
    private int vbo;
    private int size;

    public Mesh()
    {
        vbo = glGenBuffers();
        size = 0;
    }


    public void addVertices(Vertex[] vertexs)
    {
        size = vertexs.length;

        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glBufferData(GL_ARRAY_BUFFER, Util.createFlippedBuffer(vertexs), GL_STATIC_DRAW);
    }

    public void draw()
    {
        glEnableVertexAttribArray(0);

        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0);


        glDrawArrays(GL_TRIANGLES, 0, size);

        glDisableVertexAttribArray(0);

    }
}

并加入一些渲染的工具类:

public class RenderUtil {
    public static void clearScreen()
    {
        //TODO: Stencil Buffer
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    }

    public static void initGraphics()
    {
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

        glFrontFace(GL_CW);
        glCullFace(GL_BACK);
        glEnable(GL_CULL_FACE);
        glEnable(GL_DEPTH_TEST);

        //TODO: Depth clamp for later

        glEnable(GL_FRAMEBUFFER_SRGB);
    }
}