3D对象以看起来像2D对象的方式着色

use*_*291 0 shader lighting opengl-es glsl fragment-shader

我正在使用以下着色器源代码来实现顶点和片段.

顶点着色器源:

#define highp
attribute highp vec3 position;
uniform highp mat4 mvp;
void main(void)
{
    gl_Position = mvp * vec4(position, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

片段着色器源:

#define highp
uniform highp vec3 color;
void main(void)
{
    gl_FragColor = vec4(color, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

但是,着色器无法正常工作.如下面的屏幕截图所示,3D对象的颜色就像2D对象一样:

3D对象的颜色类似于2D对象


glGetShaderiv带有GL_COMPILE_STATUS返回success == TRUE,因此没有着色器编译错误.

glGetShaderiv(shaderObj, GL_COMPILE_STATUS, &success);
Run Code Online (Sandbox Code Playgroud)

我没有尝试glGetError()代码.我要去尝试一下.但我怀疑我没有收到任何OpenGL错误.


我相信我需要调整color顶点和片段着色器.我应该如何调整着色器源中的颜色?任何人都可以通过暗示来帮助我.到目前为止,我无法通过修改源来解决问题.


UPDATE

在@ Rabbid76 的帮助下,3D对象看起来很不错:

3D对象现在看起来不错:)

我正在使用@ Rabbid76代码进行一些小修改:将#version 130顶点和片段着色器源添加到顶部.看起来我的英特尔显卡需要该#version 130指令,否则会引发一些警告和错误:

警告:片段着色器中不支持扩展"GL_OES_standard_derivative"

#version 130指令解决了上述警告及其后续错误.

use*_*321 5

您的着色器工作正常.看起来它是2D,因为您的着色器中没有任何光照.均匀颜色的对象将看起来是2D,因为没有深度线索,例如自阴影或镜面反射高光等.