如何重用相同的顶点着色器来绘制不同的gl_Position

时间:2016-06-02 12:44:47

标签: c++ opengl glsl

我正在阅读有关现代OpenGL的这些tutorials。在教程5中,有一个练习用于在立方体之外绘制额外的三角形。我的理解是我可以重复使用相同的顶点着色器来绘制多个三角形(即立方体的三角形和一个额外的独立三角形)。我的问题是顶点着色器

#version 330 core

// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec3 vertexColor;
layout(location = 2) in vec3 vertexTriangle_modelspace;


// Output data ; will be interpolated for each fragment.
out vec3 fragmentColor;
// Values that stay constant for the whole mesh.
uniform mat4 MVP;

void main(){    

    // Output position of the vertex, in clip space : MVP * position
    gl_Position =  MVP * vec4(vertexPosition_modelspace,1); // Cube

    //gl_Position =  MVP * vec4(vertexTriangle_modelspace,1); // Triangle

    // The color of each vertex will be interpolated
    // to produce the color of each fragment
    fragmentColor = vertexColor;
}

它只绘制一个gl_Position和最后一个xyžřy。是否可以为一个顶点着色器输出多个gl_Position?

1 个答案:

答案 0 :(得分:2)

顶点着色器无法渲染三角形。或立方体。管他呢。它们只是在顶点上执行操作。该顶点是否是三角形,线条,立方体,擎天柱等的一部分。它并不关心。

顶点着色器取一个顶点并写出一个顶点。对象由多个顶点组成。因此,当您发出渲染命令时,该命令中的每个顶点都会转到VS. VS为它接收的每个顶点写一个顶点。