c++ - 糟糕的 3d 三角形渲染

标签 c++ opengl

<分区>

我正在尝试使用 opengl 3.1 获取 3D 三角形。它可以很好地呈现为 2D 三角形,但是当我添加第三个坐标时,它并没有像我想要的那样进行。我将 0.0 z 坐标添加到所有三个三角形顶点。以下是代码:

void init( void )
{   
    vec3 points[NumPoints];

    /*
    points[0] = vec2(-0.9, 0.9 );
    points[1] = (vec2(-0.9, -0.9));
    points[2] = (vec2(0.9, -0.9));
   */

    points[0] = vec3(-0.9, 0.9, 0.0 );
    points[1] = vec3(-0.9, -0.9, 0.0 );
    points[2] = vec3(0.9, -0.9, 0.0 );


    // Create a vertex array object
    GLuint vao;
    glGenVertexArrays( 1, &vao );
    glBindVertexArray( vao );

    // Create and initialize a buffer object
    GLuint buffer;
    glGenBuffers( 1, &buffer );
    glBindBuffer( GL_ARRAY_BUFFER, buffer );
    glBufferData( GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW );

    // Load shaders and use the resulting shader program
    GLuint program = InitShader( "vshader21.glsl", "fshader21.glsl" );
    glUseProgram( program );

    // Initialize the vertex position attribute from the vertex shader
    GLuint loc = glGetAttribLocation( program, "vPosition" );
    glEnableVertexAttribArray( loc );
    glVertexAttribPointer( loc, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0) );

    glClearColor( 1.0, 1.0, 1.0, 1.0 ); // white background
    glEnable(GL_DEPTH_TEST); 
}


void display( void )
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  // clear the window
    glDrawArrays( GL_TRIANGLES, 0, NumPoints );    // draw the points
    glFlush();
}

int main( int argc, char **argv )
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH );

    glutInitWindowSize( 512, 512 );

    glutCreateWindow( "Triangle" );
    glewInit();
    init();

    glutDisplayFunc( display );
    glutKeyboardFunc( keyboard );

    glutMainLoop();
    return 0;
}

最佳答案

你说它给 Z 添加零,但这就是你在顶点数组中实际指定的内容。另外 glVertexAttribPointer 第二个参数在你的情况下应该是 3 。

关于c++ - 糟糕的 3d 三角形渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20502314/

相关文章:

c++ - 使用指向对象的指针进行析构

c++ - 如何在 Windows 7 中使用 OpenGL、Glut 和 Visual Studio 2008 准备 C++ 项目

qt - FindQt4 无法正确链接 QtOpenGL 项目

C++ varargs wrapper for a vsnprintf function unitended behavior

c++ - 是否有 std::lock_guard<std::mutex> lock(m) 的简写?

c# - 如果C++中的DLL不支持二进制封装,那么什么时候才可以使用它们呢?

c++ - 无法使用 boost::serialization 和 shared_ptr 反序列化

java - glDrawElements 不绘制任何东西

c++ - glsl 蒙皮障碍,谁能跳过那个?

opengl - 具有两个窗口的 SDL2 和 OpenGL 函数