Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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 OpenGL只显示12个三角形中的3个_Java_Opengl_3d_Jogl - Fatal编程技术网

Java OpenGL只显示12个三角形中的3个

Java OpenGL只显示12个三角形中的3个,java,opengl,3d,jogl,Java,Opengl,3d,Jogl,我正在尝试学习现代OpenGL,使用OpenGL Superbibel(第6版)。因为我的主要编程语言是java,所以我使用jogl 我有一个问题,显示一个旋转立方体,12个三角形中只有3个显示。每次列表的前3个顶点(如果我注释掉一些顶点,将使用下一个顶点) 主要问题: 为什么12个三角形中只显示3个? 结果是这样的: 顶点着色器: #version 420 core layout (location = 1) in vec4 position; out VS_OUT{ vec4

我正在尝试学习现代OpenGL,使用OpenGL Superbibel(第6版)。因为我的主要编程语言是java,所以我使用jogl

我有一个问题,显示一个旋转立方体,12个三角形中只有3个显示。每次列表的前3个顶点(如果我注释掉一些顶点,将使用下一个顶点)

主要问题:

为什么12个三角形中只显示3个?

结果是这样的:

顶点着色器:

#version 420 core

layout (location = 1) in vec4 position;

out VS_OUT{
    vec4 color;
} vs_out;

uniform mat4 mv_matrix;
uniform mat4 proj_matrix;

void main(void){
   gl_Position = proj_matrix * mv_matrix * position;
   vs_out.color = position * 2.0 + vec4(0.5, 0.5, 0.5, 0.0);
} 
片段着色器:

#version 420 core

out vec4 color;
in VS_OUT{
  vec4 color;
} fs_in;

void main(void){
  color = fs_in.color;
}
Java代码: (从init方法内的应用程序类调用startup,在display方法内调用render)

