gpt4 book ai didi

xcode4 - OpenGL ES 2.0 指定顶点着色器的法线

转载 作者:行者123 更新时间:2023-12-02 09:52:17 24 4
gpt4 key购买 nike

我无法在我绘制的立方体的所有面上获得正确的阴影。我从一张脸到另一张脸实现了平滑过渡,但边缘没有正确显示。

一个不同的面(我得到所需边缘的地方),我得到阴影,使其显示组成该面的两个三角形。我相信问题出在我指定的法线上。我附加了我的顶点和法线矩阵以及我的顶点和片段着色器代码。顶点矩阵和法线矩阵相同。

我猜问题出在法线上,但我已经尝试了几乎所有方法,但效果没有改变。

//normal matrix and vertex matrix are same

static const float normals[]=

{
//v0,v1,v2,v3,
//v4,v5,v6,v7
0.5,0.5,0.5, -0.5,0.5,0.5, -0.5,-0.5,0.5, 0.5,-0.5,0.5,

0.5,0.5,-0.5, -0.5,0.5,-0.5, -0.5,-0.5,-0.5, 0.5,-0.5,-0.5

};

//vertex shader

attribute vec4 color;
attribute vec4 position;

attribute vec4 normal;

uniform mat4 u_mvpMatrix;
uniform vec4 lightDirection;
uniform vec4 lightDiffuseColor;
uniform float translate;

varying vec4 frontColor;



//varying vec4 colorVarying;



void main()

{

vec4 normalizedNormal = normalize(u_mvpMatrix* normal);
vec4 normalizedLightDirection = normalize(lightDirection);

float nDotL = max(dot(normalizedNormal, normalizedLightDirection), 0.0);


frontColor = color * nDotL * lightDiffuseColor;


gl_Position = u_mvpMatrix * position;


}

//fragment shader

varying lowp vec4 frontColor;

void main()
{


gl_FragColor = frontColor;


}

请帮忙?预先感谢!

最佳答案

你的问题与你的法线矩阵无关,它与你的输入法线有关。

据我所知,您提供了 8 个法线,每个顶点一个,这意味着您提供了预平均法线;您的顶点着色器无法对它们进行平均。

为了在照明中具有适当的不连续性,您需要不连续的法线:对于每个四边形,您有 4 个顶点,每个顶点都有一个与四边形法线匹配的法线。所以你最终会得到 6x4 = 24 个法线(顶点数量也是如此)。

您可能需要查看以下内容以获取更详细的说明: http://www.songho.ca/opengl/gl_vertexarray.html

关于xcode4 - OpenGL ES 2.0 指定顶点着色器的法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6232601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com