public类listing9扩展了GLApplication{
私有int[]缓冲区=新int[1];
浮动方向=0.0f;
浮动[]项目矩阵=新浮动[16];
int mv_位置;
国际项目地点;
浮子st=0.001f;
公开上市9(){
超级();
}
@凌驾
受保护的空心渲染(GL4 GL4,浮动时间){
时间=st;
gl4.glViewport(0,0,GLApplication.windowSize.width,GLApplication.windowSize.height);
gl4.glClearColor(0.0f、0.25f、0.0f、1.0f);
gl4.glClearDepthf(1.0f);
gl4.glClear(GL.GL_颜色_缓冲_位| GL.GL_深度_缓冲_位);
gl4.glUseProgram(程序);
gl4.glUniformMatrix4fv(proj_位置,1,false,proj_矩阵,0);
浮动f=(浮动)时间*0.3f;
Matrix4 mv_矩阵=新Matrix4();
mv_矩阵平移(0.0f,0.0f,-20.0f);
mv_矩阵平移((浮点)数学sin(2.1f*f)*0.5f,
(浮动)数学cos(1.7f*f)*0.5f,
(浮动)(数学sin(1.3f*f)*数学cos(1.5f*f))*2.0f);
mv_矩阵旋转((浮动)时间*45.0f、0.0f、1.0f、0.0f);
mv_矩阵旋转((浮动)时间*81.0f、1.0f、0.0f、0.0f);
gl4.glUniformMatrix4fv(mv_location,1,false,mv_matrix.getMatrix(),0);
gl4.glDrawArray(GL.GL_三角形,0,36);
检查错误(gl4,“显示”);
}
@凌驾
受保护的无效启动(GL4 GL4){
program=loadProgram(gl4,新字符串[]{“l9vs”,“l9fs”},新int[]{
GL4.GL_顶点_着色器,GL4.GL_片段_着色器});
mv_位置=gl4.glGetUniformLocation(程序,“mv_矩阵”);
proj_location=gl4.glGetUniformLocation(程序,“proj_矩阵”);
系统输出打印项次(“MV:+MV_位置);
系统输出打印项次(“项目:+项目位置);
gl4.glgenvertexarray(1,objects,Semantic.Object.VAO);
gl4.glBindVertexArray(objects[Semantic.Object.VAO]);
浮动顶点_位置[]={
-0.25f,0.25f,-0.25f,
-0.25f,-0.25f,-0.25f,
0.25f,-0.25f,-0.25f,
0.25f,-0.25f,-0.25f,
0.25f,0.25f,-0.25f,
-0.25f,0.25f,-0.25f,
0.25f,-0.25f,-0.25f,
0.25f,-0.25f,0.25f,
0.25f,0.25f,-0.25f,
0.25f,-0.25f,0.25f,
0.25f,0.25f,0.25f,
0.25f,0.25f,-0.25f,
0.25f,-0.25f,0.25f,
-0.25f,-0.25f,0.25f,
0.25f,0.25f,0.25f,
-0.25f,-0.25f,0.25f,
-0.25f,0.25f,0.25f,
0.25f,0.25f,0.25f,
-0.25f,-0.25f,0.25f,
-0.25f,-0.25f,-0.25f,
-0.25f,0.25f,0.25f,
-0.25f,-0.25f,-0.25f,
-0.25f,0.25f,-0.25f,
-0.25f,0.25f,0.25f,
-0.25f,-0.25f,0.25f,
0.25f,-0.25f,0.25f,
0.25f,-0.25f,-0.25f,
0.25f,-0.25f,-0.25f,
-0.25f,-0.25f,-0.25f,
-0.25f,-0.25f,0.25f,
-0.25f,0.25f,-0.25f,
0.25f,0.25f,-0.25f,
0.25f,0.25f,0.25f,
0.25f,0.25f,0.25f,
-0.25f,0.25f,0.25f,
-0.25f,0.25f,-0.25f};
gl4.glGenBuffers(1,buffer,0);
gl4.glBindBuffer(GL.GL_数组_BUFFER,BUFFER[0]);
gl4.glBufferData(GL.GL_数组_缓冲区,
顶点位置。长度,
FloatBuffer.wrap(顶点位置),
总帐、总帐(静态图);
gl4.glvertexattributepointer(1,3,GL.GL_FLOAT,false,0,0);
gl4.GlenableVertexAttributeArray(1);
//gl4.glEnable(GL.Glu CULL_面);
gl4.glFrontFace(GL.GL_-CW);
gl4.glEnable(GL.Glu深度测试);
gl4.glDepthFunc(GL.GL_LEQUAL);
}
@凌驾
受保护的无效关机(GL4 GL4){
gl4.glDeleteProgram(program);
gl4.gldeleteVertexArray(1,对象,对象[Semantic.Object.VAO]);
}
@凌驾
受保护的void onResize(GL4 GL4,int w,int h){
纵横比=w/h;
proj_矩阵=FloatUtil.makePerspective(proj_矩阵,
0,
是的,
50.0f,
方面,,
0.1f,
1000.0华氏度);
}
专用整数加载程序(GL4 gl,字符串[]名称,整数[]类型){
ShaderProgram ShaderProgram=新ShaderProgram();
for(int i=0;i
您对
glBufferDatapublic class Listening9 extends GLApplication {
    private int[] buffer = new int[1];
    float aspect = 0.0f;
    float[] proj_matrix = new float[16];
    int mv_location;
    int proj_location;
    float st = 0.001f;

    public Listening9() {
        super();
    }

    @Override
    protected void render(GL4 gl4, float time) {
        time = st;
        gl4.glViewport(0, 0, GLApplication.windowSize.width, GLApplication.windowSize.height);
        gl4.glClearColor(0.0f, 0.25f, 0.0f, 1.0f);
        gl4.glClearDepthf(1.0f);
        gl4.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

        gl4.glUseProgram(program);
        gl4.glUniformMatrix4fv(proj_location, 1, false, proj_matrix, 0);

        float f = (float)time * 0.3f;
        Matrix4 mv_matrix = new Matrix4();
        mv_matrix.translate(0.0f, 0.0f, -20.0f);
        mv_matrix.translate((float)Math.sin(2.1f * f) * 0.5f,
                             (float)Math.cos(1.7f * f) * 0.5f,
                             (float)( Math.sin(1.3f * f) * Math.cos(1.5f * f)) * 2.0f);
        mv_matrix.rotate((float)time * 45.0f, 0.0f, 1.0f, 0.0f);
        mv_matrix.rotate((float)time * 81.0f, 1.0f, 0.0f, 0.0f);
        gl4.glUniformMatrix4fv(mv_location, 1, false, mv_matrix.getMatrix(), 0);
        gl4.glDrawArrays(GL.GL_TRIANGLES, 0, 36);



        checkError(gl4, "display");
    }

    @Override
    protected void startup(GL4 gl4) {
        program = loadProgram(gl4, new String[] { "l9vs", "l9fs" }, new int[] {
                GL4.GL_VERTEX_SHADER, GL4.GL_FRAGMENT_SHADER });


        mv_location = gl4.glGetUniformLocation(program, "mv_matrix");
        proj_location = gl4.glGetUniformLocation(program, "proj_matrix");
        System.out.println("MV: "+mv_location);
        System.out.println("Proj: "+proj_location);

        gl4.glGenVertexArrays(1, objects, Semantic.Object.VAO);
        gl4.glBindVertexArray(objects[Semantic.Object.VAO]);

        float vertex_positions[] = { 
                -0.25f,  0.25f, -0.25f,
                -0.25f, -0.25f, -0.25f,
                 0.25f, -0.25f, -0.25f,

                 0.25f, -0.25f, -0.25f,
                 0.25f,  0.25f, -0.25f,
                -0.25f,  0.25f, -0.25f,

                 0.25f, -0.25f, -0.25f,
                 0.25f, -0.25f,  0.25f,
                 0.25f,  0.25f, -0.25f,

                 0.25f, -0.25f,  0.25f,
                 0.25f,  0.25f,  0.25f,
                 0.25f,  0.25f, -0.25f,

                 0.25f, -0.25f,  0.25f,
                -0.25f, -0.25f,  0.25f,
                 0.25f,  0.25f,  0.25f,

                -0.25f, -0.25f,  0.25f,
                -0.25f,  0.25f,  0.25f,
                 0.25f,  0.25f,  0.25f,

                -0.25f, -0.25f,  0.25f,
                -0.25f, -0.25f, -0.25f,
                -0.25f,  0.25f,  0.25f,

                -0.25f, -0.25f, -0.25f,
                -0.25f,  0.25f, -0.25f,
                -0.25f,  0.25f,  0.25f,

                -0.25f, -0.25f,  0.25f,
                 0.25f, -0.25f,  0.25f,
                 0.25f, -0.25f, -0.25f,

                 0.25f, -0.25f, -0.25f,
                -0.25f, -0.25f, -0.25f,
                -0.25f, -0.25f,  0.25f,

                -0.25f,  0.25f, -0.25f,
                 0.25f,  0.25f, -0.25f,
                 0.25f,  0.25f,  0.25f,

                 0.25f,  0.25f,  0.25f,
                -0.25f,  0.25f,  0.25f,
                -0.25f,  0.25f, -0.25f};


        gl4.glGenBuffers(1, buffer, 0);
        gl4.glBindBuffer(GL.GL_ARRAY_BUFFER, buffer[0]);
        gl4.glBufferData(GL.GL_ARRAY_BUFFER,
                     vertex_positions.length,
                     FloatBuffer.wrap(vertex_positions),
                     GL.GL_STATIC_DRAW);
        gl4.glVertexAttribPointer(1, 3, GL.GL_FLOAT, false, 0, 0);
        gl4.glEnableVertexAttribArray(1);

        //gl4.glEnable(GL.GL_CULL_FACE);
        gl4.glFrontFace(GL.GL_CW);

        gl4.glEnable(GL.GL_DEPTH_TEST);
        gl4.glDepthFunc(GL.GL_LEQUAL);

    }

    @Override
    protected void shutdown(GL4 gl4) {
        gl4.glDeleteProgram(program);
        gl4.glDeleteVertexArrays(1, objects, objects[Semantic.Object.VAO]);
    }

    @Override
    protected void onResize(GL4 gl4, int w, int h) {
        aspect = w / h;
        proj_matrix = FloatUtil.makePerspective(proj_matrix,
                0,
                true,
                50.0f,
                aspect,
                0.1f,
                1000.0f);

    }

    private int loadProgram(GL4 gl, String[] names, int[] types) {
        ShaderProgram shaderProgram = new ShaderProgram();

        for (int i = 0; i < names.length; i++) {
            shaderProgram.add(loadShader(gl, types[i], names[i]));
        }

        shaderProgram.init(gl);

        int id = shaderProgram.program();

        shaderProgram.link(gl, System.out);

        checkError(gl, "initProgram");
        System.out.println("Program loaded! (" + id + ")");
        return id;
    }

    private ShaderCode loadShader(GL4 gl, int type, String name) {
        return ShaderCode.create(gl, type, this.getClass(), SHADERS_ROOT, null,
                name, "sl", null, true);
    }

    public static void main(String[] args) {
        new Listening9();
    }

    @Override
    protected void onUP() {
        st += 0.001f;
    }

}
    gl4.glBufferData(GL.GL_ARRAY_BUFFER,
                 vertex_positions.length*sizeof(GLfloat),
                 FloatBuffer.wrap(vertex_positions),
                 GL.GL_STATIC_DRAW);